小波变换滤除高斯白噪声代码
时间: 2023-07-22 12:19:19 浏览: 85
以下是使用小波变换滤除高斯白噪声的 Python 代码示例:
```python
import pywt
import numpy as np
# 生成含噪声的信号
x = np.linspace(0, 1, num=1024)
signal = np.sin(20 * np.pi * x) + 0.5 * np.sin(40 * np.pi * x)
noise = np.random.normal(0, 0.2, size=1024)
noisy_signal = signal + noise
# 小波变换
wavelet = 'db4'
level = pywt.dwt_max_level(data_len=len(noisy_signal), filter_len=pywt.Wavelet(wavelet).dec_len)
coeffs = pywt.wavedec(data=noisy_signal, wavelet=wavelet, level=level)
# 阈值处理
sigma = np.median(np.abs(coeffs[-level]))
threshold = sigma * np.sqrt(2 * np.log(len(noisy_signal)))
for i in range(1, len(coeffs)):
coeffs[i] = pywt.threshold(coeffs[i], threshold)
# 重构信号
filtered_signal = pywt.waverec(coeffs=coeffs, wavelet=wavelet)
# 绘制结果
import matplotlib.pyplot as plt
plt.figure(figsize=(10, 5))
plt.plot(x, signal, label='Original Signal')
plt.plot(x, noisy_signal, label='Noisy Signal')
plt.plot(x, filtered_signal, label='Filtered Signal')
plt.legend()
plt.show()
```
代码中使用的小波基为 Daubechies 4 阶小波(db4),通过最大可分解层数自动确定分解层数。对每层小波系数进行阈值处理,其中阈值设为 $\sigma\sqrt{2\log n}$,其中 $\sigma$ 为小波系数的中位数。最后通过小波重构得到滤波后的信号,并将结果与原始信号和含噪声信号一起绘制出来,以便观察滤波效果。
阅读全文