Libfilth(一个滤波器C库)使用

 

 

 

Libfilth使用说明

 

 

 

 

 

 

 

winshton

2009年2月

(*本文大部分翻译自libfilth,还有一部分是个人使用实践

*时间水平均有限,翻译的不完整,尤其第二章可以忽略)

 

 

 

 

版本历史修改记录

 

版本

作者

日期

备注

V1.0 

winshton

2009-2-1

创建

     
     

 

 

  1.  

    目 录

    版本历史修改记录    1

    1. 概述    5

    2. 库文件分析    5

    2.1. filth.h/filth.c    6

    2.1.1. quantize()    6

    2.1.2. filter_strerror()    6

    2.2. filter.h/filter.c    6

    2.2.1. fir()    6

    2.2.2. pfir()    7

    2.2.3. updatepq()    7

    2.3. window.h/window.c    8

    2.3.1. wd_boxcar()    8

    2.3.2. wd_triang()    8

    2.3.3. wd_hanning()    8

    2.3.4. wd_hamming()    9

    2.3.5. wd_blackman()    9

    2.3.6. wd_flattop()    9

    2.3.7. wd_kaiser()    9

    2.4. filtanalysis.c    10

    2.4.1. fa_ampfunc()    10

    2.4.2. fa_response()    10

    2.4.3. fa_cerror()    11

    2.4.4. ia_response()    11

    2.4.5. ia_sresp()    12

    2.4.6. ia_response_allp()    12

    2.5. firwindow.c    13

    2.5.1. fd_window()    13

    2.6. firls.c    13

    2.6.1. fd_ls()    13

    2.6.2. fd_cls()    14

    2.6.3. fd_clsgd()    14

    2.7. firremez.c    15

    2.7.1. fd_remez()    15

    2.8. firminphase.c    16

    2.8.1. fd_minphase()    16

    2.8.2. fd_minphaseminimax()    16

    2.8.3. fd_minphasels()    17

    2.8.4. fd_cepminphase()    18

    2.9. firminimax.c    19

    2.9.1. fd_minimax()    19

    2.9.2. fd_cminimax()    20

    2.9.3. fd_cminimaxgd()    20

    2.10. firoptwin.c    21

    2.10.1. fd_qpoptwin()    21

    2.10.2. fd_minimaxoptwin()    22

    2.10.3. fa_erroroptwin()    23

    2.11. fireq.c    23

    2.11.1. fd_cminimaxeq()    23

    2.11.2. fd_cminimaxgdeq()    24

    2.12. firfb.c    25

    2.12.1. fd_halfband()    25

    2.12.2. fd_dftfbadv()    26

    2.12.3. fd_dftfb    26

    2.12.4. ff_dftfb()    27

    2.12.5. fd_pdftfb()    27

    2.12.6. ff_pdftfb()    27

    2.13. firtrans.c    28

    2.13.1. ft_parallel()    28

    2.13.2. ft_quantize()    28

    2.14. iiranalog.c    29

    2.14.1. id_bessel()    29

    2.14.2. id_butterworth()    30

    2.14.3. id_chebyshev()    30

    2.14.4. id_ichebyshev()    31

    2.14.5. id_elliptic()    32

    2.15. iirtrans.c    33

    2.15.1. it_lp2lp()    33

    2.15.2. it_lp2hp()    34

    2.15.3. it_lp2bp()    34

    2.15.4. it_lp2bs()    35

    2.15.5. it_bilinear()    35

    2.15.6. it_bilinear_adv()    36

    2.15.7. it_sos2poly()    37

    2.15.8. it_sos2allpass()    38

    2.15.9. it_quant_allpass()    38

    2.15.10. it_allpass2poly()    38

    2.16. matrix.h/matrix.c    39

    2.16.1. mat_calloc()    39

    2.16.2. mat_free()    39

    2.16.3. mat_conv()    39

    2.16.4. mat_cconv()    40

    2.16.5. mat_flip()    40

    2.16.6. mat_cflip()    40

    2.16.7. mat_mult()    41

    2.16.8. mat_cmult()    41

    2.16.9. mat_vmult()    41

    2.16.10. mat_cvmult()    42

    2.16.11. mat_add()    42

    2.16.12. mat_cadd()    42

    2.16.13. mat_sub()    42

    2.16.14. mat_csub()    43

    2.16.15. mat_omult()    43

    2.16.16. mat_comult()    43

    2.16.17. mat_odiv()    44

    2.16.18. mat_codiv()    44

    2.16.19. mat_real()    44

    2.16.20. mat_imag()    45

    2.16.21. mat_conj()    45

    2.16.22. mat_inv()    45

    2.16.23. mat_cinv()    45

    2.16.24. mat_eye()    46

    2.16.25. mat_ceye()    46

    2.16.26. mat_solve()    46

    2.16.27. mat_csolve()    46

    2.16.28. mat_linspace()    47

    2.16.29. mat_clinspace()    47

    2.16.30. mat_clinspace_pol()    47

    3. Libfilth的windows移植    48

    4. libfilth的测试和使用分析    49

    4.1. 设计IIR滤波器    50

    4.1.1. 处理IIR滤波器设计的频率响应    52

    4.1.2. 处理IIR滤波器设计的阶数    54

    4.1.3. IIR滤波器实现    56

    4.1.4. 模拟滤波器变换    58

    4.1.5. IIR设计实现总结    62

    4.2. 使用Remes算法设计线性FIR滤波器    62

    4.2.1. 使用Remes变换算法求解多项式    63

    4.2.2. 利用Remes算法计算FIR滤波器    64

    4.2.3. 利用Remes算法计算FIR低通滤波器    66

    4.2.4. 利用Remes算法计算FIR高通滤波器    67

    4.3. 数字全通自适应递归滤波器    68

     

     

  2. 概述

    Libfilth 是一套设计、分析和应用数字和模拟滤波器的程序库。它包含一些基本的滤波器功能。Libfilth为滤波器的设计、分析和变换提供以下类型:

  • 带有线性相位和最小二乘法的FIR滤波器。
  • 大有复杂规范和最小二乘法的FIR滤波器。
  • 使用线性编程提供线性相位和上下限设计的FIR滤波器。
  • 使用Remes算法提供线性相位和上下限设计的FIR滤波器。
  • 提供最小相位和最佳幅值的FIR滤波器。
  • 提供复杂规范和上下限设计的FIR滤波器。
  • 提供组延迟限制的FIR滤波器。
  • 二次编程实现最优窗的FIR滤波器。
  • 提供最小相位谱的FIR滤波器。
  • 使用倒谱设计的FIR滤波器。
  • 使用模拟滤波器设计的贝塞尔-汤姆逊,巴特沃斯,切比雪夫I型, II和椭圆函数滤波器。
  • 模拟-模拟与模拟-数字滤波器的转换。
  • 实现全通IIR滤波器。
  • FIR 半带滤波器
  • DFT的滤波器组和平行的DFT滤波器组的设计和实施。
  • FIRIIR和模拟滤波器的性能计算分析。
  • 窗函数功能。

带有firiir前缀的文件完成FIRIIR滤波器的设计和转换功能。Filtannalysis.c完成所有滤波器的分析功能,window.cwindow.h完成窗函数的计算功能。

AIP的函数前缀使用如下约定:

  • fd_ FIR Design
  • fe_ FIR Execute
  • fa_ FIR Analysis
  • ft_ FIR Transform
  • ff_ FIR Free (memory)
  • id_ IIR Design
  • ia_ IIR Analysis
  • it_ IIR Transform
  • wd_ Calculate window function
  1. 库文件分析

  2. filth.h/filth.c

    定义库中使用的所有全局数据类型和错误管理函数。

    两个类型定义:

    typedef double _ftype_t

    设计函数中使用的双精度浮点指针类型。

    typedef float _fshort_t

    执行函数中使用的单精度浮点指针类型。

     

     

    有两个函数:

  3. quantize()

    将输入值转换为小数表示法。

    参数:

    x     Floating point value

        n     Number of bits [1,64]

        nx     Numeartor

        dx     Eponent for denominator [-128,128]

    返回:

    On success 0 is returned, -1 is returned on error and errno is set appropriately.

  4. filter_strerror()

    返回字符串描述的错误代码,拓展strerror()

    参数:

        errnum     错误号

     

    返回:

    字符串描述的错误代码。

  5. filter.h/filter.c

    设计,实施,转化和分析不同类型的模拟和数字滤波器。这两个文件是滤波器的总纲,滤波器需要的所有类型定义和宏定义等基本资源都从这两个文件获得,而且滤波器的库接口头文件就是filter.h,所有相关的函数声明都在这里了。

    其中包括若干数据结构定义、宏定义和类型定义。

    此外在filter.c中包含三个基本的处理函数:

  6. fir()

    被pfir调用,内联函数。

    C implementation of FIR filter , *表示卷积。

    本函数似乎是卷积运算函数,输入数组进行一次求积并累加,但这种计算又不像是卷据运算。

    参数:

     

    过滤阀数,where mod

     

    过滤阀

     

    输入信号必须是一个顺序索引的环形缓冲区

     

    返回:

    卷积结果。    

     

  7. pfir()

    C implementation of parallel FIR filter , *表示卷积。

    本函数似乎是采集信号值的卷积运算,但看不太懂。

    参数:

    过滤阀数 where mod

    滤波器数

    xi 

    唤醒缓冲区当前索引

    过滤阀 [k,n]

    输入信号必须是一个顺序索引的环形缓冲区

    输出缓冲区

    输出缓冲步幅

     

    返回:

    输出缓冲y的指针。

  8. updatepq()

    内联函数。

    添加数据到循环队列,用与并行FIR滤波器设计。

    Add new data to circular queue designed to be used with a parallel FIR filter.

    参数:

     

    过滤阀数 where mod

     

    滤波器数

    xi  

    唤醒缓冲区当前索引

    xq  

    环形缓冲n*2,k]

    in  

    输入新数据*s]

     

    输入冲步幅

     

    返回:

    Xq的新索引。

  9. window.h/window.c

    该文件提供计算窗函数。窗函数包括:Boxcar, Triang, Hanning, Hamming, Blackman, Flattop 和Kaiser.

  10. wd_boxcar()

    截断窗,又叫Rectangular窗,效果如同没有加窗一样,它的作用只是将信号截短。其谱泄露最大。该窗可以用来分析持续时间比窗短的信号。

    Boxcar

    参数:

    n 

    窗长

    w 

    窗参数缓冲区 [n]

  11. wd_triang()

    Triang a.k.a Bartlett

    参数:

    n 

    Window length  

    w 

    Buffer for window parameters [n] 

  12. wd_hanning()

    Hanning

    参数:

    n 

    Window length  

    w 

    Buffer for window parameters [n] 

  13. wd_hamming()

    Hamming

    参数:

    n 

    Window length  

    w 

    Buffer for window parameters [n]

  14. wd_blackman()

    Blackman

    参数:

    n 

    Window length  

    w 

    Buffer for window parameters [n] 

  15. wd_flattop()

    Flattop

    参数:

    n 

    Window length  

    w 

    Buffer for window parameters [n] 

  16. wd_kaiser()

    Kaiser

    The beta parameter trades the rejection of the low pass filter against the transition width from passband to stop band. Larger Beta means a slower transition and greater stop band rejection. See Rabiner and Gold (Theory and Application of DSP) under Kaiser windows for more about Beta. The following table from Rabiner and Gold gives some feel for the effect of Beta:

    All the passband ripple and the stop-band ripple is in dB, width of transition band .

    参数:

    n 

    Window length  

    w 

    Buffer for window parameters [n]

    b 

    Beta parameter for Kaiser window, Beta >= 1  

  17. filtanalysis.c

    该文件函数功能用于分析模拟和数值滤波器的特点。

  18. fa_ampfunc()

    为对称型和反对称型1-4FIR滤波器计算振幅,该函数的速度比fa_response()快。

    参数:

    过滤阀数

    滤波器数

    频率点数

    频率点 [0,0.5] [k]

    得出的振幅 [k]

    flags 

    类型标志, see filter.h

     

    返回:

    成功返回0 , -1返回的错误,and errno is set appropriately.

  19. fa_response()

    为任何实型滤波器计算响应(量值,功率,相位,群延迟)。

    Calculate filter responses (magnitude, power, phase, group delay) for any type of real fir filter.

    参数:

    n 

    过滤阀数

    w 

    滤波器数

    k 

    频率点数

    f 

    频率点矢量 [0,0.5] [k]

    r 

    返回结果 [k]

    flags  

    类型标志, see filter.h

     

    返回:

    成功返回0 , -1返回的错误,and errno is set appropriately.

  20. fa_cerror()

    为所有实型FIR滤波器计算权重误差。

    Calculate the weighted error function for any type of real FIR filter.

    参数:

    过滤阀数

    滤波器数

    频率点数

    频率点矢量 [0,0.5] [k]

    hd 

    理想的频率响应 used during the design of w [k]

    v 

    权重 vector (if no weighting desired set to NULL) [k]

    返回结果 [k]

    flags  

    类型标志, see filter.h

     

    返回:

    成功返回0 , -1返回的错误,and errno is set appropriately.

  21. ia_response()

    IIR滤波器分析函数,为由b/a给出的实型IIR滤波器计算频率响应、量值、功率、相位响应或群延迟。

    Analysis function for IIR filters, calculates frequency response, magnitude, power, phase response or group delay for the real IIR filter given by b/a.

    参数:

    滤波器多项式分子数

    b 

    滤波器多项式分子数组[n]

    m 

    滤波器多项式分母数

  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值