05单级CIC滤波器8倍抽取
01实战原理
在数字信号处理中,CIC滤波器是FIR滤波器中最优的一种,其使用了积分,梳状滤波器级联的方式。CIC滤波器由一堆或多对积分-梳状滤波器组成,在抽取CIC中,输入信号依次经过积分,降采样,以及与积分环节数目相同的梳状滤波器。在内插CIC中,输入信号依次经过梳状滤波器,升采样,以及与梳状数目相同的积分环节。
CIC滤波器的两个特点:
1、线性相位响应
2、仅需延迟,加减法便可实现,不需要乘法,在FPGA等平台上易于实现
CIC滤波器的冲击响应为:
02matlab实现
此次实战是设计一个单级CIC滤波器将采样率为352.8kHZ的1kHZ sin波向下降采样率到44.1kHz的1kHZ sin波(8倍抽取)。
%Single CIC %352.8khz sample rate down to 44.1khz sample rate close all clc clear all %参数定义 FS =352800; %Sample rate Frequncy fc = 1000; %1khz N = 1024; Q = 16; M= 8; D = 8; t =0:2*pi/FS:2*pi*(N-1)/FS;%时间序列 %波形产生 sin_osc =sin(t*fc); %y = decimate(sin_osc,D); %y = downsample(sin_osc,D); %滤波器系数 b=ones(1,M); a = 1; %8倍抽值处理 sf=filter(b,a,sin_osc); sm =sf./M; sd=sm(1:D:length(t)); si0=zeros(1,length(sd)*D); si0(1:D:length(si0))=sd; [h,f]=freqz(b,a,N,FS); %freqz函数求频率响应 mag=20*log(abs(h))/log(10); %幅度转换成dB单位 ph=angle(h)*180/pi; %相位值单位转换 figure(1), subplot(221),stem(sin_osc); title('采样频率352.8khz 1khz sin','fontsize',8); subplot(222),stem(si0); title('采样频率44.1khz 1khz sin','fontsize',8); subplot(223);plot(f,mag); xlabel('频率(Hz)','fontsize',8); ylabel('幅度(dB)','fontsize',8); title('freqz()幅频响应','fontsize',8); subplot(224);plot(f,ph); xlabel('频率(Hz)','fontsize',8); ylabel('相位(度)','fontsize',8); figure(2), subplot(211),stem(sin_osc); title('采样频率352.8khz 1khz sin','fontsize',8); subplot(212),stem(si0); title('采样频率44.1khz 1khz sin','fontsize',8);
8倍抽取前后的1kHZ sin时域波形
滤波器系数的幅频和相频响应
由图分析可知,单级CIC滤波器的降采样率设计成功。
03FPGA实现
fpga的单级cic滤波器的设计其实就是一个滑动平均滤波器,由一个累加器和一个移位操作完成。
04modelsim仿真
波形的间距是1khz,采样率352.8khz与采样率44.1khz的采样率从图中可以看出两者的不同。
问题:仿真用到的这三个不知道是如何生成的?