![]() |
|
||||||||||||||
| . 网站首页 . 新闻 . 新品 . 方案 . 专访 . 活动 . DSP . EDA . 评测 . 技术文库 . 会员区 . 商城 . 服务导航 . 邮购 . 资源 . | ||
|
||
|
|||||
| 二次IIR滤波器 | |||||
作者:Free 文章来源:本站原创 点击数: 更新时间:2008-2-29 ![]() |
|||||
|
在声音信号处理中,经常需要设计滤波器,二次IIR滤波器由于其参数设计简单,运算量少,运用的最为广泛。这里介绍几种常用的滤波器的参数计算。 Peak Equalizer Peak Equalizer的设计参数为中心频率f,最大增益db,形状参数Q。下面这个Python小程序通过这三个参数计算滤波器的参数a和b,取样频率为44100Hz。 def peak(f, db, Q): A = 10.0**(db/40.0) w0= 2*math.pi*f/44100.0 alpha = math.sin(w0)/2/Q b0 = 1+alpha*A b1 = -2*math.cos(w0) b2 = 1-alpha*A a0 = 1+alpha/A a1 = -2*cos(w0) a2 = 1-alpha/A b0 /= a0 b1 /= a0 b2 /= a0 a1 /= a0 a2 /= a0 a0 /= a0 return [b0,b1,b2],[a0,a1,a2] ![]() 高、低通滤波器 二次高、低通滤波器的滤波倾斜度为-12dB/oct ,只有一个参数:滤波频率f。 def lpf(f):
a = [1.0, math.sqrt(2), 1.0] b = [0.0, 0.0, 1.0] ad = [0.0] * 3 bd = [0.0] * 3 fs = 44100.0 f = 2*math.pi*f b[2] *= f*f a[1] *= f a[2] *= f*f ad[0] = a[2] - a[1]*2*fs + 4*fs*fs*a[0] ad[1] = a[2]*2 - 8*fs*fs*a[0] ad[2] = a[2] + 2*fs*a[1] + 4*fs*fs*a[0] bd[0] = b[2] - b[1]*2*fs + 4*fs*fs*b[0] bd[1] = b[2]*2 - 8*fs*fs*b[0] bd[2] = b[2] + b[1]*2*fs + 4*fs*fs*b[0] t = ad[2] return [bd[2]/t, bd[1]/t, bd[0]/t], [ad[2]/t, ad[1]/t, ad[0]/t] def hpf(f): a = [1.0, math.sqrt(2), 1.0] b = [0.0, 0.0, 1.0] ad = [0.0] * 3 bd = [0.0] * 3 fs = 44100.0 f = 2*math.pi*f b[0],b[2] = b[2],b[0] a[1] *= f a[2] *= f*f ad[0] = a[2] - a[1]*2*fs + 4*fs*fs*a[0] ad[1] = a[2]*2 - 8*fs*fs*a[0] ad[2] = a[2] + 2*fs*a[1] + 4*fs*fs*a[0] bd[0] = b[2] - b[1]*2*fs + 4*fs*fs*b[0] bd[1] = b[2]*2 - 8*fs*fs*b[0] bd[2] = b[2] + b[1]*2*fs + 4*fs*fs*b[0] t = ad[2] return [bd[2]/t, bd[1]/t, bd[0]/t], [ad[2]/t, ad[1]/t, ad[0]/t] ![]() ![]() shelving滤波器 Shelving滤波器提升或者抑制高频或者低频的增益,有三个参数: 中心频率f,增益db,类型type。type为0时,对低频进行增益处理,为1时对高频进行增益处理。 def shelving(f, db, type): if type==1: f = 22050 - f Wb = 2.0*f/44100.0*math.pi K = math.tan(Wb/2) g = 10.0 ** (db/20.0) V = g ** (1.0/2.0) - 1 a0 = 1 + 2*K + K*K a1 = 2*K*K - 2 a2 = 1 - 2*K + K*K b0 = a0 b1 = a1 b2 = a2 b0 = b0 + 2*V*K*(K+1) b1 = b1 + 2*V*K*(2*K) b2 = b2 + 2*V*K*(K-1) b0 = b0 + V*V*K*K*1 b1 = b1 + V*V*K*K*2 b2 = b2 + V*V*K*K*1 b0 = b0 / a0 b1 = b1 / a0 b2 = b2 / a0 a1 = a1 / a0 a2 = a2 / a0 a0 = a0 / a0 if type==1: b1 = -b1 a1 = -a1 return [b0,b1,b2],[a0,a1,a2]
|
|||||
| 欢迎点击进入:TI德州中文网 (国内唯一针对TI应用的中文技术网站) 文章录入:admin 责任编辑:admin | |||||
| 【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口】 | |||||
| 最新热点 | 最新推荐 | 相关文章 | ||
| TMS320C6727芯片的flash启动… |
| 网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!) |
| | 设为首页 | 加入收藏 | 联系站长 | 友情链接 | 版权申明 | 网站公告 | 管理登录 | | |||
|
|