首页 > 其他分享 >Matlab 设计仿真CIC滤波器

Matlab 设计仿真CIC滤波器

时间:2023-09-27 19:44:55浏览次数:70  
标签:CIC 滤波器 采样率 Fs hcic Matlab 设计

2023.09.26

使用CIC滤波器用于降采样。同样的,CIC滤波器也适用于升采样。

参考连接:

[1] Matlab中CIC滤波器的应用_dsp.cicdecimator_张海军2013的博客-CSDN博客

[2] Matlab中CIC滤波器的应用 - 知乎 (zhihu.com)

[3] CIC filter及其matlab实现-CSDN博客

[4] 【ljelly原创】 Matlab实现抽取滤波器的设计(CIC) – MATLAB中文论坛 (ilovematlab.cn)

[5] 基于CIC抽取滤波器设计与实现 - 知乎 (zhihu.com)

[6] CIC抽取滤波器MATLAB仿真和FPGA实现_cic matlab-CSDN博客

[7] 数字信号处理——多速率信号处理-CSDN博客

进行CIC降采样滤波器设计,实现采样率从50kSPS降至2kSPS,25倍降采样。简单分析:要实现25倍降采样率,可以通过使用2个5倍降采样率的CIC串联实现,也可以使用1个25倍降采样率的CIC实现。具体分别使用几级滤波器需要按照需求和硬件支持调整,此处以常见和通用的3级CIC滤波器为例进行设计。

CIC滤波器的系统函数为

\[H(z) = (\sum_{n=0}^{M-1}z^{-n})^N = (\frac{1-z^{-M}}{1-z^{-1}})^N \]

其中,\(M\) 为CIC滤波器长度,也是CIC滤波器的升/降采样倍率;\(N\) 为CIC滤波器级数。那么,其频率响应为

\[H(e^{j \omega}) = \{ \frac{\sin\frac{\omega M}{2}}{\sin\frac{\omega}{2}} e^{-j\omega [(M-1)/2]} \}^N \]

关于CIC数字滤波器的基本知识此处不做过多介绍,后续有计划会整理相关内容。

1. 使用函数设计

在Matlab中,有两个函数可以生成CIC滤波器。我们以CIC抽取滤波器为例,一个是fdesign.decimator,第二个是dsp.CICDecimator详细用法在上述参考链接[1]中有说明

下面使用 fdesign.decimator() 函数设计5倍降采样率CIC

%-------------------------------------------------------
% 参数设置
Fs = 50e3; 		% sample rate
R = 5;  		% decimator factor
D = 1;  		% differential delay
Fp = 4e3;	 	% pass band
Fstp = 5e3; 	% stop band
Ap = 0.1; 		% attenuation in pass band
Astp = 40; 		% attenuation in stop band
%-------------------------------------------------------

%-------------------------------------------------------
% 设计方法1: 设计单位增益CIC滤波器
d1 = fdesign.decimator(R,'cic',D, Fp, Astp, Fs);
hcic = design(d1);
H1 = cascade(1/gain(hcic),hcic);
d2 = fdesign.ciccomp(hcic.DifferentialDelay, ...
            hcic.NumberOfSections,Fp,Fstp,Ap,Astp,Fs/R);
cic_comp = design(d2);
%--------------------------------------------------------

%-------------------------------------------------------------------------------
% 设计方法2: 设计未做单位增益CIC滤波器
% hcic = design(fdesign.decimator(R,'cic',D, Fp, Astp, Fs),'SystemObject',true);
% cic_comp = design(fdesign.ciccomp(hcic.DifferentialDelay, ...
%             hcic.NumSections,Fp,Fstp,Ap,Astp,Fs/R), 'SystemObject',true);
%-------------------------------------------------------------------------------

fvtool(H1,cic_comp,cascade(H1,cic_comp),'ShowReference','off','Fs',[Fs Fs/R Fs]) % 未做归一化处理
legend('CIC Decimator','CIC Compensator','Resulting Cascade Filter');

image

下面使用 dsp.CICDecimator 函数设计5倍降采样率CIC

Fs = 50e3; 		% sample rate
R = 5;  		% decimator factor
D = 1;  		% differential delay
N = 3;  		% number of stage
Fp = 0.05; 		% pass band
Fstp = 0.075; 	% stop band
Ap = 0.1; 		% attenuation in pass band
Astp = 60; 		% attenuation in stop band

CICDecim = dsp.CICDecimator(R, D, N);
CICCompDecim = dsp.CICCompensationDecimator(CICDecim, ...
    'DecimationFactor',2,'PassbandFrequency',Fp, ...
    'StopbandFrequency',Fstp,'SampleRate',Fs/R);
fvtool(CICDecim,CICCompDecim,...
cascade(CICDecim,CICCompDecim),'ShowReference','off','Fs',[Fs Fs/R Fs])
legend('CIC Decimator','CIC Compensator','Resulting Cascade Filter');

image

2. 使用工具箱设计

打开 filterDesigner 工具箱,两种方式:

  1. matlab 命令行输入 >> filterDesigner 回车;
  2. matlab 主界面顶部 APP 选项卡,搜索 filterDesigner 打开。

image

打开后,进行CIC抽取滤波器设计:

  1. 主界面选择 : 创建多速率滤波器
  2. 类型选择: 抽取器
  3. 选择使用滤波器类型: 级联积分梳妆(CIC)滤波器
  4. 设置抽取因子: 5 (示例)
  5. 设置采样频率: 归一化与采样率都可以
  6. 设置积分延迟和节数(级数): 延迟一般设计为1 节数(级数)设计: 3
  7. 选择频响显示样式
  8. 创建滤波器
  9. 设计信息展示于左上角
  10. 定点化设计:根据带滤波信号的数据范围进行滤器定点化设计,特别是滤波器级联使用时

设计界面展示:

image
image

设计完成后,可以选择将滤波器导出为matlab函数经行调用使用,也可以选择直接导出HDL代码经行硬件仿真验证.

image

3. matlab 调用函数仿真

通过上述设计过程,已经得到了所使用的滤波器。下面进行滤波器效果仿真测试。

生成一段 \(60 \ \text{Hz} + 270 \ \text{Hz} + 3200 \ \text{Hz}\) 采样率为 \(50 \ \text{kSPS}\) 的混合正弦波信号;

可以通过连续使用两次上述设计的5倍降采样率的CIC滤波器,也可以使用一次25倍降采样率的CIC滤波器实现 \(50 \ \text{kSPS} -> 2 \ \text{kSPS}\) 降采样过程。

最终效果图:

image
image

在上述仿真结果中可以看到,当前滤波器参数设计情况加,发生了滤波后高频混叠显现,尤其是在未使用补偿滤波器情况下尤为严重。

这说明,在经行CIC滤波器设计的时候要考虑滤波效果和级联补偿滤波器的作用。

前面在说到可以从filterDesigner工具箱中导出以供使用的滤波器,其中一项为可以直接导出为simulink模型,可以导出为使用CIC滤波器模块的模型,也可以是使用基本模块组合成的CIC滤波器。

使用CIC滤波器模块的模型
image

使用基本模块组成的CIC滤波器模型
image

仿真模型如下
image

设置一个输入,观察效果
image

60+270+3200
image

标签:CIC,滤波器,采样率,Fs,hcic,Matlab,设计
From: https://www.cnblogs.com/luxzhi/p/17734148.html

相关文章

  • WOA-ELM分类预测 | Matlab 鲸鱼算法(WOA)优化极限学习机(ELM)的分类预测
    ✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,matlab项目合作可私信。......
  • 基于图像形态学处理的目标几何形状检测算法matlab仿真
    1.算法运行效果图预览  2.算法运行软件版本matlab2022a 3.算法理论概述      目标几何形状检测是计算机视觉领域中的重要任务之一,旨在从图像中自动识别和定位不同的几何形状,例如矩形、圆形、三角形等。这些形状检测在许多领域中都具有广泛的应用,如工业自动化......
  • 基于Vgg16和Vgg19深度学习网络的步态识别系统matlab仿真
    1.算法运行效果图预览  2.算法运行软件版本MATLAB2022A 3.算法理论概述       步态识别作为生物特征识别领域的一个重要分支,在人体运动分析、身份验证、健康监测等方面具有广泛的应用前景。步态能量图(GaitEnergyImage,简称GEI)是一种有效的步态表示方法,通过......
  • 【红外图像】利用红外图像处理技术对不同制冷剂充装的制冷系统进行性能评估(Matlab代码
    ✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,matlab项目合作可私信。......
  • 【大规模 MIMO 检测】基于ADMM的大型MU-MIMO无穷大范数检测研究(Matlab代码实现)
    ✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,matlab项目合作可私信。......
  • m基于Faster-RCNN网络的人员吸烟行为检测系统matlab仿真,带GUI操作界面
    1.算法仿真效果matlab2022a仿真结果如下:  2.算法涉及理论知识概要         人员吸烟行为检测系统在公共场所如学校、医院、公共交通工具等广泛使用。这类系统通常通过图像或视频分析来检测人员是否有吸烟行为。其中,基于Faster-RCNN网络的吸烟行为检测是一种常......
  • 1788_通过CMD命令行启动操作MATLAB
    全部学习汇总:GitHub-GreyZhang/g_matlab:MATLABonceusedtobemydailytool.AftermanyyearswhenIgobackandreadmyoldlearningnotesIfeltmaybeIstillneeditinthefuture.So,startthisrepotokeepsomeofmyoldlearningnotesservralyearsa......
  • 基于方向编码的模板匹配算法matlab仿真
    1.算法运行效果图预览  2.算法运行软件版本MATLAB2022a 3.算法理论概述       模板匹配是一种常见的计算机视觉方法,用于在一幅图像中寻找指定的模板。它在目标检测、图像识别、物体跟踪等领域中有广泛的应用。基于方向编码的模板匹配算法是一种改进的模板......
  • Matlab绘制图表
    学习一门技术最好的方式就是阅读官方文档,可以查看MATLAB官方文档二维图表折线图函数图形描述loglog()x轴和y轴都取对数坐标semilogx()x轴取对数坐标,y轴取线性坐标semilogy()x轴取线性坐标,y轴取对数坐标plotyy()带有两套y坐标轴的线性坐标系ploar()极坐标系对数坐标系图线下面例......
  • matlab-动图
    matlab中的gif动图%彩色图像,举个例子,n个图片%对于实际图形,常用到frame=getframe(fig);im(idx)=frame2im(frame);n=100;fori=1:nimg{i}=im2uint8(rand(512,512,3));end%将图片组合成gif图filename='test_rgb.gif';foridx=1:n[A,map]=rgb2ind......