python 数字信号高通滤波器
时间: 2023-10-29 12:06:30 浏览: 112
模拟高通带通及带阻滤波器的设计-python tornado 中文教程
Python中可以使用信号处理库`scipy`来实现数字信号的高通滤波器。具体步骤如下:
1. 导入所需的库:
```python
import numpy as np
from scipy import signal
import matplotlib.pyplot as plt
```
2. 定义滤波器的参数:
```python
order = 4 # 滤波器阶数
cutoff_freq = 0.1 # 截止频率,决定了高通滤波器的频率范围
```
3. 创建滤波器:
```python
b, a = signal.butter(order, cutoff_freq, 'high', analog=False)
```
这里使用`signal.butter()`函数来创建滤波器,其中`order`为滤波器的阶数,`cutoff_freq`为截止频率,`'high'`表示高通滤波器。
4. 应用滤波器到信号:
```python
filtered_signal = signal.lfilter(b, a, input_signal)
```
这里的`input_signal`为输入信号,`filtered_signal`为经过滤波器处理后的输出信号。
完整示例代码如下:
```python
import numpy as np
from scipy import signal
import matplotlib.pyplot as plt
# 生成输入信号
t = np.linspace(0, 1, 1000, endpoint=False)
input_signal = np.sin(2 * np.pi * 10 * t) + np.sin(2 * np.pi * 50 * t) + np.random.randn(len(t))
# 定义滤波器的参数
order = 4
cutoff_freq = 0.1
# 创建滤波器
b, a = signal.butter(order, cutoff_freq, 'high', analog=False)
# 应用滤波器到信号
filtered_signal = signal.lfilter(b, a, input_signal)
# 绘制输入信号和滤波后的输出信号
plt.figure()
plt.plot(t, input_signal, label='Input Signal')
plt.plot(t, filtered_signal, label='Filtered Signal')
plt.xlabel('Time')
plt.ylabel('Amplitude')
plt.legend()
plt.show()
```
这个示例代码生成了一个包含10Hz和50Hz正弦信号以及噪声的输入信号,并使用高通滤波器进行滤波。最后,绘制了输入信号和滤波后的输出信号的图形。你可以根据需要修改输入信号的频率和噪声的强度来进行实验。
阅读全文