ffmpeg中aneuqalizer的FILTER_ORDER解释

博客详细解释了ffmpeg的aneuqalizer模块中FILTER_ORDER宏的含义,它并不直接表示滤波器的阶数,而是指双一阶IIR滤波器的级联数量。FILTER_ORDER乘以2再除以4等效于双四阶IIR滤波器的数量,实际实现中用于构建更复杂的滤波器结构。
摘要由CSDN通过智能技术生成

在 af_aneuqalizer.c 这个模块中用到这个宏定义 FILTER_ORDER,按照字面理解,可能会被认为是滤波器的阶数,一个滤波器:

        b0 + b1*z^-1 + b2*z^-2 + b3*z^-3 + ......
H(z) = --------------------------------------------                                  (Eq 1)
        a0 + a1*z^-1 + a2*z^-2 + a3*z^-3 ......

一般说滤波器的阶数,指的是 b1, b2, ….. 的个数。但是,在这个模块中,含义有些不同,下面逐步说明一下。

这个模块用的最基本的滤波器,是一个双四阶IIR滤波器,即:

        b0 + b1*z^-1 + b2*z^-2 + b3*z^-3 + b4*z^-4
H(z) = --------------------------------------------                                  (Eq 2)
        a0 + a1*z^-1 + a2*z^-2 + a3*z^-3+ a4*z^-4

而数字滤波器中,最小的一个IIR滤波器,可以认为是双一阶滤波器,即如下公式:

        b0 + b1*z^-1 
H(z) = -------------                                    (Eq 3)
        a0 + a1*z^-1

其它双 N 阶滤波器(这里N为偶数),都可以用 N/2个双一阶滤波器级联得到。

所以,FILTER_ORDER 这个宏定义,指的是多少个双一阶IIR滤波器级联。最终等效的滤波器是 ( FILTER_ORDER * 2 ) 阶IIR滤波器。例如 FILTER_ORDER = 4, 则最终等效的是一个双八阶IIR滤波器。

但是,在实现中,这个模块用的最基本滤波器又是双四阶滤波器,所以,相当于用 ( FILTER_ORDER * 2 / 4 ) 个双四阶滤波器级联。,

最后 FILTER_ORDER * 2 / 4 = FILTER_ORDER / 2 , 也就是代码中用到 FILTER_ORDER / 2 .

static void draw_curves(AVFilterContext *ctx, 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值