Matlab 设计仿真CIC滤波器
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)
进行CIC降采样滤波器设计,实现采样率从50kSPS降至2kSPS,25倍降采样。简单分析:要实现25倍降采样率,可以通过使用2个5倍降采样率的CIC串联实现,也可以使用1个25倍降采样率的CIC实现。具体分别使用几级滤波器需要按照需求和硬件支持调整,此处以常见和通用的3级CIC滤波器为例进行设计。
CIC滤波器的系统函数为
\]
其中,\(M\) 为CIC滤波器长度,也是CIC滤波器的升/降采样倍率;\(N\) 为CIC滤波器级数。那么,其频率响应为
\]
关于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
工具箱,两种方式:
- matlab 命令行输入
>> filterDesigner
回车; - matlab 主界面顶部
APP
选项卡,搜索 filterDesigner 打开。
打开后,进行CIC抽取滤波器设计:
- 主界面选择 :
创建多速率滤波器
- 类型选择:
抽取器
- 选择使用滤波器类型:
级联积分梳妆(CIC)滤波器
- 设置抽取因子:
5
(示例) - 设置采样频率: 归一化与采样率都可以
- 设置积分延迟和节数(级数): 延迟一般设计为
1
节数(级数)设计:3
- 选择频响显示样式
- 创建滤波器
- 设计信息展示于左上角
- 定点化设计:根据带滤波信号的数据范围进行滤器定点化设计,特别是滤波器级联使用时
设计界面展示:
设计完成后,可以选择将滤波器导出为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滤波器的更多相关文章
- 使用MATLAB设计FIR滤波器
1. 采用fir1函数设计,fir1函数可以设计低通.带通.高通.带阻等多种类型的具有严格线性相位特性的FIR滤波器.语法形式: b = fir1(n, wn) b = fir1(n, wn ...
- CIC滤波器
CIC滤波器是滑动平均滤波器的非常高效的迭代实现,只需要一个减法和一个加法,而滑动平均需要N-1个加法. cic滤波器相当于一个梳状滤波器y(n)=x(n)-x(n-D),H(z)=1-z-D,和一个 ...
- MATLAB设计模糊控制器并用simulink仿真
一.设计模糊控制器1.1 创建项目文件夹在此路径如图 1.2 打开MATLAB打开MATLAB R2012a切换当前目录为上一步路径,如图 1.3 设计模糊控制器打开模糊控制器设计对话框 根据模糊控制 ...
- Matlab 高斯_拉普拉斯滤波器处理医学图像
前言:本程序是我去年实现论文算法时所做.主要功能为标记切割肝脏区域.时间有点久,很多细节已经模糊加上代码做了很多注释,因此在博客中不再详述. NOTE: 程序分几大段功能模块,仔细阅读,对解决医学图像 ...
- matlab数据流仿真和时间流仿真
simulink 使用的动态系统仿真,仿真需要求状态方程和输出方程,关键是求状态方程,而状态方程的求解有多种算法,可变步长和定步长,所以仿真时对求解器的选择和步长的设置就比较重要. 所谓基於数据流的仿 ...
- 声反馈抑制使用matlab/simulink仿真
第一份工作时做啸叫抑制的仿真,调大0.3可以有大的啸叫产生,下图的SIMULINK仿真模型 实现移相有多种方法: 1.iir实现 2.FFT实现 3.使用FIR实现 所有信号均可以由正弦信号叠加而成.
- Matlab/Simulink仿真中如何将Scope转化为Figure?
1.只需要在运行仿真后,在命令窗口内输入: ,'ShowHiddenHandle','on'); set(gcf,'menubar','figure'); scope最上方会出现一个菜单栏,选择Too ...
- matlab中实现Gabor滤波器
1.spatialgabor.m描述gabor函数 % SPATIALGABOR - applies single oriented gabor filter to an image%% Usage: ...
- 二阶环路滤波器的matlab 设计
clc; Rs=10*10^6; %码速率 es=0.707; %阻尼系数 fs=8*10^6; %采样频率.系统时钟频率 Bit_Loop_out=27;%环路滤波器输入输出位宽 N=31; %NC ...
- matlab 与 modelsim 联调 cic抽取滤波器
注:本设计的参数为:D=2,R=5,N=3:时钟频率为50mhz,输入信号为有符号8位,根据公式bmax=bin+N*log(2,R*D):可以得到bmax=18: 1,cic抽取滤波器原理 网上资料 ...
随机推荐
- 设计 C++ 接口文件的小技巧之 PIMPL
设计 C++ 接口文件的小技巧之 PIMPL C++ 里面有一些惯用法(idioms),如 RAII,PIMPL,copy-swap.CRTP.SFINAE 等.今天要说的是 PIMPL,即 Poin ...
- Centos 7安装Docker镜像仓库-Harbor
下载安装包并导入镜像 # 进入文件下载目录 cd /root/software/ # 下载安装文件 # 如果下载失败可以本地下载,下载后上传至服务器,https://github.com/goharb ...
- P2709 小B的询问题解
本题需要用到莫队算法 关于莫队算法 莫队算法是一种离线算法,适用于序列中统计区间特定的目标的问题. 时间复杂度通常是 \(O(n \sqrt n)\) 或更高. P2709 小B的询问 点击查看原题 ...
- AcWing 4495. 数组操作题解
思路 此题较为简单,简述一下思路. 从小到大排序,每次选取最小值,只要不为0即可 每次都为序列减去一个数字太慢,但每个数又减去的数字一样,所以可以用minus记录每个数要减去的数 C++代码 #inc ...
- (占坑编辑中)hexo博客github page更换域名
hexo博客github page更换域名 檗科下的Cname文件一定要改为最近的域名
- 使用Locust进行性能测试
当涉及到评估应用程序或服务的性能时,Locust是一个功能强大且易于使用的开源工具.本文将介绍Locust的基本概念和使用方法. 什么是Locust? Locust是一个用于编写.运行和分析负载测试的 ...
- 初始elasticSearch
elasticSearch 大致印象 为什么用? mysql更擅长于crud等操作,当一张表达到百万级别时,检索速度过慢 es检索速度快 基本概念 Index索引(两层意思) 动词:类似mysql的i ...
- DataArts Studio实践丨通过Rest Client 接口读取RESTful接口数据的能力
本文分享自华为云社区<DataArts Studio 通过Rest Client 接口读取RESTful接口数据的能力,通过Hive-SQL存储>,作者: 张浩奇 . Rest Clien ...
- nodejs中事件循环机制与面试题详解
nodejs中架构如下图所示,通过v8引擎来执行js代码,通过中间层 libuv 来读写文件系统.网络等做一些操作. nodejs中提供阻塞和非阻塞的调用方式,比如fs模块中读取文件,可以根据 ...
- 优化nginx参数(基本通用参数)
全局域配置参数 worker_processes auto; worker_cpu_affinity auto; worker_rlimit_nofile 65530; 前两个参数用于开启nginx多 ...