计算信号的SNR

时间:2014-02-21 21:14:37

标签: matlab signal-processing

我在MATLAB 2008 R2中的信号上添加了一些高斯白噪声

noisedSignal = awgn(signal, 25);% 25 is the SNR

但是当我计算noisedSignal

中的SNR时
snr = GetSNR(noisedSignal, noisedSignal-signal);

function SNR = GetSNR(signal, errorSignal)
    SNR = 20 * log10(sqrt(mean(signal.^2))/sqrt(mean(errorSignal.^2)));
end   

计算的SNR是1.1818而不是25.我缺少什么?

1 个答案:

答案 0 :(得分:4)

你应该考虑到这一点:

  • awgn假设信号具有单位功率
  • SNR的{​​{1}}参数以dB为单位
  • SNR估计为信号功率除以噪声功率,或近似噪声功率除以噪声功率。

请参阅以下示例:

awgn

这给出了

signal = randn(1,1e6); %// example signal with approximately unit power
S = mean(signal.^2); %// actual signal power
noisedSignal = awgn(signal, 25);
SN = mean(noisedSignal.^2); %// power of noised signal
N = mean((signal-noisedSignal).^2);
SN/N
10^(25/10)

所以计算出的SNR(ans = 316.9019 ans = 316.2278 )与期望值(SN/N)非常相似。