完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
CIC抽取滤波器MATLAB仿真和FPGA实现(1)
设计理想滤波器目标:1、滤波器在有效频段内纹波满足设计要求。2、抽取或内插处理后在有效频段内不产生混叠。3、滤波器实现简单,需要资源较少。这个文章主要讲CIC理论基础,下个文章讲FPGA实现。 级联积分梳状滤波器又称CIC。这是多速率信号处理中一种结构简单的滤波器,只需要加法器和寄存器即可实现,可以灵活的设置抽取因子和插值因子,并且CIC是一种基于零点和极点相消的FIR滤波器。 CIC是由积分器和梳状滤波器组成。积分器可表示为(太多公式了只能截图发出来) 根据上面的分析可以知道积分器对直流有着无限的的增益,在应用时这是一个不稳定的系统。 梳状滤波器可表示为 单级CIC在不同延时长度时冲击响应的频谱特性MATLAB代码如下: M=2; %滤波器长度 b=ones(1,M); delta=[1,zeros(1,1023)]; s=filter(b,1,delta); %求取滤波器冲激响应 Spec=20*log10(abs(fft(s)));%求取滤波器频谱特性 Spec2=Spec-max(Spec); f=0:length(Spec)-1; f=2*f/(length(Spec)-1); %对频率轴进行归一化处理 M=5; %滤波器长度 b=ones(1,M); delta=[1,zeros(1,1023)]; s=filter(b,1,delta); %求取滤波器冲激响应 Spec=20*log10(abs(fft(s)));%求取滤波器频谱特性 Spec5=Spec-max(Spec); M=7; %滤波器长度 b=ones(1,M); delta=[1,zeros(1,1023)]; s=filter(b,1,delta); %求取滤波器冲激响应 Spec=20*log10(abs(fft(s)));%求取滤波器频谱特性 Spec7=Spec-max(Spec); M=8; %滤波器长度 b=ones(1,M); delta=[1,zeros(1,1023)]; s=filter(b,1,delta); %求取滤波器冲激响应 Spec=20*log10(abs(fft(s)));%求取滤波器频谱特性 Spec8=Spec-max(Spec); %plot(f,Spec2,f,Spec5,f,Spec7,f,Spec8);axis([0 1 -50 0]);grid; %xlabel(‘归一化频率’);ylabel(‘幅度(dB)’); %legend(‘M=2’,‘M=5’,‘M=7’,‘M=8’); %grid; plot(f,Spec2,’-’,f,Spec5,’。’,f,Spec8,’–’);axis([0 1 -50 0]); xlabel(‘归一化频率’);ylabel(‘幅度(dB)’); legend(‘M=2’,‘M=5’,‘M=8’); grid; 幅频响应如下图: 理论计算与上图仿真结果相对应。 然而在实际应用中第一级抑制比太低,可以通过级联CIC的方式得到想要的抑制比。在RM一定的情况下由于级联后传递函数是乘机的关系,因此抑制比是累加的关系,如四级CIC级联后第一旁瓣抑制比在53.84dB。但是增加滤波器级联数目虽然可以解决旁瓣电平衰减减小问题,但是会带来通带衰减较大的问题,并且在实现时会消耗更多的资源。下面是5级CIC级联不同RM的MATLAB代码和频谱特性图 M=2; %滤波器长度 b=ones(1,M); delta=[1,zeros(1,1023)]; s1=filter(b,1,delta); %求取滤波器冲激响应 s2=filter(b,1,s1); %求取滤波器冲激响应 s3=filter(b,1,s2); %求取滤波器冲激响应 s4=filter(b,1,s3); %求取滤波器冲激响应 s=filter(b,1,s4); %求取滤波器冲激响应 Spec=20*log10(abs(fft(s)));%求取滤波器频谱特性 Spec2=Spec-max(Spec); f=0:length(Spec)-1; f=2*f/(length(Spec)-1); %对频率轴进行归一化处理 M=5; %滤波器长度 b=ones(1,M); delta=[1,zeros(1,1023)]; s1=filter(b,1,delta); %求取滤波器冲激响应 s2=filter(b,1,s1); %求取滤波器冲激响应 s3=filter(b,1,s2); %求取滤波器冲激响应 s4=filter(b,1,s3); %求取滤波器冲激响应 s=filter(b,1,s4); %求取滤波器冲激响应 Spec=20*log10(abs(fft(s)));%求取滤波器频谱特性 Spec5=Spec-max(Spec); M=7; %滤波器长度 b=ones(1,M); delta=[1,zeros(1,1023)]; s1=filter(b,1,delta); %求取滤波器冲激响应 s2=filter(b,1,s1); %求取滤波器冲激响应 s3=filter(b,1,s2); %求取滤波器冲激响应 s4=filter(b,1,s3); %求取滤波器冲激响应 s=filter(b,1,s4); %求取滤波器冲激响应 Spec=20*log10(abs(fft(s)));%求取滤波器频谱特性 Spec7=Spec-max(Spec); M=8; %滤波器长度 b=ones(1,M); delta=[1,zeros(1,1023)]; s1=filter(b,1,delta); %求取滤波器冲激响应 s2=filter(b,1,s1); %求取滤波器冲激响应 s3=filter(b,1,s2); %求取滤波器冲激响应 s4=filter(b,1,s3); %求取滤波器冲激响应 s=filter(b,1,s4); %求取滤波器冲激响应 Spec=20*log10(abs(fft(s)));%求取滤波器频谱特性 Spec8=Spec-max(Spec); %plot(f,Spec2,f,Spec5,f,Spec7,f,Spec8);axis([0 1 -50 0]);grid; %xlabel(‘归一化频率’);ylabel(‘幅度(dB)’); %legend(‘M=2’,‘M=5’,‘M=7’,‘M=8’); %grid; plot(f,Spec2,’-’,f,Spec5,’。’,f,Spec8,’–’);axis([0 1 -200 0]); xlabel(‘归一化频率’);ylabel(‘幅度(dB)’); legend(‘M=2’,‘M=5’,‘M=8’); grid; 从上图可知第一旁瓣衰减67.3dB,但多级CIC主瓣内电平值下降也是较快,这就说明了在相同的通带内滤波器的通带衰减也明显增加。针对通带内衰减问题,可以通过在自定义的通带内来通过比较多级级联的衰减来说明问题,这里设置归一化通带为0.2,级联数目为D,进行MATLAB仿真,代码如下: M=5; %滤波器长度 b=ones(1,M); delta=[1,zeros(1,1023)]; s1=filter(b,1,delta); %求取滤波器冲激响应 s2=filter(b,1,s1); %求取滤波器冲激响应 s3=filter(b,1,s2); %求取滤波器冲激响应 s4=filter(b,1,s3); %求取滤波器冲激响应 s5=filter(b,1,s4); %求取滤波器冲激响应 Spec1=20*log10(abs(fft(s1)));%求取滤波器频谱特性 Spec1=Spec1-max(Spec1); Spec2=20*log10(abs(fft(s2)));%求取滤波器频谱特性 Spec2=Spec2-max(Spec2); Spec3=20*log10(abs(fft(s3)));%求取滤波器频谱特性 Spec3=Spec3-max(Spec3); Spec4=20*log10(abs(fft(s4)));%求取滤波器频谱特性 Spec4=Spec4-max(Spec4); Spec5=20*log10(abs(fft(s5)));%求取滤波器频谱特性 Spec5=Spec5-max(Spec5); f=0:length(Spec1)-1; f=2*f/(length(Spec1)-1); %对频率轴进行归一化处理 plot(f,Spec1,’-’,f,Spec2,’。’,f,Spec3,’–’,f,Spec5,’-。’);axis([0 0.2 -25 0]); xlabel(‘归一化频率’);ylabel(‘幅度(dB)’); legend(‘D=1’,‘D=2’,‘D=3’,‘D=5’); grid; 从图中可以看出随着级联数码的增加通带内衰减越大。 因此在实际应用中要根据输入信号和输出信号的特性来进行使用和级联。需要注意的是CIC抽取并不会造成信号幅度的损失,但经过FFT后频谱幅度与所取的点数成正比,因此抽取后信号的幅度将变为原始信号频谱幅度发1/M(M是抽取系数)。抽取滤波器其实就是低通滤波器,因此低通滤波器的特性CIC抽取滤波器依然具有。 |
|
|
|
只有小组成员才能发言,加入小组>>
调试STM32H750的FMC总线读写PSRAM遇到的问题求解?
1683 浏览 1 评论
X-NUCLEO-IHM08M1板文档中输出电流为15Arms,15Arms是怎么得出来的呢?
1582 浏览 1 评论
1013 浏览 2 评论
STM32F030F4 HSI时钟温度测试过不去是怎么回事?
703 浏览 2 评论
ST25R3916能否对ISO15693的标签芯片进行分区域写密码?
1627 浏览 2 评论
1892浏览 9评论
STM32仿真器是选择ST-LINK还是选择J-LINK?各有什么优势啊?
675浏览 4评论
STM32F0_TIM2输出pwm2后OLED变暗或者系统重启是怎么回事?
538浏览 3评论
558浏览 3评论
stm32cubemx生成mdk-arm v4项目文件无法打开是什么原因导致的?
526浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-4 02:31 , Processed in 0.793272 second(s), Total 77, Slave 60 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号