python 实现低通滤波
时间: 2023-09-19 08:12:25 浏览: 103
实现低通滤波可以使用 Python 中的 scipy 库中的 signal 模块进行实现。具体步骤如下:
1. 导入所需的库
```python
import numpy as np
from scipy import signal
import matplotlib.pyplot as plt
```
2. 准备数据
```python
t = np.linspace(0, 1, 1000, False) # 时间序列
x = np.sin(2*np.pi*10*t) + np.sin(2*np.pi*20*t) # 生成两个正弦波叠加的信号
```
3. 设计滤波器
使用 `signal.butter` 函数进行设计,其中 `Wn` 参数表示滤波器的截止频率, `btype` 参数表示滤波器类型, `analog` 参数表示是否基于模拟滤波器设计, `output` 参数表示输出类型。
```python
fs = 1000 # 采样频率
fc = 15 # 截止频率
b, a = signal.butter(4, fc/(fs/2), btype='low', analog=False, output='ba')
```
4. 应用滤波器
使用 `signal.filtfilt` 函数对信号进行低通滤波,其中 `b` 和 `a` 参数为设计好的滤波器系数, `x` 为输入信号。
```python
y = signal.filtfilt(b, a, x)
```
5. 绘制滤波前后的信号
```python
plt.plot(t, x, 'b', alpha=0.75)
plt.plot(t, y, 'r', alpha=0.75)
plt.legend(['Original Signal', 'Filtered Signal'])
plt.show()
```
完整代码如下:
```python
import numpy as np
from scipy import signal
import matplotlib.pyplot as plt
# 准备数据
t = np.linspace(0, 1, 1000, False) # 时间序列
x = np.sin(2*np.pi*10*t) + np.sin(2*np.pi*20*t) # 生成两个正弦波叠加的信号
# 设计滤波器
fs = 1000 # 采样频率
fc = 15 # 截止频率
b, a = signal.butter(4, fc/(fs/2), btype='low', analog=False, output='ba')
# 应用滤波器
y = signal.filtfilt(b, a, x)
# 绘制滤波前后的信号
plt.plot(t, x, 'b', alpha=0.75)
plt.plot(t, y, 'r', alpha=0.75)
plt.legend(['Original Signal', 'Filtered Signal'])
plt.show()
```
阅读全文