孩子都能学会的FPGA:第二十六课——用FPGA实现CIC抽取滤波器

news2024/11/23 18:50:08

(原创声明:该文是作者的原创,面向对象是FPGA入门者,后续会有进阶的高级教程。宗旨是让每个想做FPGA的人轻松入门作者不光让大家知其然,还要让大家知其所以然!每个工程作者都搭建了全自动化的仿真环境,只需要双击top_tb.bat文件就可以完成整个的仿真(前提是安装了modelsim),降低了初学者的门槛。如需整个工程请留言(WX:Blue23Light),不收任何费用,但是仅供参考,不建议大家获得资料后从事一些商业活动!

在数字信号处理中,CIC滤波器是FIR滤波器中最优的一种,其使用了积分,梳状滤波器级联的方式。CIC滤波器由一对或多对积分-梳状滤波器组成,在抽取CIC中,输入信号依次经过积分,降采样,以及与积分环节数目相同的梳状滤波器。

以上是百度上对CIC滤波器的说明,后面还有各种的公式的推导,有兴趣的读者可以好好学习一下,这不是本文的重点,本文主要讲解如何用FPGA设计CIC滤波器。

从定义中我们可以得出,CIC滤波器是FIR滤波器的一种,可以只使用积分和梳状滤波器来实现,也就是说根本没有了FIR的乘法操作,实现非常的简单。

积分器是单极点的IIR滤波器,其状态方程为:

y(n)=y(n−1)+x(n)

其系统响应为:

H1(z) = 1/(1 - z^{-1})

梳状滤波器为对称的FIR滤波器,其状态方程为:

y(n)=x(n)−x(n−N)

其系统响应为:

H2(z) = 1-z^{-N}

CIC滤波器是通过将积分器与梳状滤波器进行级联,可以得到CIC滤波器的系统函数响应:

H(z) = H1(z)*H2(z) = 1-z^{-N}/(1 - z^{-1})

其中N为抽取倍数由于单级CIC的第一旁瓣阻带衰减是固定的13.46dB,无法很好的抑制旁瓣,因此可以通过级联的方式来提升抑制效果。

看公式能可能会一头雾水,我们用3级CIC抽取滤波器的示意图来说明,如下所示。CIC抽取滤波器一般用在高速采集信号的降采样上,假如AD的采集速度是Fs,但是系统的处理速度只有Fs/N,和直接抽取或者N个值加权平均相比,CIC抽取是计算复杂度低,系统性能,可以有效的过滤掉噪声和干扰信号。

数据以Fs(假设100MHz)的频率输入滤波器,那数据先通过3级的积分滤波器一直进行累加。假如我们希望得到Fs16分频的采样数据,那就将积分滤波器的最后一级输出以Fs/N(6.25MHz)的频率进入梳状滤波器,梳状滤波器其实是微分运算,即当前值减去上一次的值。经过3次的梳状滤波器,最后1级的结果即为抽取的数值。

CIC滤波器的设计还有一个问题,就是数据位数的扩展。假设输入数据是8位,因为积分滤波器一直在累计,中间的寄存器一定要进行数据位的扩展。这儿有一个扩展的公式,就是数据的最大位宽是8+K*log2(N*M)K是积分滤波器和梳状滤波器的级数,这儿K=3N是降采样的倍数,这儿N=16M是每次采样的样本个数,这儿M=1;所以扩展后数据的最大位宽是8+3*log2(16)=20,方便起见,中间的寄存器可以都取20位即可。

如下所示,CIC降采样滤波器相关信号的定义,参数W=20是中间寄存器的位宽,DIV_NUM=16是降采样的倍数,SIGNAL_NUM是符号位扩展的位数。

用时序打拍的方式完成积分累计值的3级传递,用组合逻辑实现积分器的累加。用计数器div_cnt产生flag控制系统降采样。

用时序打拍的方式完成梳状滤波器微分值的3级传递,用组合逻辑实现梳状滤波器的微分运算。最后一级微分值的高8位就是CIC按照16倍降采样抽取的最终数值。

本工程新建了一个cic_top文件,用来例化cic_sampling和前面课程中的正弦波生成器gen_sin,将正弦波以数据以100MHz的频率读出,经过cic_sampling后,以6.25MHz的频率输出。

新建仿真文件后,双击sim目录下的top_tb.bat文件,完成系统的自动化仿真。

modelsim的仿真波形如下所示,CIC降采样抽取后的波形相位有一些滞后,输出的波形也没有失真,功能开发是正确的。

其实CIC不光可以降采样抽取,还是可以升采样进行插值,这个我们下节课进行讲解。

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

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

相关文章

第二次上机测试:Javascript. (第一组)

需求:(注意在规定的时间,在自己的博客提交作品,便于统计测试的完成情况。博客题目《第二次上机测试:Javascript.》) 1、点击按钮,将图片加上边框 2、点击按钮,将图片缩小为长和宽都…

windows安装protoc、protoc-gen-go、protoc-gen-go-grpc

文章目录 一、 protoc二、protoc-gen-go三、protoc-gen-go-grpc 一、 protoc 1,下载:https://github.com/google/protobuf/releases 下载对应的protoc,注意选择windows 2,下好之后解压就行,然后把bin目录加入到环境…

无损放大神器,Topaz Gigapixel AI,让你的图像更清晰!

无论是摄影爱好者、设计师还是专业摄影师,我们都希望能够拍摄到最清晰、最细腻的图像。然而,在现实生活中,我们往往会面临图像放大后模糊失真的问题。为了解决这一难题,我们推荐一款强大的图像无损放大工具——Topaz Gigapixel AI…

2020年第九届数学建模国际赛小美赛B题血氧饱和度的变异性解题全过程文档及程序

2020年第九届数学建模国际赛小美赛 B题 血氧饱和度的变异性 原题再现: 脉搏血氧饱和度是监测患者血氧饱和度的常规方法。在连续监测期间,我们希望能够使用模型描述血氧饱和度的模式。   我们有36名受试者的数据,每个受试者以1 Hz的频率连…

对python自动生成接口测试的示例讲解

在python中Template可以将字符串的格式固定下来,重复利用。 同一套测试框架为了可以复用,所以我们可以将用例部分做参数化,然后运用到各个项目中。 代码如下: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 2…

GPT-4 变懒了?官方回复

你是否注意到,最近使用 ChatGPT 的时候,当你向它提出一些问题,却得到的回应似乎变得简短而敷衍了?对于这一现象,ChatGPT 官方给出了回应。 译文:我们听到了你们所有关于 GPT4 变得更懒的反馈!我…

记录 | vscode设置自动换行

右上菜单栏 -> 查看 -> 打开自动换行 或者还有种方式,如下, 左下角小齿轮,点击设置 然后输入 Editor: Word Wrap ,把开关打开为 on

web前端开发html/css练习

目标图&#xff1a; 素材&#xff1a; 代码&#xff1a; <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns"http://www.w3.org/1999/xhtml"…

【ET8】2.ET8入门-ET框架解析

菜单栏相关&#xff1a;ENABLE_DLL选项 ET->ChangeDefine->ADD_ENABLE_DLL/REMOVE_ENABLE_DLL 一般在开发阶段使用Editor时需要关闭ENABLE_DLL选项。该选项关闭时&#xff0c;修改脚本之后&#xff0c;会直接重新编译所有的代码&#xff0c;Editor在运行时会直接使用最…

【Vue3+Ts项目】硅谷甄选 — 路由配置+登录模块+layout组件+路由鉴权

一、路由配置 项目一共需要4个一级路由&#xff1a;登录&#xff08;login&#xff09;、主页&#xff08;home&#xff09;、404、任意路由&#xff08;重定向到404&#xff09;。 1.1 安装路由插件 pnpm install vue-router 1.2 创建路由组件 在src目录下新建views文件…

STM32F1之CAN介绍

目录 ​编辑 1. CAN 是什么&#xff1f; 2. 总线拓扑图 3. CAN 的特点 4. CAN 协议的基本概念 1. CAN 是什么&#xff1f; CAN 是 Controller Area Network 的缩写&#xff08;以下称为 CAN&#xff09;&#xff0c;是 ISO*1 国际标准化的串行通信协议。 在当前的汽车产…

FPGA时序分析与约束(0)——目录与传送门

一、简介 关于时序分析和约束的学习似乎是学习FPGA的一道分水岭&#xff0c;似乎只有理解了时序约束才能算是真正入门了FPGA&#xff0c;对于FPGA从业者或者未来想要从事FPGA开发的工程师来说&#xff0c;时序约束可以说是一道躲不过去的坎&#xff0c;所以这个系列我们会详细介…

vertica主键列能插入重复值的处理办法

问题描述 开发同事反馈在vertica中创建含主键列的表中插入重复数据时没有进行校验&#xff0c;插入重复值成功。经过测试着实可以插入重复值&#xff0c;这个坑有些不一样。 创建表和插入语句如下&#xff1a; --创建表 CREATE TABLE dhhtest(ID VARCHAR(64) PRIMARY KEY );…

2024年度AI投资策略报告:AI三要素共振,AIGC云到端加速推进

今天分享的AI系列深度研究报告&#xff1a;《2024年度AI投资策略报告&#xff1a;AI三要素共振&#xff0c;AIGC云到端加速推进》。 &#xff08;报告出品方&#xff1a;中国银河证券研究院&#xff09; 报告共计&#xff1a;103页 核心观点:行业热度将持续&#xff0c;积极把…

Git版本控制---入门学习

1.简介 是一个免费的开源分布式版本控制系统工具&#xff0c;旨在快速高效地处理从小型到大型的所有项目。 它是由 Linus Torvalds 在2005年创建的&#xff0c;用于开发 Linux 内核。 Git具有大多数团队和开发人员所需的功能、性能、安全性和灵活性。 它还用作重要的分布式版本…

深度学习——第3章 Python程序设计语言(3.8 深度学习框架PyTorch)

3.8 深度学习框架PyTorch 目录 1. PyTorch简介 2. PyTorch的安装 3. PyTorch相关资源 4. 张量 5. 自动求导 6. 并行计算简介 7. AI硬件加速设备 PyTorch简介 PyTorch是由Meta AI(Facebook)人工智能研究小组开发的一种基于Lua编写的Torch库的Python实现的深度学习库&…

Gemini 能够拯救的谷歌吗?

没有人会记住第二个登上月球的人&#xff0c;除了他自己。 谷歌现在处于尴尬的地位&#xff0c;在 2022 年之前&#xff0c;他以 Chrome Google 搜索确立搜索领域绝对霸主之位&#xff0c;全球市场份额高达 90% 之多&#xff0c;FireFox、Opera 等等浏览器都难以匹敌。而随着 …

枚举 LeetCode2048. 下一个更大的数值平衡数

如果整数 x 满足&#xff1a;对于每个数位 d &#xff0c;这个数位 恰好 在 x 中出现 d 次。那么整数 x 就是一个 数值平衡数 。 给你一个整数 n &#xff0c;请你返回 严格大于 n 的 最小数值平衡数 。 如果n的位数是k&#xff0c;n它的下一个大的平衡数一定不会超过 k1个k1…

JS中的模糊查询功能

什么是模糊查询 模糊查询是指可以在不明确指定查询条件的情况下&#xff0c;自动查找与指定字符串相似的内容。例如&#xff0c;我们在搜索引擎中输入关键字时&#xff0c;就会出现相关的搜索结果&#xff0c;这就是利用了模糊查询功能。 在JS中&#xff0c;我们可以利用一些…

Python:核心知识点整理大全9-笔记

目录 ​编辑 5.2.4 比较数字 5.2.5 检查多个条件 1. 使用and检查多个条件 2. 使用or检查多个条件 5.2.6 检查特定值是否包含在列表中 5.2.7 检查特定值是否不包含在列表中 banned_users.py 5.2.8 布尔表达式 5.3 if 语句 5.3.1 简单的 if 语句 5.3.2 if-else 语句 …