如何使用特定方差生成噪声
How to generate noise using specific variance
在用于向信号添加噪声的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。我想知道为什么?
awgn
不会生成具有特定方差的噪声。但是,如果您必须生成具有特定方差的噪声,您可以考虑定义自己的噪声发生器,它可以简单地将噪声放大或缩小到所需的水平:
function y = AddMyNoise(x, variance)
y = awgn(x, 10, 'measured');
y = x + (y - x) * sqrt(variance / var(y - x));
end
更新:请注意,这种强制输出具有特定方差的方法可能很危险:如果 x 的元素很少,它会给出奇怪的输出。在 x 为标量的限制下,此方法会将 +-sqrt(variance) 的固定值添加到 x。没有白噪音了。但是如果你有多个数据点,你会得到一个合理的白噪声。
在用于向信号添加噪声的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。我想知道为什么?
awgn
不会生成具有特定方差的噪声。但是,如果您必须生成具有特定方差的噪声,您可以考虑定义自己的噪声发生器,它可以简单地将噪声放大或缩小到所需的水平:
function y = AddMyNoise(x, variance)
y = awgn(x, 10, 'measured');
y = x + (y - x) * sqrt(variance / var(y - x));
end
更新:请注意,这种强制输出具有特定方差的方法可能很危险:如果 x 的元素很少,它会给出奇怪的输出。在 x 为标量的限制下,此方法会将 +-sqrt(variance) 的固定值添加到 x。没有白噪音了。但是如果你有多个数据点,你会得到一个合理的白噪声。