【问题标题】:How to generate complex white noise with specified SNR?如何生成具有指定 SNR 的复杂白噪声?
【发布时间】:2019-12-11 05:27:33
【问题描述】:

我正在使用以下代码生成具有指定 SNR(信噪比)和零均值的复杂白噪声:

import numpy as np

def GenerateNoise(signal, SNR_dB): # desiredSNR [dB]; signal is an array with complex values
   n = np.zeros((len(signal),1), dtype=complex)
   # SNR = var_signal^2 / var_n^2
   snr = 10.0**(SNR_dB/10.0) # Desired linear SNR
   var_signal = signal.var() # Measure power of signal
   var_n = var_signal / snr # Calculate required noise power for desired SNR
   if (var_n == 0): # In case of a null signal
       var_n = snr
   e = np.random.normal(0, np.sqrt(var_n/2), size=(len(signal), 2)).view(np.complex) # Generate noise with calculated power
   for i in range(0, len(signal)):
        n[i,0] = n[i,0] + e[i][0]
   print(10.0*np.log10((np.var(signal)**2)/(np.var(n)**2)))
   return n

代码的灵感来自question。问题是显示的 SNR 是指定 SNR 的两倍(例如,SNR_dB = -10 [dB],打印值为 ~ -20 [dB])。

有人知道错在哪里吗?

【问题讨论】:

    标签: python random complex-numbers noise


    【解决方案1】:

    我想通了。我没有计算,也没有正确显示噪音。这是更正后的代码,如果对任何人有用的话:

    import numpy as np
    def GenerateNoise(signal, SNR_dB): # desiredSNR [dB]; signal is an array with complex values
       n = np.zeros((len(signal),1), dtype=complex)
       # SNR = var_signal / var_n
       snr = 10.0**(SNR_dB/10.0) # Desired linear SNR
       var_signal = signal.var() # Measure power of signal
       var_n = var_signal / snr # Calculate required noise power for desired SNR
       if (var_n == 0): # In case of a null signal
           var_n = snr
       e = np.random.normal(0, np.sqrt(var_n*2.0)/2.0, size=(len(signal), 2)).view(np.complex) # Generate noise with calculated power
       for i in range(0, len(signal)):
           n[i,0] = n[i,0] + e[i][0]
       print(10.0*np.log10((np.var(signal))/(np.var(n))))
       return n
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-05-28
      • 1970-01-01
      • 2023-04-02
      • 2017-02-01
      • 1970-01-01
      • 2020-08-26
      • 2019-03-25
      • 1970-01-01
      相关资源
      最近更新 更多