CIC滤波器

news2024/12/26 11:01:19

CIC滤波器结构简单,没有乘法器,只有加法器、积分器和寄存器,适合工作在高抽样率条件下,而且CIC滤波器是一种基于零点相消的FIR滤波器。

CIC滤波器分为单级和多级滤波器。

1.在单极滤波器中:

当CIC滤波器的长度M远大于1时,第一旁瓣电平相对于主瓣电平的差值几乎是固定的13.46dB。显然这样小的阻带衰减远不能满足较高的CIC滤波器要求。

要想阻带衰减满足高的CIC滤波器要求,是对CIC滤波器进行级联,每增加一级滤波器,则第一旁瓣电平衰减增加13.46dB。例如采用5级CIC滤波器级联,则第一旁瓣电平衰减变为67.3dB

单级CIC滤波器实现的matlab代码:

%用Matlab仿真不同长度的单级CIC滤波器的频谱特性。

M=2;         %滤波器长度
b=ones(1,M);
delta=[1,zeros(1,1023)];
s=filter(b,1,delta);        %求取滤波器冲激响应
Spec=20*log10(abs(fft(s))); %求取滤波器频谱特性
Spec2=Spec-max(Spec);
f=0:length(Spec)-1;
f=2*f/(length(Spec)-1);     %对频率轴进行归一化处理

M=5;         %滤波器长度
b=ones(1,M);
delta=[1,zeros(1,1023)];
s=filter(b,1,delta);        %求取滤波器冲激响应
Spec=20*log10(abs(fft(s))); %求取滤波器频谱特性
Spec5=Spec-max(Spec);

M=7;         %滤波器长度
b=ones(1,M);
delta=[1,zeros(1,1023)];
s=filter(b,1,delta);        %求取滤波器冲激响应
Spec=20*log10(abs(fft(s))); %求取滤波器频谱特性
Spec7=Spec-max(Spec);

M=8;         %滤波器长度
b=ones(1,M);
delta=[1,zeros(1,1023)];
s=filter(b,1,delta);        %求取滤波器冲激响应
Spec=20*log10(abs(fft(s))); %求取滤波器频谱特性
Spec8=Spec-max(Spec);

% plot(f,Spec2,f,Spec5,f,Spec7,f,Spec8);axis([0 1 -50 0]);grid;
% xlabel('归一化频率');ylabel('幅度(dB)');
% legend('M=2','M=5','M=7','M=8');
% grid;
plot(f,Spec2,'-',f,Spec5,'.',f,Spec8,'--');axis([0 1 -50 0]);
xlabel('归一化频率');ylabel('幅度(dB)');
legend('M=2','M=5','M=8');
grid;

2.多级CIC滤波器:

matlab代码:

%用Matlab仿真不同长度的5级CIC滤波器的频谱特性。

M=2;         %滤波器长度
b=ones(1,M);
delta=[1,zeros(1,1023)];
s1=filter(b,1,delta);        %求取滤波器冲激响应
s2=filter(b,1,s1);           %求取滤波器冲激响应
s3=filter(b,1,s2);           %求取滤波器冲激响应
s4=filter(b,1,s3);           %求取滤波器冲激响应
s=filter(b,1,s4);            %求取滤波器冲激响应
Spec=20*log10(abs(fft(s))); %求取滤波器频谱特性
Spec2=Spec-max(Spec);
f=0:length(Spec)-1;
f=2*f/(length(Spec)-1);     %对频率轴进行归一化处理

M=5;         %滤波器长度
b=ones(1,M);
delta=[1,zeros(1,1023)];
s1=filter(b,1,delta);        %求取滤波器冲激响应
s2=filter(b,1,s1);           %求取滤波器冲激响应
s3=filter(b,1,s2);           %求取滤波器冲激响应
s4=filter(b,1,s3);           %求取滤波器冲激响应
s=filter(b,1,s4);            %求取滤波器冲激响应
Spec=20*log10(abs(fft(s))); %求取滤波器频谱特性
Spec5=Spec-max(Spec);

M=7;         %滤波器长度
b=ones(1,M);
delta=[1,zeros(1,1023)];
s1=filter(b,1,delta);        %求取滤波器冲激响应
s2=filter(b,1,s1);           %求取滤波器冲激响应
s3=filter(b,1,s2);           %求取滤波器冲激响应
s4=filter(b,1,s3);           %求取滤波器冲激响应
s=filter(b,1,s4);            %求取滤波器冲激响应
Spec=20*log10(abs(fft(s))); %求取滤波器频谱特性
Spec7=Spec-max(Spec);

M=8;         %滤波器长度
b=ones(1,M);
delta=[1,zeros(1,1023)];
s1=filter(b,1,delta);        %求取滤波器冲激响应
s2=filter(b,1,s1);           %求取滤波器冲激响应
s3=filter(b,1,s2);           %求取滤波器冲激响应
s4=filter(b,1,s3);           %求取滤波器冲激响应
s=filter(b,1,s4);            %求取滤波器冲激响应
Spec=20*log10(abs(fft(s))); %求取滤波器频谱特性
Spec8=Spec-max(Spec);

% plot(f,Spec2,f,Spec5,f,Spec7,f,Spec8);axis([0 1 -50 0]);grid;
% xlabel('归一化频率');ylabel('幅度(dB)');
% legend('M=2','M=5','M=7','M=8');
% grid;
plot(f,Spec2,'-',f,Spec5,'.',f,Spec8,'--');axis([0 1 -200 0]);
xlabel('归一化频率');ylabel('幅度(dB)');
legend('M=2','M=5','M=8');
grid;

3.CIC滤波器的应用条件

CIC滤波器的频谱形状是相似的,在给定过渡带的情况下,通带容限与阻带容限的取值只与CIC滤波器的阶数及级数有关。对于单级CIC滤波器来说,其对应关系为:

\delta p\geqslant \frac{1}{6}(\pi \frac{f_{p}}{F_{0}}M)^{2}

\delta _s\ge f_sM/F_0

对于多级CIC滤波器(设级数为n)来说,各级CIC滤波器的误差容限与系统总误差容限的关系为;

\delta _p=\delta _{p1}+\delta _{s2}+....+\delta _{pn}

\delta _s=\delta _{s1}\delta _{s2}...\delta _{sn}

4.单级CIC滤波器的FPGA设计

抽取倍数为5,采用5阶CIC滤波器

module SigCIC(
    input rst,
    input clk,
    input signed[9:0] din,
    output rdy,
    output signed[12:0] dout
);

    reg rdy_tem;
    reg[2:0] c;
    reg signed[12:0] tem;
    reg signed[12:0] dout_tem;
    
    always @(posedge clk or posedge rst) begin
        if (rst) begin
            c <= 3'd0;
            tem <= 13'd0;
            dout_tem <= 13'd0;
            rdy_tem <= 1'b0;
        end
        else
            begin
                if (c==4) begin
                    rdy_tem <= 1'b1;
                    dout_tem <= tem + din;
                    c = 3'd0;
                    tem = 13'd0;
                end
                else
                    begin
                        rdy_tem <= 1'b0;
                        tem = tem + din;
                        c = c + 1;
                    end
            end
    end

    assign dout = dout_tem;
    assign rdy = rdy_tem;

endmodule

5.多级CIC滤波器的FPGA实现

(1)Noble恒等式

具体到多速率信号处理系统,如果线性系统F\left( z^M \right)后面紧跟着M倍抽取滤波器,则下列公式成立:

F\left( z^M \right) \left( \downarrow M \right) =\left( \downarrow M \right) F\left( z \right)

表明调换线性系统的抽取系统的处理顺序,即首先进行抽取,然后进行线性滤波,这样可以将线性滤波器的长度降低到1/M,即滤波器的抽头数为原来的1/M

(2)多级滤波器的输出字长

B_o=B_{in}+\log _2\left( N^D \right)

B_o为输出数据位数,        B_{in}为输入数据位数,        N为滤波器阶数,        D为滤波器级联数量

假设设计的滤波器为5阶3级CIC滤波器,输入数据位数为10bit

则整个系统的输出数据位数为17bit,并且多级CIC滤波器的中间运算位数也为17bit。

(3)Verilog编写

将程序分成3个模块来进行编写:积分模块(Integrated)、抽取模块(Decimate)和梳状模块(Comb)和顶层模块。

积分模块(Integrated)

module Integrated(
    input rst,
    input clk,
    input signed[9:0] Xin,
    output signed[16:0] Intout
);
 
 
    wire signed[36:0] I1,I2,I3;
    reg  signed[36:0] d1,d2,d3;

//第一级积分器
    always @(posedge clk or posedge rst) begin
        if(rst)
            d1 <= 37'd0;
        else
            d1 <= I1;
    end

    assign I1 = (rst ? 37'd0 : (d1+{{27{Xin[9]}},Xin}));

//第二级积分器
    always @(posedge clk or posedge rst) begin
        if(rst)
            d2 <= 37'd0;
        else
            d2 <= I2;
    end
    assign I2 = (rst ? 37'd0 : (I1+d2));

//第三级积分器
    always @(posedge clk or posedge rst) begin
        if(rst)
            d3 <= 37'd0;
        else
            d3 <= I3;
    end
    assign I3 = (rst ? 37'd0 : (I2+d3));

    assign Intout = I3[16:0];

endmodule

抽取模块(Decimate)

module Decimate(
    input rst,
    input clk,
    input signed[16:0] Iin,
    output signed[16:0] dout,
    output rdy
);

    reg[2:0] c;
    reg signed[16:0] dout_tem;
    reg rdy_tem;
    always @(posedge clk or posedge rst) begin
        if(rst)
            begin
                c = 3'd0;
                dout_tem <= 17'd0;
                rdy_tem <= 1'b0;
            end
        else
            begin
                if (c==4) begin
                    rdy_tem <= 1'b1;
                    dout_tem <= Iin;
                    c = 3'd0;
                end
                else
                    begin
                        rdy_tem <= 1'b0;
                        c = c+1;
                    end
            end
    end

    assign dout = dout_tem;
    assign rdy = rdy_tem;

endmodule

梳状模块(Comb)

module Comb (
    input rst,
    input clk,
    input ND,
    input signed[16:0] Xin,
    output signed[16:0] Yout
);

    reg signed[16:0] d1,d2,d3,d4;
    wire signed[16:0] C1,C2;
    wire signed[16:0] Yout_tem;
    
    always @(posedge clk or posedge rst) begin
        if (rst) begin
            d1 <= 17'd0;
            d2 <= 17'd0;
            d3 <= 17'd0;
            d4 <= 17'd0;
        end
        else
            begin
                if (ND) begin
                    d1 <= Xin;
                    d2 <= d1;
                    d3 <= C1;
                    d4 <= C2;
                end
            end
    end

    assign C1 = (rst ? 17'd0:(d1-d2));
    assign C2 = (rst ? 17'd0:(C1-d3));
    assign Yout_tem = (rst ? 17'd0:(C2-d4));
    assign Yout = Yout_tem;
    
endmodule

顶层模块

module MultCIC (
    input rst,
    input clk,
    input [9:0] Xin,
    output [16:0] Yout,
    output rdy
);

    wire ND;
    wire signed[16:0] Intout;
    wire signed[16:0] dout;

    Integrated U1(
        .rst(rst),
        .clk(clk),
        .Xin(Xin),
        .Intout(Intout)
    );

    Decimate U2(
        .rst(rst),
        .clk(clk),
        .Iin(Intout),
        .dout(dout),
        .rdy(ND)
    );

    Comb U3(
        .rst(rst),
        .clk(clk),
        .ND(ND),
        .Xin(dout),
        .Yout(Yout)
    );

    assign rdy = ND;
    
endmodule

参考资料

数字滤波器的FPGA与MATLAB实现

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1695688.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【css3】04-css3转换

目录 1 2D转换 2 3D转换 3 案例&#xff1a;旋转的魔方 1 2D转换 ## 2D转换 ☞ 位移 transform: translate(100px,100px); 备注&#xff1a; 位移是相对元素自身的位置发生位置改变 ☞ 旋转 transform: rotate(60deg); 备注&am…

LabVIEW虚拟测试实验室开发

LabVIEW虚拟测试实验室开发 在当代的科技和工业进步中&#xff0c;测试与测量扮演着至关重要的角色。随着技术的发展&#xff0c;测试系统也变得日益复杂和成本昂贵&#xff0c;同时对测试结果的准确性和测试过程的效率要求越来越高。开发了一种基于LabVIEW的虚拟测试实验室的…

新能源汽车的电驱热管理

前言 新能源汽车的电驱热管理是指维持电动汽车电池、电机和电控系统在适宜的工作温度范围内&#xff0c;保障车辆高效、安全、稳定运行的技术方案。随着新能源汽车的快速发展和普及&#xff0c;电驱热管理技术也日益成为关注焦点。本文将从电池、电机和电控系统三个方面介绍新…

k8s集群的声明式管理资源

一 声明式管理方法 1 适合于对资源的修改操作&#xff08;陈述式方式修改资源非常不方便&#xff09; 2 声明式资源管理方法依赖于yaml资源配置清单文件对资源进行管理 资源配置清单文件有两种格式&#xff1a;yaml&#xff08;人性化&#xff0c;易读&#xff09;&#xff…

中国科学院植物研究所宋献军课题组揭示不同的翻译后修饰协作调控水稻种子大小的新机制

公众号&#xff1a;生信漫谈&#xff0c;获取最新科研信息&#xff01; 中国科学院植物研究所宋献军课题组揭示不同的翻译后修饰协作调控水稻种子大小的新机制https://mp.weixin.qq.com/s/ycNgYzACwkYZbo6k0Zqtcw 未来20年&#xff0c;我国将决战全面建成社会主义现代化国家&…

杰理-耳机进入关机关闭内内置触摸-节省功耗

杰理-耳机进入关机关闭内内置触摸-节省功耗 if (__this->init 0) {return LP_TOUCH_SOFTOFF_MODE_LEGACY; }if ((__this -> softoff_mode LP_TOUCH_SOFTOFF_MODE_ADVANCE) && (__this->softoff_keep 0)) {lp_touch_key_disable(); } __this->softoff_k…

安全设计 | Microsoft 威胁建模工具Threat Modeling Tool安装、使用及威胁生成原理详解(文末附样例)

1. 概览 微软威胁建模工具&#xff08;Threat Modeling Tool&#xff09;是 Microsoft 安全开发生命周期 (SDL&#xff0c;Security Development LifeCycle) 的核心要素。 当潜在安全问题处于无需花费过多成本即可相对容易解决的阶段&#xff0c;软件架构师可以使用威胁建模工…

对vue3/core源码ref.ts文件API的认识过程

对toRef()API的认识的过程: 最开始认识toRef()是从vue3源码中的ref.ts看见的,右侧GPT已经举了例子 然后根据例子,在控制台输出ref对象是什么样子的: 这就是ref对象了,我们根据对象中有没有__v_isRef来判断是不是一个ref对象,当对象存在且__v_isRef true的时候他就判定为是一个…

F28034中断

DSP中断 中断中断概述中断机制 中断 当CPU正在执行程序时&#xff0c;由于发生了某种随机的事件&#xff08;外部或内部&#xff09;&#xff0c;使CPU的执行中断&#xff0c;转而去执行某一段特殊的程序&#xff08;中断子程序或中断处理程序&#xff09;&#xff0c;以处理该…

cs与msf权限传递,以及mimikatz抓取win2012明文密码

目录 解释参数 foreign http foreign https cs与msf权限传递 Cobalt Strike会话传递到Metasploit Framework Cobalt strike上的操作 ​编辑​编辑​编辑 Metasploit Framework上的操作 传递会话 Metasploit Framework会话传递到Cobalt Strike Cobalt strike上的操作…

Tina-Linux -- 3. LVGL测试

参考韦东山 – Tina_Linux_图形系统_开发指南 Tina-linux lvgl 配置 环境配置 进入Tina-SDK根目录 source build/envsetup.sh lunch XXX平台名称 make menuconfigLVGL Gui --->Littlevgl --->< > lv_demo<*> lv_examples &#xff08;lvgl官方demo&#…

监控监测管理系统产品规格说明书(实际原件参考)

【智慧工地】监控监测管理系统产品规格说明书编制模板 一、引言 二、 项目概述 三、 总体需求 四、 功能需求 4.1 概述 4.2 业务功能概要描述 4.3 功能性需求 4.4 功能描述 五、 非功能性需求 5.1 用户界面需求 5.2 软硬件环境需求 5.3 产品质量需求 5.4 接口需求 5.5 其他需求…

HarmonyOS 鸿蒙应用开发 - 多态样式 stateStyles

前言&#xff1a;Styles和Extend仅仅应用于静态页面的样式复用&#xff0c;stateStyles可以依据组件的内部状态的不同&#xff0c;快速设置不同样式&#xff0c;类似于css伪类&#xff0c;但语法不同。 ArkUI提供以下四种状态&#xff1a; focused&#xff1a;获焦态。normal&…

MySQL库/表/数据的操作

文章目录 1.数据库操作1.1 创建、删除、查看和修改1.2 编码格式1.3 备份和恢复 2.表的操作2.1 创建表2.2 存储引擎2.3 查看表、修改表、删除表 3.数据类型3.1整数类型3.2字节类型(bit)3.3浮点类型(bit)3.4 decimal3.5 字符串类型3.6 日期和时间类型3.7 enum和set关于如何查找想…

ES 查询踩坑-全字段匹配

需求&#xff1a;name字段需要全匹配查询 name的映射 普通的must查询 GET power_engin/_search {"from": 0,"size": 10,"query": {"bool": {"must": [{"term": {"name": {"value": "尼…

解决Flutter位于悬浮窗口时,应用Logo不更新问题

问题描述 我已经更换了应用Logo&#xff0c;但是发现应用处于悬浮窗口时&#xff0c;logo还是更改之前的&#xff1f;下面的图片只是示意。 解决方案 终端命令 rm -rf ~/Library/Developer/Xcode/DerivedData2.xcode视图内解决 先在顶部找到 Xcode --> Setting --> Lo…

光速入门python的OpenCV

前言 欢迎来到我的博客 个人主页:北岭敲键盘的荒漠猫-CSDN博客 本文整理python的OpenCV模块的关键知识点 争取用最短的时间入门OpenCV 并且做到笔记功能直接复制使用 OpenCV简介 不浪费时间的介绍: 就是类似于ps操作图片。 至于为什么不直接用ps&#xff0c;因为只有程序能…

AI菜鸟向前飞 — LangChain系列之十四 - Agent系列:从现象看机制(上篇)

上一篇介绍了Agent与LangGraph的基础技能Tool的必知必会 AI菜鸟向前飞 — LangChain系列之十三 - 关于Tool的必知必会 前面已经详细介绍了Promp、RAG&#xff0c;终于来到Agent系列&#xff08;别急后面还有LangGraph&#xff09;&#xff0c;大家可以先看下这张图&#xff1…

Centos修改系統語言

一、使用命令行修系统语言 1、显示系统当前语言环 [rootkvm-suma ~]# localectl System Locale: LANGen_US.utf8 VC Keymap: cn X11 Layout: cn 2、查看系统支持字符集 [rootkvm-suma ~]# locale -a 2、设置系统语言环境 [rootkvm-suma ~]# localectl set-locale LANGz…

2024年汉字小达人活动4个多月开赛:18道历年选择题和答案、解析

根据近年的安排&#xff0c;2024年第11届汉字小达人比赛还有4个多月就启动&#xff0c;那么孩子们如何利用这段时间有条不紊地备考呢&#xff1f;我的建议是两手准备&#xff1a;①把小学1-5年级的语文课本上的知识点熟悉&#xff0c;重点是字、词、成语、古诗。②把历年真题刷…