分别用滤波器、小波变换、时域平均三个方法演示一下振动数据怎么用python进行去噪
时间: 2023-04-04 19:01:45 浏览: 99
基于Python实现一种使用傅里叶变换对混合波形进行去噪的方法
可以使用Python中的SciPy库来进行信号处理和去噪。下面是三种方法的示例代码:
1. 滤波器方法:
```python
from scipy import signal
import matplotlib.pyplot as plt
import numpy as np
# 生成随机振动数据
t = np.linspace(, 1, 100, endpoint=False)
x = np.sin(2*np.pi*10*t) + np.random.randn(100)*.5
# 设计滤波器
b, a = signal.butter(4, .1, 'lowpass')
# 应用滤波器
y = signal.filtfilt(b, a, x)
# 绘制原始数据和去噪后的数据
plt.plot(t, x, label='Raw data')
plt.plot(t, y, label='Filtered data')
plt.legend()
plt.show()
```
2. 小波变换方法:
```python
import pywt
import matplotlib.pyplot as plt
import numpy as np
# 生成随机振动数据
t = np.linspace(, 1, 100, endpoint=False)
x = np.sin(2*np.pi*10*t) + np.random.randn(100)*.5
# 进行小波变换
coeffs = pywt.wavedec(x, 'db4', level=6)
coeffs[1:] = (pywt.threshold(i, value=.5, mode='soft') for i in coeffs[1:])
y = pywt.waverec(coeffs, 'db4')
# 绘制原始数据和去噪后的数据
plt.plot(t, x, label='Raw data')
plt.plot(t, y, label='Denoised data')
plt.legend()
plt.show()
```
3. 时域平均方法:
```python
import numpy as np
import matplotlib.pyplot as plt
# 生成随机振动数据
t = np.linspace(, 1, 100, endpoint=False)
x = np.sin(2*np.pi*10*t) + np.random.randn(100)*.5
# 计算时域平均值
window_size = 10
y = np.convolve(x, np.ones(window_size)/window_size, mode='valid')
# 绘制原始数据和去噪后的数据
plt.plot(t, x, label='Raw data')
plt.plot(t[window_size-1:], y, label='Averaged data')
plt.legend()
plt.show()
```
阅读全文