news 2026/4/17 3:19:51

FPGA实现 CIC抽值滤波 滤波器 verilog 仿真和matlab simulink仿真...

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
FPGA实现 CIC抽值滤波 滤波器 verilog 仿真和matlab simulink仿真...

FPGA实现 CIC抽值滤波 滤波器 verilog 仿真和matlab simulink仿真 vivado ise quartus软件均可以,匹配滤波器系数生成等 含说明 doc,电子ZL售出不退,这个需要一定的数字信号处理知识和熟练操作相应软件,目前还做不到手把手的教,不太熟练的,发vivado工程,一键跑程序得出图1和图3所示

CIC滤波器在数字信号处理里属于那种上手快但细节坑多的东西,尤其做多速率系统的时候经常要用到。这玩意儿结构简单(积分器+梳状器),资源消耗低,特别适合FPGA实现。先放个三阶CIC的Verilog核心代码:

module cic_decimation #( parameter STAGES = 3, parameter WIDTH = 16 )( input clk, rst, input signed [WIDTH-1:0] din, output reg signed [WIDTH+STAGES*3-1:0] dout ); // 积分器链 reg signed [WIDTH+3*STAGES-1:0] intg [0:STAGES]; always @(posedge clk) begin if(rst) begin for(int i=0; i<=STAGES; i++) intg[i] <= 0; end else begin intg[0] <= din + intg[0]; for(int i=1; i<=STAGES; i++) intg[i] <= intg[i-1] + intg[i]; end end // 梳状器部分 reg signed [WIDTH+3*STAGES-1:0] comb [0:STAGES]; always @(posedge clk) begin if(rst) begin for(int i=0; i<=STAGES; i++) comb[i] <= 0; end else begin comb[0] <= intg[STAGES]; for(int i=1; i<=STAGES; i++) comb[i] <= comb[i-1] - $signed(comb[i-1] >>> i); end dout <= comb[STAGES]; end endmodule

代码里有个容易踩坑的点——位宽扩展。积分环节每次累加都会导致数据位宽膨胀,如果没做足够的符号位扩展,仿真时就会出现数值溢出的鬼畜现象。比如输入16bit时,三阶CIC的输出位宽至少要扩展到16+3*3=25bit(这个经验公式实测有效)。

Matlab验证环节更刺激,用fdatool生成CIC补偿滤波器系数时,记得勾选"Normalize filter coefficients to avoid overflow"。有一次我忘记勾选,结果FPGA输出和Matlab差了两个数量级,debug到凌晨三点才发现问题出在这。

Simulink模型搭建有个骚操作:把CIC的差分方程拆开,用Unit Delay模块手动搭积分和梳状结构。这么搞虽然麻烦,但能清晰看到每个节点的数据变化。对比Vivado仿真波形时,记得把时间轴对齐到降采样后的时钟边沿,不然会看到数据错位的假象。

FPGA实现 CIC抽值滤波 滤波器 verilog 仿真和matlab simulink仿真 vivado ise quartus软件均可以,匹配滤波器系数生成等 含说明 doc,电子ZL售出不退,这个需要一定的数字信号处理知识和熟练操作相应软件,目前还做不到手把手的教,不太熟练的,发vivado工程,一键跑程序得出图1和图3所示

工程部署阶段,Vivado的COE文件生成脚本建议用python写:

import numpy as np coef = np.array([-1,3,-3,1]) # 三阶梳状器系数 with open('cic_coe.coe','w') as f: f.write('Radix=10;\nCoefficients='+','.join(map(str,coef)))

比手动编辑可靠得多,特别是当阶数增加到5阶时,系数长度暴涨到几十个,手输绝对会错。

最后在Quartus里跑时序收敛,重点关注comb逻辑的路径延迟。遇到过最坑的情况是降采样时钟约束没设对,导致时序报告全是伪错误。这时候得在SDC里加上setmulticyclepath -hold 2,立马药到病除。

仿真结果比对别傻乎乎用肉眼盯波形,写个自动化脚本更靠谱:

set fpga_data [readcsv fpga_out.csv] set matlab_data [readcsv matlab_ref.csv] set diff [vecdiff $fpga_data $matlab_data] if {$diff > 1e-6} { puts "仿真翻车!最大误差值:[lindex $diff 0]" } else { puts "波形吻合,可以开瓶快乐水庆祝" }

这脚本曾经帮我逮住过一个隐蔽的符号位错误,误差值刚好卡在0.999999的位置,肉眼根本看不出来。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/14 12:34:31

DispNet网络在双目立体匹配中的优化策略与实践

1. 双目立体匹配与DispNet基础原理 当我们用双眼观察世界时&#xff0c;左右眼看到的画面存在微小差异&#xff0c;这种差异被称为视差。大脑通过分析视差信息&#xff0c;就能感知物体的远近和三维形状。双目立体匹配技术正是模拟这一生物视觉机制&#xff0c;通过计算左右图…

作者头像 李华
网站建设 2026/4/14 12:33:36

深度解析:AKTools如何构建AKShare接口异常修复机制

深度解析&#xff1a;AKTools如何构建AKShare接口异常修复机制 【免费下载链接】aktools AKTools is an elegant and simple HTTP API library for AKShare, built for AKSharers! 项目地址: https://gitcode.com/gh_mirrors/ak/aktools AKTools作为AKShare的HTTP API封…

作者头像 李华
网站建设 2026/4/14 12:31:39

抖音批量下载终极指南:5步快速获取无水印视频

抖音批量下载终极指南&#xff1a;5步快速获取无水印视频 【免费下载链接】douyin-downloader A practical Douyin downloader for both single-item and profile batch downloads, with progress display, retries, SQLite deduplication, and browser fallback support. 抖音…

作者头像 李华
网站建设 2026/4/14 12:30:34

OneinStack备份与恢复:7种云存储方案完整教程

OneinStack备份与恢复&#xff1a;7种云存储方案完整教程 【免费下载链接】oneinstack oneinstack: 是一个集成了多种 Web 服务器、数据库、PHP 环境等的一键安装包&#xff0c;它支持一键安装和配置多种开发环境和应用。适合用于快速部署 Web 服务器、数据库和 PHP 环境等&…

作者头像 李华
网站建设 2026/4/14 12:27:02

如何免费下载Steam创意工坊模组:WorkshopDL终极指南

如何免费下载Steam创意工坊模组&#xff1a;WorkshopDL终极指南 【免费下载链接】WorkshopDL WorkshopDL - The Best Steam Workshop Downloader 项目地址: https://gitcode.com/gh_mirrors/wo/WorkshopDL 你是否在Epic Games Store或GOG等平台购买了游戏&#xff0c;却…

作者头像 李华