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');

下面使用 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');

2. 使用工具箱设计

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

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

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

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

设计界面展示:



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

3. matlab 调用函数仿真

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

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

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

最终效果图:



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

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

4. simulink 进行仿真

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

使用CIC滤波器模块的模型

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

仿真模型如下

设置一个输入,观察效果

60+270+3200

Matlab 设计仿真CIC滤波器的更多相关文章

  1. 使用MATLAB设计FIR滤波器

    1.      采用fir1函数设计,fir1函数可以设计低通.带通.高通.带阻等多种类型的具有严格线性相位特性的FIR滤波器.语法形式: b = fir1(n, wn) b = fir1(n, wn ...

  2. CIC滤波器

    CIC滤波器是滑动平均滤波器的非常高效的迭代实现,只需要一个减法和一个加法,而滑动平均需要N-1个加法. cic滤波器相当于一个梳状滤波器y(n)=x(n)-x(n-D),H(z)=1-z-D,和一个 ...

  3. MATLAB设计模糊控制器并用simulink仿真

    一.设计模糊控制器1.1 创建项目文件夹在此路径如图 1.2 打开MATLAB打开MATLAB R2012a切换当前目录为上一步路径,如图 1.3 设计模糊控制器打开模糊控制器设计对话框 根据模糊控制 ...

  4. Matlab 高斯_拉普拉斯滤波器处理医学图像

    前言:本程序是我去年实现论文算法时所做.主要功能为标记切割肝脏区域.时间有点久,很多细节已经模糊加上代码做了很多注释,因此在博客中不再详述. NOTE: 程序分几大段功能模块,仔细阅读,对解决医学图像 ...

  5. matlab数据流仿真和时间流仿真

    simulink 使用的动态系统仿真,仿真需要求状态方程和输出方程,关键是求状态方程,而状态方程的求解有多种算法,可变步长和定步长,所以仿真时对求解器的选择和步长的设置就比较重要. 所谓基於数据流的仿 ...

  6. 声反馈抑制使用matlab/simulink仿真

    第一份工作时做啸叫抑制的仿真,调大0.3可以有大的啸叫产生,下图的SIMULINK仿真模型 实现移相有多种方法: 1.iir实现 2.FFT实现 3.使用FIR实现 所有信号均可以由正弦信号叠加而成.

  7. Matlab/Simulink仿真中如何将Scope转化为Figure?

    1.只需要在运行仿真后,在命令窗口内输入: ,'ShowHiddenHandle','on'); set(gcf,'menubar','figure'); scope最上方会出现一个菜单栏,选择Too ...

  8. matlab中实现Gabor滤波器

    1.spatialgabor.m描述gabor函数 % SPATIALGABOR - applies single oriented gabor filter to an image%% Usage: ...

  9. 二阶环路滤波器的matlab 设计

    clc; Rs=10*10^6; %码速率 es=0.707; %阻尼系数 fs=8*10^6; %采样频率.系统时钟频率 Bit_Loop_out=27;%环路滤波器输入输出位宽 N=31; %NC ...

  10. matlab 与 modelsim 联调 cic抽取滤波器

    注:本设计的参数为:D=2,R=5,N=3:时钟频率为50mhz,输入信号为有符号8位,根据公式bmax=bin+N*log(2,R*D):可以得到bmax=18: 1,cic抽取滤波器原理 网上资料 ...

随机推荐

  1. 如何在 Memcache 与 Redis 中做选择?

    memcache vs redis Memcached和Redis都是流行的内存缓存系统,用于提高应用程序的性能和响应速度.它们有一些相似之处,但也有一些区别.以下是Memcached和Redis之间 ...

  2. 如何将PCM格式的原始音频采样数据编码为MP3格式或AAC格式的音频文件?

    一.打开和关闭输入文件和输出文件以及判断输入文件是否读取完毕 //io_data.cpp static FILE* input_file= nullptr; static FILE* output_f ...

  3. 高通个别驱动创建Buffer耗时高问题的解决

    前言 最近在优化游戏的时候,发现在在高通特定驱动版本的机器上(855,855+等),创建VB的耗时跟VB的数量成正比,这个应该是驱动的bug.跟官方人员确认过,确实是有这个问题,他们给的解决方案是减少 ...

  4. 【VUE】 文件预览

    [VUE] 文件预览 上传前预览 word文档:docx.doc 核心代码 import {renderAsync} from "docx-preview"; /** * 渲染do ...

  5. RTC+AI|“即智”数智人创新内容生产体验,为企业降本增效再提速

    号称"史上最卷"的618年中大促落下帷幕,几大电商巨头在直播投入和短视频内容建设上持续加码,短视频+直播电商的营销模式成为618期间的主要输出. 以某美妆专场直播间为例,主播现场手 ...

  6. keycloak~AbstractJsonUserAttributeMapper的作用

    AbstractJsonUserAttributeMapper 它是一个抽象类,用来更新条件更新用户属性(user_attribute)的信息,我们在实现自己的mapper时,需要关注3个方法,下面分 ...

  7. AutoCAD 2024下载及安装教程

    安装教程 演示操作系统:Windows 11 *安装前请关闭所有杀毒软件,避免报错 1.解压[CAD2024.zip] 2.打开解压的[CAD2024]文件夹,打开[Setup]文件夹,运行[Setu ...

  8. Centos静默安装Oracle11G

    环境准备 Oracle 11gR2 64位 Linux版安装包 linux.x64_11gR2_database_1of2.zip linux.x64_11gR2_database_2of2.zip ...

  9. 解决AccessDatabaseEngine.exe 32位64位安装失败问题

    cmd下执行 你的路径\AccessDatabaseEngine.exe /quiet 转载于:https://www.cnblogs.com/64mb/p/10844676.html

  10. Django链接数据库出现的错误以及解决方法

    问题一:django.db.utils.OperationalError: (1045, "Access denied for user 'leo'@'localhost' (using p ...