网站公告列表

  没有公告

加入收藏
设为首页
联系站长
您现在的位置: 61IC中国电子在线 >> DSP >> C6000文章 >> C67X系列 >> 文章正文
  二次IIR滤波器           ★★★ 【字体:
二次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
    a1 = 2*K*- 2
    a2 = 1 - 2*+ 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条。评论内容只代表网友观点,与本站立场无关!)
    站长:61IC 湘ICP备05002478号