System Generator的CIC Compiler 4.0使用方法
前言:
本文主要介绍了基于基于System Generator的CIC Compiler 4.0的原理与使用方法。
使用的软件是System Generator 2017.4(基于vivado 2017.4)与matlab2016b。
1. CIC滤波器原理
CIC(Cascaded Integrator Comb)滤波器,即级联积分梳状滤波器,其结构简单,只由加法器、积分器和寄存器组成,适合工作在高抽样率的条件下。
CIC滤波器的冲击响应为:
可以看出CIC滤波器是一种具有线性相位的特殊FIR滤波器。
其系统函数为:
对其进行傅里叶变换可得频谱响应为:
CIC滤波器由两种结构:这两种结构是完全等效的。
• 一种是没有反馈结构的FIR滤波器; • 另一种是具有反馈结构的IIR滤波器
仿真CIC滤波器的频谱特性:
可以通过级联的方式增加第一旁瓣的衰减,每增加一级,则第一旁瓣衰减增加13.46dB,
虽然旁瓣的衰减满足要求,但明显地看出级联数越多,通带变得越窄,也就是说在相同的通带频带内,多级CIC滤波器的通带衰减更大。
2. CIC滤波器类型
在数字信号处理(DSP)系统中,Decimator和Interpolator是两种不同类型的CIC滤波器,用于改变信号的采样率。
它们分别执行下采样(减少采样率)和上采样(增加采样率)的操作。
Decimator(下采样器)
Decimator是一种用于将信号的采样率降低的滤波器。
其主要功能是对输入信号进行低通滤波,然后对信号进行抽取(丢弃部分样本),以减少信号的采样率。
工作原理
• 低通滤波:首先对信号进行低通滤波,以去除高频分量,防止在抽取过程中产生混叠(aliasing)。
• 抽取:然后对滤波后的信号进行抽取,即按照设定的抽取因子M(例如M=2、M=4等)丢弃一部分样本。例如,如果M=4,则每4个样本中仅保留1个样本。
应用场景
减少数据处理和存储的需求,例如在音频信号处理中,将高采样率的音频信号转换为较低采样率的信号以减少数据量。
在多级信号处理系统中,作为预处理步骤以适应下一级处理器的采样率要求。
Interpolator(上采样器)
Interpolator是一种用于将信号的采样率提高的滤波器。
其主要功能是对输入信号进行插值处理,以在增加采样率的同时保留信号的频谱特性。
工作原理
插值:首先对信号进行插值,即在现有样本之间插入零值,按照设定的插值因子L(例如L=2、L=4等)增加样本数量。例如,如果L=4,则每个原样本后插入3个零值。
低通滤波:然后对插值后的信号进行低通滤波,以去除由于插值引入的高频分量,得到平滑的高采样率信号。
应用场景
提高信号的时间分辨率,例如在图像处理或音频处理应用中,将低采样率信号转换为高采样率信号以获得更细腻的处理效果。
在通信系统中,匹配不同系统模块之间的采样率。
3. 三级CIC滤波器的matlab仿真
代码:`
f1 = 1000;
f2 = 30000;
fs = 200*f1;
D = 5;
M = D;
C = 3;
t = 0:1/fs:0.02;
s1 = sin(2*pi*f1*t);
s2 = sin(2*pi*f2*t);
s = s1 + s2;
s = s/max(abs(s));
%stem(s);
a = [1 -1];
g1 = filter(1,a,s);m1 = max(s);
g2 = filter(1,a,g1);m2 = max(g1);
g3 = filter(1,a,g2);m3 = max(g2);
m4 = max(g3);
Cg = g3(1:D:length(t));
b = [1 -1];
Cg1 = filter(b,1,Cg);m5 = max(Cg1);
Cg2 = filter(b,1,Cg1);m6 = max(Cg2);
Cg3 = filter(b,1,Cg2);m7 = max(Cg3);
figure(1);
x = 0:1:1000;
x = x/fs;
subplot(211);
plot(t,s(1:length(t)));
axis([0 0.002 -1 1]);
title('滤波前信号波形');
t = t(1:D:length(t));
subplot(212);
plot(t,Cg3(1:length(t)));
axis([0 0.002 -100 100]);
title('滤波后信号波形');
figure(2);
x = 0:1:1000;
x = x/fs;
subplot(211);
stem(x,s(1:length(x)));
title('滤波前信号波形');
x = x(1:D:length(x));
subplot(212);stem(x,Cg3(1:length(x)));
title('滤波后信号波形');
N = 10;
s10 = round(s*2^(N-1)-1);
fid = fopen('s_in.txt','w');
for i=1:length(s10)
ms_in = dec2bin(s10(i)+(s10(i)<0)*2^N,N);
for j=1:N %
if ms_in(j) == '1'
tb = 1;
else
tb = 0;
end
fprintf(fid,'%d',tb);
end
fprintf(fid,'\r\n');
end
fprintf(fid,';');
fclose(fid);
运行结果:
将波形放大并转为连续图为:
可以看出仿真滤波前信号为合成信号,滤波后不仅将30kHz信号过滤掉了,只保留了1kHz信号,而且信号波形没有变化,但数据速率降低为原来的1/5
思考:为什么该CIC滤波器既能将30kHz信号滤除又能将数据速率降低呢?
首先看单级的5阶抽取滤波器,将5个数据相加作为一次输出,是不是相当于对数据速率进行降低了,虽然是5个数据之和,但用了足够的位宽保存,故不会存在误差,当用matlab仿真时,对其进行了归一化处理,所以的确是降低了数据速率;
再者,CIC滤波器本身就可以看作是FIR滤波器,实际抗混叠滤波器只要满足需要保留的信号最高频率小于滤波器的通带截止频率Wm/D ,并且滤波器的阻带截止频率大于π/D ,该滤波器就可以完成抗混叠滤波功能
一个5阶3级级联的CIC滤波器,其3dB通带截止频率大概为10kHz,所以能够完全使1kHz信号通过,在30kHz处的衰减为约为30dB,这就解释了为什么它能将30kHz信号滤除而保留1kHz信号。
该滤波器频谱特性为:
4. System Generator的CIC Compiler 4.0模块
模块图为:
其中某些引脚解释:
-
data_tvalid信号通常用于表示输入数据的有效性。在时序电路中,处理模块需要知道什么时候输入的数据是有效的,以便正确地读取和处理数据。
-
data_tlast 信号用于标记数据包的结束。在许多通信和数据处理协议中,数据是以数据包的形式传输的,data_tlast
信号用于指示数据包的结束。• data_tlast 为高电平(1)时,表示当前数据是数据包的最后一个数据。
• data_tlast 为低电平(0)时,表示当前数据不是数据包的最后一个数据。 -
data_tuser_chan_sync 通常用于信道同步。在多信道数据处理中,这个信号可以用于指示和控制多个信道的同步状态。
-
data_tuser_chan_out通常用于输出信道标识信息。在多信道系统中,每个信道的数据需要标识,以便后续处理模块能够正确识别和处理不同信道的数据。
接着我们打开设置框图:
Decimator和Interpolator是两种不同类型的滤波器,用于改变信号的采样率。它们分别执行下采样(减少采样率)和上采样(增加采样率)的操作。
Fixed Rate or Initial Rate中:
• Fixed Rate:描述了CIC滤波器输出采样率与输入采样率之间的固定关系,通过固定的抽取或插值因子实现。
• Initial Rate:表示CIC滤波器输入信号的初始采样率,用于配置滤波器参数。
当 Fixed Rate = 125 时,这通常表示采样率转换因子(抽取因子或插值因子)为 125。
当 Initial Rate = 125 时,这通常表示输入信号的初始采样率为 125(具体单位需结合上下文确定,通常是 kHz)
5. System Generator的CIC Compiler 4.0仿真示例
工程结构图如图:
其中输入信号为100sin(2pi0.505/90) 与sin(2pi*0.505/90)的乘积。
CIC设置按上图给出的配置即可。
输出结果为:
可以看出高频信号被滤除并且采样率也降低了。
其他输出数据:
放大后: