多采样率数字信号处理系统经常使用采样率转换,例如插值和抽取。 从傅里叶变换的性质可知,信号在时域的提取会导致频谱的周期性平移展宽。 当信号中存在高频成分时,可能会出现频谱混叠。 因此,在抗频谱混叠中需要进行滤波操作来滤除高频成分。 梳状滤波器(CIC,-comb)结构简单,只有乘法和加法单元。 它可以实现多速率下变频并滤除高频成分。 为了使过渡带陡峭并抑制旁瓣,滤波器的带内容差不宜太大。 当扫频带宽一定时,CIC滤波器常用于第一级采样率下采样,以满足较大的采样率和较小的下采样因子,以减小带内容差。 梳状滤波器传递函数的表达式和实现结构如下:
D为采样率下采样的倍数,N表示滤波器级联数,Z-1表示延迟一拍。 由于梳状滤波器的极点和零点可以相互抵消,因此滤波器仍然是一个稳定的因果系统。 绘制其在环境中的幅频响应曲线和相频响应曲线如下:
可以看出,单级旁瓣衰减约为13.46dB; 级联后,CIC滤波器旁瓣衰减与级联数成正比,为N*13.46dB,即每增加一级级联,旁瓣抑制就会增加。 13.46分贝; CIC滤波器的相位是线性的。 其他参考书:
杜勇. 数字调制解调技术及FPGA实现:/版[M]. 北京:电子工业出版社,2015。
-------------------------------------------------- ------假装我是分割线-------------------------------------- ------- ------------------
%%%%%%%%%%%%%%%%%%%%%%%
% 绘制M阶CIC的光谱特征
%%%%%%%%%%%%%%%%%%%%%%%
CLC
清除
关闭所有
Len = 1024*300;%绘制数据点的数量
fs = 2*1e5;
D = 16;% 回撤倍数
N = [1,3,5]; %CIC级联数
w = 0.01:1/fs:(Len-1)/fs;
H_abs = 零((N),(w))';
对于 ii = 1:(N)
对于 jj = 1:(w)
%H(jj,ii) = (abs(sin(w(jj)*D/2)/sin(w(jj)/2)))^N(ii); % 幅度对应表达式
H(jj,ii)=((1-exp(-1j*w(jj)*D))/(1-exp(-1j*w(jj))))^N(ii);
H_abs(jj,ii)=abs(H(jj,ii));
H_ang(jj,ii)=角度(H(jj,ii));
结尾
结尾
%绘制幅频特性曲线
绘图(w'/max(w),20*log10(H_abs(:,1) / max(H_abs(:,1)) ),'k','',2);
网格上
title('幅频特性');('归一化频率');('幅度(dB)');
('N=1','N=3','N=5','','最佳');
坚持,稍等
绘图(w'/max(w),20*log10(H_abs(:,2) / max(H_abs(:,2)) ),'k--','',2);
绘图(w'/max(w),20*log10(H_abs(:,3) / max(H_abs(:,3)) ),'k','',3);
推迟;
网格开启;
title('幅频特性');('归一化频率');('幅度(dB)');
('N=1','N=3','N=5','','最佳');
axis([0 1 -200 0]);%绘制相频特性曲线
绘图(w'/max(w),H_ang(:,1),'k','',2);网格;
title('相频特性');('归一化频率');('相位(rad)');
('N=1','','最佳');
轴([0 1 -pi pi]);
-------------------------------------------------- -----cic的m文件---------------------------------------- - ------
下面是一个时序示例
= (,div)
%------------------------------------------------- -----------------------
% 功能:该函数实现3级级联梳状滤波器,抽取倍数为div
% 输入输出:
%:要滤波和下采样的信号
% div: 回撤倍数
%------------------------------------------------- -----------------------
%CIC 和 div
x = 零((),1);
x(1) = (1);
%整合过程
对于 ii = 1:()-1
x(ii+1) = x(ii) + (ii+1);
结尾
y = 零((),1);
y(1) = x(1);
对于 ii = 1:()-1
y(ii+1) = y(ii) + x(ii+1);
结尾
z = 零((),1);
z(1) = y(1);
对于 ii = 1:()-1
z(ii+1) = z(ii) + y(ii+1);
结尾
数据 = z(1:div:div*floor(()/div));%
%微分过程
x = 零((数据),1);
x(1) = 数据(1);
对于 ii = 1:(数据)-1
x(ii+1) = 数据(ii+1) - 数据(ii);
结尾
y = 零((数据),1);
y(1) = x(1);
对于 ii = 1:(数据)-1
y(ii+1) = x(ii+1) - x(ii);
结尾
z = 零((数据),1);
z(1) = y(1);
对于 ii = 1:(数据)-1
z(ii+1) = y(ii+1) - y(ii);
结尾
= (z/div^3);
-------------------------------------------------- ------CIC的FPGA设计---------------------------------------- ------- --------
以官网提供的cic IP核手册为例,需要注意每一级位宽的增加。
例如:梳状滤波器CIC下采样R=5倍,N=3级级联,延迟节拍M=1,输入数据=16,输出=+N*log2(R),向上舍入,输出全精度就是一个23位定点数=floor(16+3*log2(5))+1。 (有一次面试官问到CIC中间数据位宽的计算,当时一脸困惑,都是IP核做的,谁管这个。后来……唉)