【问题标题】:How to insert a random noise to a signal如何在信号中插入随机噪声
【发布时间】:2017-01-20 19:36:48
【问题描述】:

我有一个随机信号,我想给它添加一个随机噪声。

我可以使用awgnrandn 为标准信号(如正弦、余弦、方波、锯齿波等)添加噪声

但是当我尝试在像signal = [200 180 160 120 80 80 70 70 65 50 55 120 10 10];这样的随机信号上添加相同的噪声时,这不起作用

这是我尝试过的两种方法:

signal = [200 180 160 120 80 80 70 70 65 50 55 120 10 10 10]; %original signal
plot(signal)
sigma = 0.07; %noise standard deviation
noisy = signal + sigma*randn(size(signal)); %noisy signal
plot(noisy)

signal = [200 180 160 120 80 80 70 70 65 50 55 120 10 10 10];
s = awgn(signal,10,'measured');
plot([signal s])

如何为这些随机信号添加噪声?为什么我不能使用标准命令完成这项任务?

【问题讨论】:

  • 您的 sigma 与信号相比如此之小是否正常?
  • “它不起作用”是什么意思?
  • @obchardon :您可以根据需要尽可能多地改变 sigma,sigma 的值无关紧要,因为我只需要在原始信号上叠加一个随机噪声。由于我是堆栈溢出的新手,而且我的声誉只有“5”,因此我无法添加任何图像来支持我的问题。
  • 但我的意思是,你的代码是正确的,它正在工作。
  • 据我所知,它应该可以工作。只有您可能在绘图上看不到这一点,因为当您的信号范围从 10 到 200 时,0.07 不可见。尝试缩放,然后尝试将噪声 sigma 更改为可观察的值,例如 20。也许您被以下事实误导您使用在点之间绘制直线的 plot() 函数吗?如果您认为没有差异,请尝试:signal = [200 180 160 120 80 80 70 70 65 50 55 120 10 10 10]; plot(signal); hold on; % to stop newer plots overwrite previous ones sigma = 10; noisy = signal+sigma*randn(size(signal)); plot(noisy,'r');

标签: matlab random noise


【解决方案1】:

如果我理解您的问题,您想以比信号本身的采样频率更小的间隔为信号添加一些噪声。

在这种情况下,您可以使用interp1 来插入您的信号:

signal   = [200 180 160 120 80 80 70 70 65 50 55 120 10 10];
n        = length(signal);
sinterp  = interp1(1:n,signal,1:0.1:n); %interpolation of your signal with interp1(x,y,new_x)
sigma    = 10; %a bigger sigma so we can observe the noise.
noisy    = sinterp + sigma*randn(size(sinterp));
plot(1:n,signal,'b',1:0.1:n,noisy,'r')

【讨论】:

  • 谢谢.. 这正是我想要的。但是我怎样才能应用相同的逻辑,比如a = [00 00 20 20 00 00 40 40 40 00 00 55 55 38 00]; b = [00 00 70 70 50 50 50 70 70 100 100 120 120 00 00]; c = [200 180 160 120 80 80 70 70 65 50 55 120 10 10 10]; 之类的 3 个信号
  • 如果需要多次使用同一部分代码:创建一个函数!
猜你喜欢
  • 2015-03-31
  • 1970-01-01
  • 1970-01-01
  • 2016-07-17
  • 2019-03-25
  • 1970-01-01
  • 2014-10-25
  • 2020-06-18
  • 1970-01-01
相关资源
最近更新 更多