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);
View Code

 

 8倍抽取前后的1kHZ sin时域波形

 

 滤波器系数的幅频和相频响应

由图分析可知,单级CIC滤波器的降采样率设计成功。

03FPGA实现

fpga的单级cic滤波器的设计其实就是一个滑动平均滤波器,由一个累加器和一个移位操作完成。

04modelsim仿真

波形的间距是1khz,采样率352.8khz与采样率44.1khz的采样率从图中可以看出两者的不同。

 问题:仿真用到的这三个不知道是如何生成的?

posted @ 2021-01-27 18:34  LiYiRui  阅读(980)  评论(0编辑  收藏  举报