在用于向信号中添加噪声的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()的特定方差产生噪声时,输出应该是相同的。我的理解有问题吗?我是这样检查的。
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。我想知道为什么?
发布于 2016-08-29 22:04:54
awgn
不产生具有特定方差的噪声。但是,如果您必须生成具有特定方差的噪声,您可以考虑定义自己的噪声产生器,它可以简单地将噪声放大或降到所需的水平:
function y = AddMyNoise(x, variance)
y = awgn(x, 10, 'measured');
y = x + (y - x) * sqrt(variance / var(y - x));
end
UPDATE:注意,这种强迫输出具有特定方差的方法()可能是危险的:,如果x有很少的元素,它会给出奇怪的输出。在x是标量的极限下,这种方法将把一个固定的值+-sqrt(方差)加到x上,不再有白噪声。但是,如果你有超过几个数据点,你会得到一个合理的白噪音。
https://stackoverflow.com/questions/39215427
复制相似问题