通常,当我们向信号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
来生成噪声信号。我怎么能这样做?
答案 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例程的良好描述。