小波阈值去噪 python
时间: 2023-12-03 16:41:07 浏览: 104
以下是使用PyWavelets库进行小波阈值去噪的Python代码示例:
```python
import pywt
import numpy as np
# 生成测试信号
x = np.linspace(0, 1, num=200)
y = np.sin(2 * np.pi * 5 * x) + np.sin(2 * np.pi * 10 * x)
y_noise = y + 0.3 * np.random.randn(len(y))
# 进行小波变换
coeffs = pywt.wavedec(y_noise, 'db4', level=4)
# 设置阈值
sigma = np.median(np.abs(coeffs[-1])) / 0.6745
threshold = sigma * np.sqrt(2 * np.log(len(y)))
# 进行小波阈值去噪
coeffs_thresh = [pywt.threshold(i, value=threshold, mode='soft') for i in coeffs]
# 重构信号
y_denoised = pywt.waverec(coeffs_thresh, 'db4')
# 绘制结果
import matplotlib.pyplot as plt
plt.plot(x, y, label='Original signal')
plt.plot(x, y_noise, label='Noisy signal')
plt.plot(x, y_denoised, label='Denoised signal')
plt.legend()
plt.show()
```
该代码首先生成了一个测试信号,然后使用PyWavelets库的`wavedec`函数进行小波变换,得到小波系数。接着,根据小波系数的中位数和噪声的标准差计算阈值,并使用`threshold`函数对小波系数进行阈值处理。最后,使用`waverec`函数对处理后的小波系数进行重构,得到去噪后的信号。最后,使用Matplotlib库将原始信号、带噪信号和去噪信号绘制在同一张图上,以便比较它们的差异。
阅读全文