📌  相关文章
📜  使用Scipy- Python设计IIR带通椭圆滤波器(1)

📅  最后修改于: 2023-12-03 15:36:37.165000             🧑  作者: Mango

使用Scipy- Python设计IIR带通椭圆滤波器

简介

本文将介绍如何使用Scipy库中的signal模块来设计IIR带通椭圆滤波器。带通椭圆滤波器是一种数字信号处理中常用的滤波器,可以帮助我们滤除不需要的频率,保留需要的频率。

程序实现

首先,我们需要导入所需的库:

import numpy as np
import matplotlib.pyplot as plt
from scipy import signal

然后,我们需要设定带通滤波器的参数,包括滤波器的通带、阻带、通带频率、阻带频率与采样频率等:

# 设定滤波器参数
fp = 100.0  # 通带截止频率
fs = 200.0  # 阻带截止频率
wp = fp / (0.5 * fs)  # 归一化通带截止频率
ws = fs / (0.5 * fs)  # 归一化阻带截止频率
gpass = 1.0  # 通带最大衰减
gstop = 30.0  # 阻带最小衰减

设定好参数之后,我们就可以使用signal.iirdesign函数来设计带通椭圆滤波器了:

# 设计IIR带通椭圆滤波器
b, a = signal.iirdesign(wp, ws, gpass, gstop, analog=False, ftype='ellip')

接下来,我们可以使用设计好的滤波器来处理信号了。假设我们的原始信号为s,采样频率为fs,我们可以使用signal.filtfilt函数来进行滤波:

# 生成原始信号
t = np.linspace(0, 1, 1000, endpoint=True)
s = np.sin(2 * np.pi * 50 * t) + np.sin(2 * np.pi * 200 * t) + np.random.randn(len(t))

# 使用滤波器进行滤波
filtered_s = signal.filtfilt(b, a, s)

最后,我们可以绘制出原始信号和滤波后的信号进行比较:

# 绘制原始信号和滤波后的信号
fig, (ax1, ax2) = plt.subplots(2, 1, sharex=True)
ax1.plot(t, s, 'b-')
ax1.set(title='Original Signal')
ax2.plot(t, filtered_s, 'r-')
ax2.set(title='Filtered Signal')
plt.show()
结语

本文介绍了如何使用Scipy库中的signal模块来设计IIR带通椭圆滤波器,并使用设计好的滤波器来滤除信号中不需要的频率。希望对大家有所帮助!