【问题标题】:Add random noise with specific SNR to a signal将具有特定 SNR 的随机噪声添加到信号中
【发布时间】:2019-03-25 14:35:28
【问题描述】:

我有随机生成的信号,例如:

%frequency
f1 = 1000; f2 = 2000;
Fs = 8000; %sampling frequency

%amplitudes
amp1 = 0.75;
amp2 = 0.2;

%time
dt = 1/Fs
stopTime = 0.3;
t = 0:dt:stopTime;

%random noise
noise = randn(1,length(t))

%generated signal
Signal = amp1*sin(2*pi*f1*t) + amp2*sin(2*pi*f1*t) + noise;

现在我需要创建两个具有特定 SNR 的随机噪声信号 S1、S2。 添加到 S1 的噪声必须与添加到 S2 的噪声不相关 这是我尝试过的:

%SNR in dB
SNR = [-80,-40,-20,0,20,40,80];

%S1,S2 = Signal + rand noise with SNR -40dB
S1 = awgn(Signal,SNR(2),'measured')
S2 = awgn(Signal,SNR(2),'measured')

这是产生 SNR 从 -80dB 到 +80dB 范围内的随机噪声的正确方法吗?添加到 S1 的噪声是否会与添加到 S2 的噪声不相关?

【问题讨论】:

    标签: matlab signal-processing noise


    【解决方案1】:

    您可以只计算信号的方差并添加具有产生所需 SNR 所需方差的噪声。这里以一些python代码为例

    import scipy as sp
    import scipy.fftpack as fft
    
    # frequency
    f1 = 1000.0
    Fs = 8000.0  # sampling frequency
    
    # amplitudes
    amp1 = 0.75
    
    # time
    n = sp.arange(1024)
    
    # Desired SNR in dB
    SNR_dB = 40
    
    # Desired linear SNR
    snr = 10.0**(SNR_dB/10.0)
    print "Linear snr = ", snr
    
    # Measure power of signal
    signal1 = amp1*sp.sin(2*sp.pi*f1/Fs*n)
    p1 = signal1.var()
    print "Power of signal1 = ", p1
    
    # Calculate required noise power for desired SNR
    n = p1/snr
    print "Noise power = ", n
    print "Calculated SNR =  %f dB" % (10*sp.log10(p1/n))
    
    # Generate noise with calculated power
    w = sp.sqrt(n)*sp.randn(1024)
    
    # Add noise to signal
    s1 = signal1 + w
    

    添加到 S1 的噪声是否会与添加到 S2 的噪声不相关?

    是的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-05-28
      • 2015-03-31
      • 2021-01-12
      • 2017-01-20
      • 1970-01-01
      • 2019-01-17
      • 1970-01-01
      • 2019-12-11
      相关资源
      最近更新 更多