CIC滤波器

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) beginif (rst) beginc <= 3'd0;tem <= 13'd0;dout_tem <= 13'd0;rdy_tem <= 1'b0;endelsebeginif (c==4) beginrdy_tem <= 1'b1;dout_tem <= tem + din;c = 3'd0;tem = 13'd0;endelsebeginrdy_tem <= 1'b0;tem = tem + din;c = c + 1;endendendassign 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) beginif(rst)d1 <= 37'd0;elsed1 <= I1;endassign I1 = (rst ? 37'd0 : (d1+{{27{Xin[9]}},Xin}));//第二级积分器always @(posedge clk or posedge rst) beginif(rst)d2 <= 37'd0;elsed2 <= I2;endassign I2 = (rst ? 37'd0 : (I1+d2));//第三级积分器always @(posedge clk or posedge rst) beginif(rst)d3 <= 37'd0;elsed3 <= I3;endassign 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) beginif(rst)beginc = 3'd0;dout_tem <= 17'd0;rdy_tem <= 1'b0;endelsebeginif (c==4) beginrdy_tem <= 1'b1;dout_tem <= Iin;c = 3'd0;endelsebeginrdy_tem <= 1'b0;c = c+1;endendendassign 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) beginif (rst) begind1 <= 17'd0;d2 <= 17'd0;d3 <= 17'd0;d4 <= 17'd0;endelsebeginif (ND) begind1 <= Xin;d2 <= d1;d3 <= C1;d4 <= C2;endendendassign 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.rhkb.cn/news/331571.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MongoDB(介绍,安装,操作,Springboot整合MonggoDB)

目录 MongoDB 1 MongoDB介绍 MongoDB简介 MongoDB的特点 MongoDB使用场景 小结 2 MongoDB安装 安装MongoDB 连接MongoDB MongoDB逻辑结构 MongoDB数据类型 小结 3 MongoDB操作 操作库和集合 操作文档-增删改 操作文档-查询 MongoDB索引 小结 4 SpringBoot整合…

【微积分】CH16 integrals and vector fields听课笔记

【托马斯微积分学习日记】13.1-线积分_哔哩哔哩_bilibili 概述 16.1line integrals of scalar functions [中英双语]可视化多元微积分 - 线积分介绍_哔哩哔哩_bilibili 16.2vector fields and line integrals&#xff1a; work circulation and flux 向量场差不多也是描述某种…

kubernetes的服务发现

目录 概述集群内部ip访问ServiceDNSHeadlessService 集群内 --> 集群外集群外--> 集群内NodePortHostPortIngress 概述 本篇介绍kubernetes的服务发现&#xff0c;主要分三部分&#xff1a;k8s 集群内部互相通信、k8s 集群内部访问外部、集群外部访问集群内部。   解决…

数理逻辑:1、预备知识

17.1 命题和联结词 ​ 命题&#xff1a;可以判定真假的陈述句。&#xff08;则悖论&#xff0c;祈使句&#xff0c;疑问句都不是命题&#xff09; ​ 原子命题&#xff1a;不能被分割为更小的命题的命题 例如&#xff1a; 2既是素数又是偶数 可以由$p: 2 是素数&#xff0c;…

与用户沟通获取需求的方法

1 访谈 访谈是最早开始使用的获取用户需求的技术&#xff0c;也是迄今为止仍然广泛使用的需求分析技术。 访谈有两种基本形式&#xff0c;分别是正式的和非正式的访谈。正式访谈时&#xff0c;系统分析员将提出一些事先准备好的具体问题&#xff0c;例如&#xff0…

Linux网络编程(socket)

1. 概念 局域网和广域网 局域网&#xff1a;局域网将一定区域内的各种计算机、外部设备和数据库连接起来形成计算机通信的私有网络。广域网&#xff1a;又称广域网、外网、公网。是连接不同地区局域网或城域网计算机通信的远程公共网络。 IP&#xff08;Internet Protocol&a…

三维场景感知之三维目标检测方向入门

三维目标检测入门 1 文档需知2 基础知识深度学习基础必上手项目科研研究必知道的论文门户深度学习必看论文 3 目标检测入门知识二维目标检测必看论文 4 三维目标检测入门知识三维目标检测必熟悉数据集三维目标检测点云分类分割预备知识三维目标检测必熟悉&#xff0c;必跑通&am…

自由职业香吗?

啥叫自由职业&#xff1f; 就是有随时随地做事的自由 有不打卡的自由 有不被PUA的自由 有不开低效会议的自由 有不写PPT八股文的自由 也有赚钱或者赚不到钱的自由 我从不来不劝人离职&#xff0c;除非这家公司关了。除了你已经跑通自己的业务闭环。 其实很多idea 都经过MVP。蘑…

ViLT学习

多模态里程碑式的文章&#xff0c;总结了四种多模态方法&#xff0c;根据文字和图像特征特征抽取方式不通。 文章的贡献主要是速度提高了&#xff0c;使用了数据增强&#xff0c;文本的mask 学习自b站朱老师的论文讲解

PLSQL连接Linux Oracle21c

PLSQL连接Linux Oracle21c 一、安装PLsql 下载官网 https://www.allroundautomations.com/registered-plsqldev/ 二、Oracle Instant Client下载 使用plsql连接oracle的时候是需要本地先安装oracle客户端&#xff0c;英文名就是Oracle Instant Client。 官方下载地址&…

Java | Leetcode Java题解之第100题相同的树

题目&#xff1a; 题解&#xff1a; class Solution {public boolean isSameTree(TreeNode p, TreeNode q) {if (p null && q null) {return true;} else if (p null || q null) {return false;}Queue<TreeNode> queue1 new LinkedList<TreeNode>();…

基于HTML5和CSS3搭建一个Web网页(二)

倘若代码中有任何问题或疑问&#xff0c;欢迎留言交流~ 网页描述 创建一个包含导航栏、主内容区域和页脚的响应式网页。 需求: 导航栏: 在页面顶部创建一个导航栏&#xff0c;包含首页、关于我们、服务和联系我们等链接。 设置导航栏样式&#xff0c;包括字体、颜色和背景颜…

【数据结构与算法 刷题系列】移除链表元素

&#x1f493; 博客主页&#xff1a;倔强的石头的CSDN主页 &#x1f4dd;Gitee主页&#xff1a;倔强的石头的gitee主页 ⏩ 文章专栏&#xff1a;数据结构与算法刷题系列&#xff08;C语言&#xff09; 期待您的关注 目录 一、问题描述 二、解题思路 三、源代码实现 一、问题…

HQL面试题练习 —— 互相关注

目录 1 题目2 建表语句3 题解 1 题目 现有用户关注者列表记录表 t_user_follower&#xff0c;有两个字段&#xff0c;用户ID&#xff08;user_id&#xff09;&#xff0c;关注者列表&#xff08;follower_ids)&#xff0c;关注者列表中是关注用户的用户ID&#xff0c;数据样例如…

go-zero 实战(3)

引入 Redis 在之前的 user 微服务中引入 redis。 1. 修改 user/internal/config/config.go package configimport ("github.com/zeromicro/go-zero/core/stores/cache""github.com/zeromicro/go-zero/zrpc" )type Config struct {zrpc.RpcServerConfMys…

java如何获取IP和IP的归属地?

在Java中&#xff0c;获取IP地址通常指的是获取本地机器的IP地址或者通过某种方式&#xff08;如HTTP请求&#xff09;获取的远程IP地址。代码案例如下: 而要获取IP的归属地&#xff08;地理位置信息&#xff09;&#xff0c;则通常需要使用第三方IP地址查询服务&#xff0c;我…

【C++ QT项目实战-03】---- C++ QT系统实现读取JSON文件数据的自动化模式

&#x1f3a9; 欢迎来到技术探索的奇幻世界&#x1f468;‍&#x1f4bb; &#x1f4dc; 个人主页&#xff1a;一伦明悦-CSDN博客 ✍&#x1f3fb; 作者简介&#xff1a;C软件开发、Python机器学习爱好者 &#x1f5e3;️ 互动与支持&#xff1a;&#x1f4ac;评论 &#…

解决在cmd里下载的库,但IDLE还是显示不存在的问题

原因一&#xff1a; 环境变量配置 首先&#xff0c;你需要确认你安装库的时候使用的Python环境是否和IDLE使用的Python环境是同一个。如果cmd中你使用的是系统路径下的Python&#xff0c;而IDLE使用的是另一个路径下的Python&#xff0c;那么你在cmd中下载的库&#xff0c;IDL…

SQLiteOpenHelper数据库帮助器

SQLiteOpenHelper数据库帮助器是Android提供的数据库辅助工具。 1、继承SQLiteOpenHelper类&#xff0c;需要重写onCreate和onUpgrade两个方法 案例&#xff1a;实现增删改查 package com.example.databases_text;import android.app.PictureInPictureParams; import androi…

Echarts图表使用

ECharts是一个用JS实现开源可视化库&#xff0c;它提供了丰富的图表类型和交互能力。使用户可以通过简单的配置生成各种各样的图表。 先安装ECharts图表直接下载echarts.min.js并用<script>标签引入也可以使用源代码版本echarts.js并用<script>标签引入&#xff0…