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 例程。
一般来说,当我们向信号添加噪声时 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 例程。