CIC滤波器的matlab仿真与实现

CIC滤波器的仿真与实现 介绍
在数字信号处理中,由于后级硬件如FPGA的处理速度无法跟上前级ADC的采样速度,因此需要对ADC的采样数据进行降速处理,也就是对采样数据进行抽取,简单的抽取描述就是对其中连续几个点取一个点进行处理 。
由抽取理论知识可以知道,抽取相当于对时域做压缩,相应的就会对频谱做扩展,同时由于采样信号都是离散的,因此反映在频谱上会有一连串的延拓频谱 。这样抽取后可能会导致混叠现象的发生,使得信号失真,无法被完全还原出来 。
因此一般需要在抽取前加一级低通抗混叠滤波器,以防止混叠现象的产生,一般实现框图如下图所示:
在FPGA设计实现中,滤波器的实现需要占用乘法器和加法器资源 。实际设计抽取模块时,有一种更好的抽取设计方式,那就是通过CIC滤波器同时实现抽取+滤波两项功能 。CIC滤波器只需要加法器、减法器和寄存器即可实现,可以节省FPGA的乘法资源 。
CIC滤波器结构
CIC滤波器由两部分组成,前部分是积分器,后部分是梳状滤波器 。如下图所示
依据Nobel恒等式,抽取与线性滤波的位置是可以交换的,只是需要注意滤波器的系数变化,上图等价于
积分器
积分器是单极点的IIR滤波器,其状态方程为:
y ( n ) = y ( n ? 1 ) + x ( n ) y(n) = y(n-1) + x(n) y(n)=y(n?1)+x(n)
其系统响应为:
H 1 ( z ) = 1 / ( 1 ? z ? 1 ) H1(z) = 1/(1 - z^{-1}) H1(z)=1/(1?z?1)
梳状滤波器
梳状滤波器为对称的FIR滤波器,其状态方程为:
y ( n ) = x ( n ) ? x ( n ? N ) y(n) = x(n) - x(n-N) y(n)=x(n)?x(n?N)
其系统响应为:
H 2 ( z ) = 1 ? z ? N H2(z) = 1-z^{-N} H2(z)=1?z?N
CIC滤波器
通过将积分器与梳状滤波器进行级联,可以得到CIC滤波器的系统函数响应:
H ( z ) = H 1 ( z ) ? H 2 ( z ) = 1 ? z ? N / ( 1 ? z ? 1 ) H(z) = H1(z)*H2(z) = 1-z^{-N}/(1 - z^{-1}) H(z)=H1(z)?H2(z)=1?z?N/(1?z?1)
也可以化简为
H ( z ) = 1 + z ? 1 ) + z ? 2 + . . . + z ? ( N ? 1 ) H(z) = 1 + z^{-1)} + z^{-2} + ...+ z^{-(N-1)} H(z)=1+z?1)+z?2+...+z?(N?1)
其中N为抽取倍数
由于单级CIC的第一旁瓣阻带衰减是固定的13.46dB,无法很好的抑制旁瓣,因此可以通过级联的方式来提升抑制效果,一般五级级联的CIC滤波器对第一旁瓣的抑制可以达到60~65dB 。
仿真设计 方法一:
通过cic滤波器的系统函数响应,利用构建五级级联、四倍抽取的CIC滤波器,完整仿真测试代码如下:
fs = 200;%采样率f1 = 10;%信号频率1f2 = 20;%信号频率2n = 4096;%采样点数t = 0:1/fs:(n-1)/fs;x_in = cos(2*pi*f1*t) + 2*cos(2*pi*f2*t) + 1i*sin(2*pi*f1*t) + 1i*2*sin(2*pi*f2*t);%复数信号,提供两个不同的频率10Hz与20Hza = [1,-1];%梳状滤波器系数b = [1,-1];%积分器系数%五级级联积分器c1 =filter(1,b,x_in); %x_in为输入信号c2 =filter(1,b,c1);c3 =filter(1,b,c2);c4 =filter(1,b,c3);c5 =filter(1,b,c4);d = downsample(c5,4); %对信号进行四倍抽取%五级级联梳状滤波器e1 = filter(a,1,d);e2 = filter(a,1,e1);e3 = filter(a,1,e2);e4 = filter(a,1,e3);y_out = filter(a,1,e4); %y_out为CIC输出figuresubplot(211)f = 0:200/4096:(4096-1)*200/4096;%归一化处理plot(f,20*log10(abs(fft(x_in))),'b');title('抽取前fft变换');xlabel('f/Hz');f_d = 0:12.5/1024:(1024-1)*12.5/1024;%归一化处理subplot(212)plot(f_d,20*log10(abs(fft(y_out))),'r');title('抽取后fft变换');xlabel('f/Hz');
仿真结果图:
信号频率不变,带宽变为原来的1/4 。同时一般CIC滤波器的通带较窄,通带边沿容易衰减,可以在CIC滤波器后面加反sinc补偿滤波器进行通带补偿
方法二:
【CIC滤波器的matlab仿真与实现】