IIR滤波器

IIR滤波器原理

IIR的特点是:非线性相位、消耗资源少。

IIR滤波器的系统函数与差分方程如下所示:

在这里插入图片描述

由差分方程可知IIR滤波器存在反馈,因此在FPGA设计时要考虑到有限字长效应带来的影响。差分方程中包括两个部分:输入信号x(n)的M节延时网络,相当于FIR的网络结构,实现系统的零点;输出信号y(n)的N节延时网络,作为系统的反馈,实现系统的极点。

直接由差分方程得到的IIR滤波器称为直接I型结构,如下图所示,左边为零点部分,右边为极点部分:

在这里插入图片描述

如果由IIR的系统函数出发,视作两个系统的级联,并且合并公共的延时支路,得到的IIR滤波器称为直接II型结构,如下图所示:

很明显,直接I型结构需要2N个延时单元;直接II型结构仅需要N个延时单元,使用FPGA设计时采用直接II型结构可以节省一些资源。
在这里插入图片描述

级联型结构与直接型结构相比:

1.每一个级联部分中的反馈网络很少,易于控制有限字长效应带来的影响,且IIR滤波器的阶数一般较小。

2.便于准确实现数字滤波器的零/极点,每一级分开调整。

3.运算速度快;占用资源少(除法采用移位)。

4.若除法采用移位,每一级都需要用近似移位实现除法运算,与理想误差较大。

IIR滤波器设计

设计一个4阶IIR低通滤波器,采样频率为8MHz,截至频率为2MHz,阻带衰减为40dB,滤波器量化位数12bits。

在这里插入图片描述

级联设计

第一级滤波器

其中系数乘法用移位和加法代替,有利于减少乘法器资源。

module FirstTap (rst,clk,Xin,Yout);input		rst;   //复位信号,高电平有效input		clk;   //FPGA系统时钟,频率为2kHzinput	 signed [11:0]	Xin;  //数据输入频率为2kHZoutput signed [11:0]	Yout; //滤波后的输出数据//零点系数的实现代码///将输入数据存入移位寄存器中reg signed[11:0] Xin1,Xin2;always @(posedge clk or posedge rst)if (rst)//初始化寄存器值为0beginXin1 <= 12'd0;Xin2 <= 12'd0;end	elsebeginXin1 <= Xin;Xin2 <= Xin1;end//采用移位运算及加法运算实现乘法运算wire signed [23:0] XMult0,XMult1,XMult2;assign XMult0 = {{6{Xin[11]}},Xin,6'd0}+{{7{Xin[11]}},Xin,5'd0}-{{11{Xin[11]}},Xin,1'd0};        //*94assign XMult1 = {{5{Xin1[11]}},Xin1,7'd0}+{{9{Xin1[11]}},Xin1,3'd0}+{{10{Xin1[11]}},Xin1,2'd0};  //*140 (2^7+ 2^3 + 2^2)assign XMult2 = {{6{Xin2[11]}},Xin2,6'd0}+{{7{Xin2[11]}},Xin2,5'd0}-{{11{Xin2[11]}},Xin2,1'd0};  //*94//对滤波器系数与输入数据乘法结果进行累加wire signed [23:0] Xout;assign Xout = XMult0 + XMult1 + XMult2;//极点系数的实现代码///wire signed[11:0] Yin;reg signed[11:0] Yin1,Yin2;always @(posedge clk or posedge rst)if (rst)//初始化寄存器值为0beginYin1 <= 12'd0;Yin2 <= 12'd0;endelsebeginYin1 <= Yin;Yin2 <= Yin1;end//采用移位运算及加法运算实现乘法运算wire signed [23:0] YMult1,YMult2;wire signed [23:0] Ysum,Ydiv;assign YMult1 = {{2{Yin1[11]}},Yin1,10'd0}+{{5{Yin1[11]}},Yin1,7'd0}+{{6{Yin1[11]}},Yin1,6'd0}-{{11{Yin1[11]}},Yin1,1'd0}-{{12{Yin1[11]}},Yin1};  //*1213=1024+128+64-2-1assign YMult2 = {{4{Yin2[11]}},Yin2,8'd0}+{{9{Yin2[11]}},Yin2,3'd0}+{{10{Yin2[11]}},Yin2,2'd0}; //*268=256+8+4//第一级IIR滤波器实现代码///assign Ysum = Xout+YMult1-YMult2;	assign Ydiv = {{11{Ysum[23]}},Ysum[23:11]};//2048//根据仿真结果可知,第一级滤波器的输出范围可用9位表示assign Yin = (rst ? 12'd0 : Ydiv[11:0]);//增加一级寄存器,提高运行速度reg signed [11:0] Yout_reg ;always @(posedge clk)Yout_reg <= Yin;assign Yout = Yout_reg;endmodule

第二级滤波器

module SecondTap (rst,clk,Xin,Yout);input		rst;   //复位信号,高电平有效input		clk;   //FPGA系统时钟,频率为2kHzinput	 signed [11:0]	Xin;  //数据输入频率为2kHZoutput signed [11:0]	Yout; //滤波后的输出数据//零点系数的实现代码///将输入数据存入移位寄存器中reg signed[11:0] Xin1,Xin2;always @(posedge clk or posedge rst)if (rst)//初始化寄存器值为0beginXin1 <= 12'd0;Xin2 <= 12'd0;end	elsebeginXin1 <= Xin;Xin2 <= Xin1;end//采用移位运算及加法运算实现乘法运算wire signed [23:0] XMult0,XMult1,XMult2;assign XMult0 = {{1{Xin[11]}},Xin,11'd0};    //*2048assign XMult1 = {{4{Xin1[11]}},Xin1,8'd0}+{{6{Xin1[11]}},Xin1,6'd0}+{{10{Xin1[11]}},Xin1,2'd0};  //*324=256+64+4assign XMult2 = {{1{Xin2[11]}},Xin2,11'd0};  //*2048//对滤波器系数与输入数据乘法结果进行累加wire signed [23:0] Xout;assign Xout = XMult0 + XMult1 + XMult2;//极点系数的实现代码///wire signed[11:0] Yin;reg signed[11:0] Yin1,Yin2;always @(posedge clk or posedge rst)if (rst)//初始化寄存器值为0beginYin1 <= 12'd0;Yin2 <= 12'd0;endelsebeginYin1 <= Yin;Yin2 <= Yin1;end//采用移位运算及加法运算实现乘法运算wire signed [23:0] YMult1,YMult2;wire signed [23:0] Ysum,Ydiv;assign YMult1 = {{1{Yin1[11]}},Yin1,11'd0}-{{5{Yin1[11]}},Yin1,7'd0}-{{9{Yin1[11]}},Yin1,3'd0}-{{10{Yin1[11]}},Yin1,2'd0}-{{12{Yin1[11]}},Yin1};  //*1907=2048-128-8-4-1assign YMult2 = {{2{Yin2[11]}},Yin2,10'd0}+{{5{Yin2[11]}},Yin2,7'd0}+{{8{Yin2[11]}},Yin2,4'd0}+ {{11{Yin2[11]}},Yin2,1'd0}+{{12{Yin2[11]}},Yin2};  //*1171=1024+128+16+2+1//第一级IIR滤波器实现代码///assign Ysum = Xout+YMult1-YMult2;	assign Ydiv = {{11{Ysum[23]}},Ysum[23:11]};//2048//根据仿真结果可知,第一级滤波器的输出范围可用9位表示assign Yin = (rst ? 12'd0 : Ydiv[11:0]);//增加一级寄存器,提高运行速度reg signed [11:0] Yout_reg ;always @(posedge clk)Yout_reg <= Yin;assign Yout = Yout_reg;endmodule

顶层模块

module IIRCas (rst,clk,Xin,Yout);input		rst;   //复位信号,高电平有效input		clk;   //FPGA系统时钟,频率为8MHzinput	 signed [11:0]	Xin;  //数据输入频率为8MHZoutput signed [11:0]	Yout; //滤波后的输出数据//实例化第一级滤波器运算模块wire signed [11:0] Y1;FirstTap U1 (.rst (rst),.clk (clk),.Xin (Xin),.Yout (Y1));//实例化第二级滤波器运算模块SecondTap U2 (.rst (rst),.clk (clk),.Xin (Y1),.Yout (Yout));endmodule

仿真结果

FIR和IIR比较

在这里插入图片描述

参考:

如何快速设计一个IIR滤波器

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

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

相关文章

uniapp对接支付宝出现的问题

支付逻辑没问题却出现商家订单参数异常&#xff0c;请重新发起付款 检查发现后端传回来根本没什么问题&#xff0c;检查很久发现需要下载证书放在服务器上 小程序文档 - 支付宝文档中心

谷歌收录网页最快需要多久?

答案是&#xff1a;谷歌收录网页最快是24小时内。 当我们建立新的网站或者为现有网站添加新内容时&#xff0c;都希望这些内容能够尽快被谷歌收录。 但实际上&#xff0c;谷歌的收录时间可能会因各种因素而异。 这篇文章将为您详解相关的知识点。 网站收录的基本过程 如何…

Centos7离线安装ALISQL5.6.32-8

由于公司设备对数据需要大量的读取和查询&#xff0c;开始使用的mysql8&#xff0c;但是未优化的mysql插入和查询及其缓慢&#xff0c;因此我与同事分开研究&#xff0c;优化方案。我负责寻找可替代高效的数据库&#xff0c;然后问同学&#xff0c;发现alisql性能不错&#xff…

软件工程概述

软件工程概述 软件工程指的是应用计算机科学、数学及管理科学等原理&#xff0c;以工程化的原则和方法来解决软件问题的工程&#xff0c;目的是提高软件生产效率、提高软件质量、降低软件成本。 1. 计算机软件 计算机软件指的是计算机系统中的程序及其文档。程序是计算任务的…

测试阶段之冒烟测试

冒烟测试 一般建议1-2个小时完成冒烟测试。 注意冒烟用例不是P1P2&#xff0c;而是其中的部分用例

redis集群架构详解

一、集群架构搭建 1、配置 在一台机器上模拟多台机器搭建redis集群&#xff0c;一个集群代表一台物理机 集群1路径&#xff1a; /usr/local/redis/redis-cluster/cluster1/9001/redis.conf/usr/local/redis/redis-cluster/cluster1/9004/redis.conf/usr/local/redis/redis-…

qt使用QCustomplot绘制cpu和内存使用率图

一、QCustomPlot介绍 QCustomPlot是一个开源的Qt C图表库&#xff0c;用于可视化数据。该库提供了多种类型的可定制的图表&#xff0c;包括散点图、线图、柱状图和等高线图等。它还支持自定义绘制&#xff0c;可以创建任意形状和大小的元素&#xff0c;并使其与其他元素交互。Q…

2023年高教社杯数学建模国赛 赛题浅析

2023年国赛如期而至&#xff0c;为了方便大家尽快确定选题&#xff0c;这里将对赛题进行浅析&#xff0c;以分析赛题的主要难点、出题思路以及选择之后可能遇到的难点进行说明&#xff0c;方便大家尽快确定选题。 难度排序 B>A>C 选题人数 C>A>B (预估结果&…

matlab 计算点云中值

目录 一、概述1、算法概述2、主要函数二、代码示例三、结果展示四、参数解析输入参数输出参数五、参考链接本文由CSDN点云侠原创,原文链接。如果你不是在点云侠的博客中看到该文章,那么此处便是不要脸的爬虫。 一、概述

网络编程套接字 | UDP套接字

前面的文章中我们叙述了网络编程套接字的一些预备知识点&#xff0c;从本文开始我们就将开始UDP套接字的编写。本文中的服务端与客户端都是在阿里云的云服务器进行编写与测试的。 udp_v1 在v1的版本中我们先来使用一下前面讲过得一些接口&#xff0c;简单的构建一个udp服务器…

HarmonyOS/OpenHarmony(Stage模型)应用开发组合手势(一)连续识别

组合手势由多种单一手势组合而成&#xff0c;通过在GestureGroup中使用不同的GestureMode来声明该组合手势的类型&#xff0c;支持连续识别、并行识别和互斥识别三种类型。 .GestureGroup(mode:GestureMode, …gesture:GestureType[]) mode&#xff1a;必选参数&#xff0c;为G…

MP中的字段还可以利用函数来查询拼接sql

//根据value查询GetMapping("getTest")public List<HashMap> getTest() {QueryWrapper<TTest> queryWrapper new QueryWrapper<>();queryWrapper.eq("substr(name,1,2)","99999");List<TTest> list1 testService.list…

【网络通信 -- WebRTC】Open WebRTC Toolkit 环境搭建指南

【网络通信 -- WebRTC】Open WebRTC Toolkit -- OWT-Server 编译安装指南 【1】OWT Server 与 Web Demo 视频会议环境搭建 【1.1】编译 OWT Server 安装依赖 ./scripts/installDepsUnattended.sh编译 scripts/build.js -t all --check 注意若不支持硬件加速则采用如下命令 s…

[CISCN 2019华北Day1]Web1

文章目录 涉及知识点解题过程 涉及知识点 phar反序列化文件读取 解题过程 打开题目&#xff0c;注册用户为admin 进去发现有文件上传的功能&#xff0c;我们随便上传个图片 然后就有下载和删除两个功能 我们尝试抓包下载文件的功能 发现参数可控&#xff0c;我们尝试读取一下…

Navicat15工具连接PostgreSQL15失败

1.错误现象及原因 错误现象&#xff1a; 错误原因&#xff1a; postgresql 15版本中 pg_database 系统表把 datlastsysoid 列删除了&#xff0c;所以造成了此错误。 2.解决方法 &#xff08;1&#xff09;将Navicat工具更新到官网最新版本。 &#xff08;2&#xff09;更换…

划片机实现装片、对准、切割、清洗到卸片的自动化操作

划片机是一种用于切割和分离材料的设备&#xff0c;通常用于光学和医疗、IC、QFN、DFN、半导体集成电路、GPP/LED氮化镓等芯片分立器件、LED封装、光通讯器件、声表器件、MEMS等行业。划片机可以实现从装片、对准、切割、清洗到卸片的自动化操作。 以下是划片机实现这些操作的步…

回复:c#的Winform如何让ComboBox不显示下拉框?https://bbs.csdn.net/topics/392565412

组合框.Parent this;组合框.Items.AddRange(new object[] { "111", "222", "333", "444" });组合框.DropDownHeight 1;组合框.SelectedIndex 0;//组合框.DropDownStyle ComboBoxStyle.Simple; ComboBox 组合框 new ComboBox();Li…

Web framework-Gin(二)

目录 一、Gin 1、Ajax 2、文件上传 2.1、form表单中文件上传(单个文件) 2.2、form表单中文件上传(多个文件) 2.3、ajax上传单个文件 2.4、ajax上传多个文件 3、模板语法 4、数据绑定 5、路由组 6、中间件 一、Gin 1、Ajax AJAX 即“Asynchronous Javascript And XM…

web端调用本地摄像头麦克风+WebRTC腾讯云,实现直播功能

目录 关于直播直播流程直播视频格式封装推流和拉流 获取摄像头和麦克风权限navigator.getUserMedia()MediaDevices.getUserMedia() WebRTC腾讯云快直播 关于直播 视频直播技术大全、直播架构、技术原理和实现思路方案整理 直播流程 视频采集端&#xff1a; 1、视频采集&#…

简述视频智能分析EasyCVR视频汇聚平台如何通过“AI+视频融合”技术规避八大特殊作业风险

视频智能分析EasyCVR视频汇聚平台可以根据不同的场景需求&#xff0c;让平台在内网、专网、VPN、广域网、互联网等各种环境下进行音视频的采集、接入与多端分发。在视频能力上&#xff0c;视频云存储平台EasyCVR可实现视频实时直播、云端录像、视频云存储、视频存储磁盘阵列、录…