Matlab:为特定SNR和特定方差生成噪声信号

时间:2015-03-24 18:23:10

标签: matlab signal-processing noise

通常,当我们向信号x=rand(1,100)添加噪声时,这是一种方式

 sigma_2_v = 0.5;
noisy_signal = rand(1,100) + sqrt(sigma_2_v)*randn(1,100);

这里有另一种方法: Proper way to add noise

对于我的情况,我需要获得有关噪声方差的信息sigma_2_v,并通过改变sigma_2_v来生成噪声信号。我怎么能这样做?

1 个答案:

答案 0 :(得分:1)

有许多可能的惯例用于定义s / n比,常见的是基于信号和噪声功率的概念。如果频谱的总功率为p且噪声功率为np,则当功率以dB为单位时,信噪比可写为snr = p - np,或者snr = p/np,当功率为线性单位时。

MATLAB(和Octave等效)函数awgn将(白高斯)噪声添加到输入数据阵列,达到所需的最终s / n功率电平,默认情况下以dB为单位指定。函数awgn使用另一个函数wgn来生成表示所需噪声功率级别的噪声的数组。噪声从高斯分布中采样(重新调整以使阵列中的点的方差完全等于所需的噪声功率水平as some suggest you do;不要重新调整噪声:如果您重新调整从噪声分布中采样的点,则这些点(显然)不一定反映所需的噪声分布或所需的功率水平!)。您可以通过awgn以多种非默认方式指定要添加到数据中的噪声量,例如:a)通过指定输入数据的功率(默认值为0 dB)或b )通过要求例程使用公式p = var(data,1)来计算输入数据的功效,其中var(...,1)意味着计算总体方差。在任何一种情况下,例程都使用公式np = p-snr计算所需的噪声功率电平(以dB为单位)。

优秀的MATLAB文档提供了awgn例程的良好描述。