python进行普通滤波、维销波波、卡尔曼泡波、自适应滤波等病波方法消除或压制嗓声的代码
时间: 2023-07-10 11:37:07 浏览: 63
以下是一个简单的Python示例代码,展示了如何使用普通滤波、维纳滤波、卡尔曼滤波和自适应滤波等方法来消除或压制信号中的噪声。
```
import numpy as np
import matplotlib.pyplot as plt
from scipy.signal import wiener, medfilt
from filterpy.kalman import KalmanFilter
from filterpy.common import Q_discrete_white_noise
# 生成一个包含噪声的信号
np.random.seed(0)
t = np.linspace(0, 1, 100)
signal = np.sin(2*np.pi*10*t) + np.random.normal(0, 0.5, 100)
# 普通滤波
filtered_signal = medfilt(signal, kernel_size=3)
# 维纳滤波
wiener_signal = wiener(signal)
# 卡尔曼滤波
kf = KalmanFilter(dim_x=2, dim_z=1)
kf.x = np.array([[signal[0]], [0.]])
kf.F = np.array([[1., 1.], [0., 1.]])
kf.H = np.array([[1., 0.]])
kf.P *= 1000.
kf.R = 5
kf.Q = Q_discrete_white_noise(dim=2, dt=0.1, var=0.13)
kalman_signal = []
for z in signal:
kf.predict()
kf.update(z)
kalman_signal.append(kf.x[0])
# 自适应滤波
alpha = 0.05
adaptive_signal = np.zeros_like(signal)
for i in range(1, len(signal)):
adaptive_signal[i] = alpha * signal[i] + (1 - alpha) * adaptive_signal[i-1]
# 绘制结果
fig, ax = plt.subplots(5, 1, figsize=(10, 10))
ax[0].plot(t, signal)
ax[0].set_title('Original Signal')
ax[1].plot(t, filtered_signal)
ax[1].set_title('Median Filter')
ax[2].plot(t, wiener_signal)
ax[2].set_title('Wiener Filter')
ax[3].plot(t, kalman_signal)
ax[3].set_title('Kalman Filter')
ax[4].plot(t, adaptive_signal)
ax[4].set_title('Adaptive Filter')
plt.show()
```
这个代码使用 `medfilt()` 函数进行中值滤波,使用 `wiener()` 函数进行维纳滤波,使用 `filterpy` 库中的 `KalmanFilter` 类进行卡尔曼滤波,使用一个简单的递归公式进行自适应滤波。你可以根据自己的需求选择合适的滤波方法和参数。