使用Matlab中firceqrip函数设计CIC补偿滤波器

在sigma-delta ADC的数字滤波器设计过程中,由于CIC滤波器在通带处存在一定的衰减,因此需要CIC补偿滤波器对通带进行补偿,以实现较为平稳的低纹波通带。

一般在设计sigma-delta ADC的数字降采样滤波器的过程中,通常第一级为CIC滤波器进行主要的降采样工作,第二级为CIC补偿滤波器对CIC滤波器衰减的通带进行补偿,并实现2倍的降采样,后级为半带滤波器实现较陡的过渡带和2倍的降采样。

 而在实际的工程设计过程中,由于需要保证硬件实现的低成本,通常会在CIC滤波器后面先接一级半带滤波器进行2倍的降采样,然后再接CIC补偿滤波器。这样一来会使得原本在第二级阶数较高的CIC补偿滤波器阶数降低,并且工作频率为之前的一半,得以降低硬件成本,节省功耗。(将CIC滤波器放在第三级的位置,相当于CIC补偿滤波器的通带边缘的归一化频率变成将CIC补偿滤波器放在第二级时的通带边缘归一化频率的2倍,因此可大幅降低CIC补偿滤波器的阶数)

然而在Matlab中使用传统的CIC补偿滤波器设计方法,如FDAtool、fir2函数等设计方法设计将CIC补偿滤波器放在第三级位置的级联滤波器存在一定困难,无法在低成本条件下实现较好的补偿效果或较大的阻带衰减,而使用firceqrip函数便能很方便的设计一个采样频率降低一半还能实现很好补偿效果的补偿滤波器。

firceqrip(Constrained equiripple FIR filter)函数的形式如下:

B = firceqrip(n,Fo,DEV)

其中:

-n表示所设计滤波器的阶数

-Fo表示通带边缘值(归一化频率)

-DEV是一个二元向量,若DEV输入值为[d1 d2],则d1表示滤波器通带纹波,d2表示阻带纹波。

利用firceqrip设计CIC补偿滤波器的形式如下:

B = firceqrip(n,Fo,DEV,'invsinc',C)

 -'invsinc'表示反正弦(inverse sinc)

-C同为一个二元向量,如果C作为实值标量或二元向量的第一个元素,firceqrip构造一个幅值响应为1/sinc(C*pi*F)的滤波器,其中F是归一化频率;如果将C作为二元向量,则反sinc形状的幅度响应将提高C(2)次幂,如果设P=C(2), firceqrip构造一个幅度响应为1/(sinc(C*pi*F)^P)的滤波器,即P=C(2)表示前级CIC滤波器的阶数。

例如,CIC滤波器的阶数为3阶,直接在CIC滤波器后直接级联一个补偿滤波器(相当于补偿滤波器的输出相对于CIC滤波器降了2倍的采样),那么C的值为

[0.5 3]

若在CIC滤波器和补偿滤波器之间需要加一个半带滤波器先降2倍采样再进行补偿(相当于补偿滤波器的输出相对于CIC滤波器降了4倍的采样),那么C的值为

[0.25 3]

例:

设计一个通带边缘为0.4,通带纹波为1e-3,阻带纹波为1e-6(阻带衰减为120dB),滤波器长度为26的5阶CIC滤波器的补偿滤波器

 b = firceqrip(25,0.4,[1e-3 1e-6],'invsinc',[0.25 5]); fvtool(b)

滤波器响应如下:

通带部分:

欢迎各位大神指正~

评论 14
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

扎斯特狗

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值