python低通滤波器设计(FIR, IIR)

这里就只举简单的例子,关于具体的函数参数可以去python官网查看。

from scipy import signal
from soundfile import read, write


def low_pass_FIR(data):
    b = signal.firwin(15, 0.125)    # need more orders than IIR
    low_data = signal.lfilter(b, 1, data)
    return low_data


def low_pass_IIR(data):
    b, a = signal.butter(2, 0.125, btype='low', output='ba')
    low_data = signal.lfilter(b, a, data)
    return low_data


a = read('sample.wav')
# a1 = low_pass_IIR(a[0])
a1 = low_pass_FIR(a[0])
write('low_fir.wav', a1, a[1])
### 数字滤波器概述 在数字信号处理(DSP)领域,滤波设计是一个核心话题。两种主要的数字滤波器类型是有限脉冲响应(FIR)滤波器和无限脉冲响应(IIR)滤波器。 #### IIR 滤波器与 FIR 滤波器的区别 1. **脉冲响应** - FIR滤波器具有有限长度的脉冲响应,这意味着其输出仅依赖于有限数量的输入样本[^3]。 - IIR滤波器则拥有无限长度的脉冲响应,意味着它的输出不仅受当前和过去输入的影响,也受到之前输出的影响。 2. **相位特性** - FIR滤波器能够相对容易地被设计成具备线性相位特性,这对维持信号内部各频率成分的时间顺序至关重要,在音频处理等领域尤为重要。 - 大多数情况下,IIR滤波器不具备天然的线性相位属性;然而通过特定技术手段也可以接近达到这一效果。 3. **稳定性考量** - 所有的FIR滤波器本质上都是稳定的,因为它们不存在任何形式上的反馈回路结构,从而简化了实际应用中的部署过程并提高了安全性。 - 对比之下,鉴于IIR滤波器采用了反馈机制,所以在某些条件下可能出现不稳定的情况,因此在设计阶段需格外注意确保系统的整体稳定性。 #### 应用场景分析 - 当项目需求强调严格的线性相位性能或是绝对稳定性的保障时,应优先考虑采用FIR滤波方案。 - 若目标是在较低阶数下获得较高的衰减率或更陡峭的选择性曲线,则可能更适合选用IIR型态的滤波装置,尤其是在资源受限环境下追求高效能表现的情况下。 #### 实现方式说明 对于这两类滤波器的具体实现: ##### FIR滤波器 ```python import numpy as np from scipy import signal def design_fir_filter(cutoff, fs=2000., order=50): nyquist = 0.5 * fs normal_cutoff = cutoff / nyquist b = signal.firwin(order + 1, normal_cutoff) a = [1.] # No feedback path in FIR filters. return b, a b, a = design_fir_filter(300.) w, h = signal.freqz(b, a) print("FIR Filter Coefficients:", b.tolist()) ``` 这段Python代码展示了如何利用`scipy.signal`库创建一个低通FIR滤波器实例,并打印出相应的系数列表。 ##### IIR滤波器 ```python def design_iir_filter(wp, ws, gpass, gstop, ftype='ellip'): nyq = 0.5 * (wp[-1]+ws[-1]) wp_nyq = wp/nyq ws_nyq = ws/nyq z, p, k = signal.iirdesign(wp_nyq, ws_nyq, gpass=gpass, gstop=gstop,ftype=ftype,output='zpk') sos = signal.zpk2sos(z,p,k) return sos iir_sos = design_iir_filter([80], [120], 1, 40,'cheby1') print("IIR SOS Matrix:\n", iir_sos) ``` 此部分同样基于`scipy.signal`模块实现了带阻IIR滤波器的设计流程,最终返回的是级联二阶节(SOS)矩阵形式的结果表示。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值