在python中使用小波对信号进行去噪

时间:2019-12-20 05:29:59

标签: python pandas matplotlib

我想用小波对信号去噪。 我生成了两个不同频率的理想正弦波,并为其添加了噪声。 请让我知道如何使用小波对下面的代码中提到的信号“ I_as_fft_array_noise”进行降噪。

导入库

from scipy import signal
import matplotlib.pyplot as plt
import numpy as np
import matplotlib.pyplot as plt
import pywt
import sys

定义100Hz和50Hz的信号正弦信号

Fs_fft = 1e4          # Sampling Frequency
Pi=np.pi
N1 = (1e5)/2

time1 = np.arange(N1) / float(Fs_fft)  
f1 = 100
x1 = 1000*np.sin(2*Pi*f1*time1)

time2 = np.arange(N1,2*N1) / float(Fs_fft)
f2 = 50
x2 = 500*np.sin(2*Pi*f2*time2)

T_fft_array    =np.concatenate((time1,time2))
I_as_fft_array = np.concatenate((x1,x2))

使用目标SNR添加噪声

参考:adding noise to a signal in python

I_as_fft_array_watts = I_as_fft_array ** 2
I_as_fft_array_db = 10 * np.log10(I_as_fft_array_watts)


target_snr_db = 20                                      

sig_avg_watts = np.mean(I_as_fft_array_watts)            

sig_avg_db = 10 * np.log10(sig_avg_watts)
noise_avg_db = sig_avg_db - target_snr_db   
noise_avg_watts = 10 ** (noise_avg_db / 10)
mean_noise = 0                                  
noise_volts = np.random.normal(mean_noise, np.sqrt(noise_avg_watts), len(I_as_fft_array_watts))
I_as_fft_array_noise = I_as_fft_array + noise_volts                 

绘制理想信号

plt.plot(T_fft_array , I_as_fft_array)
plt.title('Ideal Signal')
plt.ylabel('Current [A]')
plt.xlabel('Time [sec]')
plt.show()

绘制有噪声的信号

plt.plot(T_fft_array, I_as_fft_array_noise)
plt.title('Signal with noise')
plt.ylabel('Voltage (V)')
plt.xlabel('Time (s)')
plt.show()

0 个答案:

没有答案