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

Matlab: Generate noisy signal for particular SNR and particular variance

一般来说,当我们向信号添加噪声时 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 来生成噪声信号。我该怎么做?

有许多可能的约定用于定义 s/n 比率,一个常见的约定是基于信号和噪声功率的概念。若频谱总功率为p,噪声功率为np,则信噪比可写为snr = p - np,当功率以dB为单位时,或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 例程。