小波变换去噪python代码
时间: 2024-12-10 12:16:27 浏览: 42
好的,下面是一个使用小波变换进行去噪的Python代码示例。我们将使用`PyWavelets`库来进行小波变换,并使用`matplotlib`库来可视化结果。
首先,确保你已经安装了所需的库。如果没有安装,可以使用以下命令进行安装:
```bash
pip install PyWavelets matplotlib numpy
```
以下是完整的代码示例:
```python
import numpy as np
import pywt
import matplotlib.pyplot as plt
# 生成一个包含噪声的信号
np.random.seed(0)
time = np.linspace(0, 1, num=1024)
signal = np.sin(2 * np.pi * 7 * time) + np.sin(2 * np.pi * 14 * time)
noise = np.random.normal(0, 0.5, signal.shape)
signal_noisy = signal + noise
# 进行小波分解
wavelet = 'db8'
max_level = pywt.dwt_max_level(len(signal_noisy), wavelet)
coeffs = pywt.wavedec(signal_noisy, wavelet, level=max_level)
# 对小波系数进行阈值处理
threshold = 0.4
coeffs_thresholded = [pywt.threshold(c, value=threshold, mode='soft') for c in coeffs]
# 重构去噪后的信号
signal_denoised = pywt.waverec(coeffs_thresholded, wavelet)
# 绘制结果
plt.figure(figsize=(12, 9))
plt.subplot(3, 1, 1)
plt.plot(signal)
plt.title('Original Signal')
plt.subplot(3, 1, 2)
plt.plot(signal_noisy)
plt.title('Noisy Signal')
plt.subplot(3, 1, 3)
plt.plot(signal_denoised)
plt.title('Denoised Signal')
plt.tight_layout()
plt.show()
```
### 代码解释
1. **生成信号和噪声**:我们生成了一个包含两个正弦波的信号,并添加了一些高斯噪声。
2. **小波分解**:使用`pywt.wavedec`函数对带噪声的信号进行小波分解。
3. **阈值处理**:对分解后的小波系数进行阈值处理,以去除噪声。
4. **信号重构**:使用处理后的小波系数进行信号重构,得到去噪后的信号。
5. **结果可视化**:使用`matplotlib`库绘制原始信号、带噪声的信号和去噪后的信号。
阅读全文