如何使用特定方差生成噪音

时间:2016-08-29 21:21:59

标签: matlab noise

在用于向信号添加噪声的matlab函数awgn()中,是否有指定方差的方法?

一般情况下,我会简单地完成noisevec = sqrt(2)*randn(length(X),1);创建方差2的噪声向量。然后嘈杂的观察结果

Y = X+noisevec

但是,我想应用awgn(),然后检查噪声的方差是否确实是用户指定的。怎么做?

         % add noise to produce
         % an SNR of 10dB, use:
         X = sin(0:pi/8:6*pi);
         Y = awgn(X,10,'measured');

更新:根据解决方案,当使用提供的答案/解决方案中给出的awgn()以及不使用awgn()时使用awgn()生成具有特定方差的噪声时,输出应该相同。我的理解有问题吗?这是我检查的方式。

x =  rand(1,10); $generating source input
snr =10;
variance = 0.1;
%This procedure is  based on the answer
y1 = awgn(x, snr, 'measured');
y1 = x + (y1 - x) * sqrt(variance / var(y1 - x));

%This is the traditional way, without using awgn()

 y2 = x+sqrt(variance)*randn(1,10);

y1不等于y2。我想知道为什么?

1 个答案:

答案 0 :(得分:2)

awgn不会生成具有特定差异的噪音。但是如果你必须生成具有特定方差的噪声,你可以考虑定义你自己的噪声发生器,它可以简单地将噪声上调或下调到所需的水平:

function y = AddMyNoise(x, variance)
    y = awgn(x, 10, 'measured');
    y = x + (y - x) * sqrt(variance / var(y - x));
end

更新:请注意,这种强制输出具有特定方差的方法可能很危险:如果x的元素很少,它会给出奇怪的输出。在x是标量的极限中,此方法将向x添加+ -sqrt(方差)的固定值。再也没有白噪声了。但是如果你有多个数据点,你会得到一个相当白噪声。