为具有指定SNR的信号添加噪声

时间:2018-04-19 19:44:58

标签: matlab

我有一个余弦信号和一些由正弦噪声信号和随机噪声信号组成的干扰。我试图将这些噪声信号添加到余弦信号中,信噪比为2 dB。为实现这一目标,我做了以下工作:

  • 首先,我添加了两个噪声信号以获得单个噪声信号;
  • 然后我用Parseval定理计算每个信号的功率,余弦信号和新的合成噪声信号;
  • 然后我用所需的功率编辑了噪声信号,通过将其当前功率的平方根归一化并乘以所需功率的平方根来实现该SNR。所需的功率来自SNR的公式:

    噪声功率=余弦信号的功率/ 10 ^ SNR / 10;

  • 最后,我检查了新的SNR,结果不是2 dB。

这是我的代码:

fs=250;
n=0:1/fs:4; 
interference=sin(2*pi*(50)*n); % interference signal
random_noise=rand(size(n)); %  random noise signal
noise_signal=interference+random_noise;% determinning the tottal noisy signal that will be added later
signal= cos(2*pi*(50)*n); % Definning signal of interest 
signal_power=sum(abs(signal.^2)) ; %u sing parseval's theorem
current_noisy_signal_power=sum(abs(noise_signal.^2)); % using parseval's theorem
pn=signal_power/(10^(2/10)); % required SNR =2dB
new_noisy_signal=(noise_signal./sqrt(current_noisy_signal_power)).*sqrt(pn); % normalizing the noisy signal to get unity power then multiplying it by the new power to achieve the required SNR
new_noisy_signal_power=sum(abs(new_noisy_signal.^2));
SNR=10*log(signal_power/new_noisy_signal_power)

那我的代码有什么问题?为什么信噪比不是2 dB?

1 个答案:

答案 0 :(得分:1)

SNR通常使用基数为10的对数计算,它与计算2dB的方式相匹配:(10^(2/10))。因此,在计算SNR时使用log10而不是log

>> SNR = 10*log10(signal_power/new_noisy_signal_power)
SNR =  2.0000