【FPGA数字信号处理】- FIR串行滤波器

理解和掌握 FIR 串行滤波器是踏入数字信号处理领域的重要一步。

那么,什么是 FIR 串行滤波器?它是如何工作的?又有着怎样的神奇之处呢?让我们一起揭开它的神秘面纱。

一、FIR 滤波器简介

FIR 滤波器,全称为有限脉冲响应(Finite Impulse Response)滤波器,是数字信号处理系统中最基本的元件之一。

fcec021ef4674ed78106ea128b57fd39.jpg

 与其他滤波器相比,FIR 滤波器具有独特的优势。它可以在保证任意幅频特性的同时具有严格的线性相频特征,这意味着它能够在对信号进行滤波处理时,不会对信号的相位产生扭曲,从而保证了信号的准确性。

此外,FIR 滤波器的单位抽样响应是有限长的,这使得滤波器是稳定的系统,不会像某些无限脉冲响应滤波器那样可能出现不稳定的情况。

二、FIR滤波器的工作原理

FIR滤波器的核心在于输入信号与单位冲击响应函数的卷积运算。

7fcc2a807b824ee3bf0cca67c3cbd70e.jpg

 简单来说,就是将输入信号与滤波器的系数进行逐点相乘,然后将乘积结果累加起来,得到输出信号。

6b5d35a594974a2cb14f04782dde7a17.png

 在并行结构中,同一个时刻,每个输入数据都与对应的滤波器系数相乘,并同时将上一个时刻各项乘法的结果进行求和,这样就能得到滤波结果,每个周期输出一个数据,也就是说滤波计算处理频率与输入信号采样频率一样,但消耗的资源会随着滤波器阶数而增加。

0458ba2157f3410492a597e3b62a673d.webp

 在串行结构中,只需要一个乘法器即可,可以节省资源,为了满足输入信号采样频率下同步输出滤波结果,也就是在一个输入信号周期内,需要完成所有计算,所以对于一个N阶FIR滤波器,考虑到对称系数的特性只要做N/2个乘法运算,也就是计算处理频率是输入信号采样频率的N/2倍。

d194ef6cf85644f584ee1ec5e0b66d4b.jpg

 三、FPGA代码实现

 

module fir_serial
(
input rst,
input clk,
input [11:0] data_in,
output [28:0] data_out
);

reg [12:0] add_a, add_b;
wire [12:0] add_s;

reg [11:0] coe; //12bit量化滤波器系数
wire [24:0] Mout;

reg [2:0] cnt;
reg [11:0] data_reg[15:0];
integer i;

reg [28:0] sum;
reg [28:0] data_out_temp;

always @ (posedge clk or posedge rst)
if (rst) cnt <= 'd0;
else cnt <= cnt + 1'b1;

always @ (posedge clk or posedge rst)
if (rst) begin //清0
data_reg[15] <= 'd0;
for (i=0; i<15; i=i+1'b1)
data_reg[i] <= 'd0;
end else begin
if (cnt == 'd7) begin
for (i=0; i<15; i=i+1'b1) //移位
data_reg[i+1] <= data_reg[i];
data_reg[0] <= data_in;
end
end

always @ (posedge clk or posedge rst)
if (rst) begin
add_a <= 'd0; add_b <= 'd0; coe <= 'd0;
end
else begin
case (cnt)
'd0: begin
add_a <= {data_reg[0][11], data_reg[0]};
add_b <= {data_reg[15][11], data_reg[15]};
coe <= 12'h000;
end
'd1: begin
add_a <= {data_reg[1][11], data_reg[1]};
add_b <= {data_reg[14][11], data_reg[14]};
coe <= 12'hffd;
end
'd2: begin
add_a <= {data_reg[2][11], data_reg[2]};
add_b <= {data_reg[13][11], data_reg[13]};
coe <= 12'h00f;
end
default: begin //第四个周期
add_a <= {data_reg[3][11], data_reg[3]};
add_b <= {data_reg[12][11], data_reg[12]};
coe <= 12'h02e;
end
endcase
end


assign add_s = add_a + add_b;
mult_gen_0 mult_inst
(
.CLK (clk),
.A (coe),
.B (add_s),
.P (Mout)
);
always @ (posedge clk or posedge rst)
if (rst) begin
sum <= 'd0; data_out_temp <= 'd0;
end
else begin
if (cnt == 'd2) begin
data_out_temp <= sum; sum <= {{4{Mout[24]}}, Mout};
end else
sum <= sum + {{4{Mout[24]}}, Mout};
end

assign data_out = data_out_temp;
endmodule


​如果需要更多学习资料和源码,想要学习FPGA实战入门进阶,请阅读下面这篇文章:
 

FPGA入门真的难吗?少走弯路,少踩坑。

 

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

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

相关文章

PointNet++改进策略 :模块改进 | x-Conv | PointCNN, 结合局部结构与全局排列提升模型性能

目录 前言PointCNN实现细节1. X X X-Conv 操作输入输出步骤 2. PointCNN 网络架构层级卷积分类与分割任务 3. 数据增强4. 效率优化 前言 这篇论文介绍了一种名为 PointCNN 的方法&#xff0c;旨在从点云&#xff08;point cloud&#xff09;数据中学习特征。传统卷积神经网络…

【前端】探索webpack3项目build速度优化, 优化个p

文章目录 背景uglifyjs-webpack-pluginwebpack3 压缩混淆js 优化踩坑。结论 背景 webpack3 babel7 uglifyjs-webpack-plugin的项目&#xff0c;build起来是什么体验。 大抵是写了两个月后&#xff0c;发现build时间从120s激增到400s。而这400秒中&#xff0c;有50多秒是Ugli…

江协科技STM32学习- P11 中断系统,EXTI外部中断

&#x1f680;write in front&#x1f680; &#x1f50e;大家好&#xff0c;我是黄桃罐头&#xff0c;希望你看完之后&#xff0c;能对你有所帮助&#xff0c;不足请指正&#xff01;共同学习交流 &#x1f381;欢迎各位→点赞&#x1f44d; 收藏⭐️ 留言&#x1f4dd;​…

Pygame中Sprite类实现多帧动画3-3

4 使用自定义类MySprite 使用自定义类MySprite实现多帧动画的步骤是首先创建MySprite类的实例&#xff0c;之后使用相关函数对该实例进行操作。 4.1 创建MySprite类的实例 创建MySprite类的实例的代码如图12所示。 图12 创建MySprite类的实例的代码 其中&#xff0c;变量dr…

Dagger:Android 和 Java 的快速依赖注入框架

在软件开发中&#xff0c;依赖注入&#xff08;DI&#xff09;是一种设计模式&#xff0c;用于实现控制反转&#xff0c;减少代码耦合&#xff0c;提高模块化。Dagger 是一个由 Google 开发的依赖注入库&#xff0c;专门用于 Android 和 Java 应用程序&#xff0c;以其快速和高…

TiDB-从0到1【完结】

来来回回3个月&#xff0c;TiDB-从0到1系列就此完结。 如果各位读者有时间整个系列阅读并根据内容掌握实操的话&#xff0c;最次也有中级TiDB工程师的水准了。 TiDB-从0到1-体系结构 TiDB-从0到1-分布式存储 TiDB-从0到1-分布式事务 TiDB-从0到1-MVCC TiDB-从0到1-部署篇 TiDB…

通信工程学习:什么是IFMP(Ipsilon流管理协议)

IFMP&#xff1a;Ipsilon流管理协议 IFMP&#xff08;Ipsilon Flow Management Protocol&#xff09;&#xff0c;即Ipsilon流量管理协议&#xff0c;是一种用于网络流量管理的协议。它主要用于IP交换机、IP交换网关或IP主机中&#xff0c;通过控制数据传送&#xff0c;将现有网…

Java代码审计篇 | ofcms系统审计思路讲解 - 篇1 | 环境搭建、路由机制

文章目录 Java代码审计篇 | ofcms系统审计思路讲解 - 篇1 | 环境搭建、路由机制1. 前言2. 项目环境搭建3. 项目路由机制3.1. 1&#xff09;先搜索pom.xml文件&#xff0c;看看使用了什么框架3.2. 2&#xff09;确定是否是spring的路由机制3.3. 3&#xff09;确定自写路由机制的…

Chapter 14 计算机网络基本概述

欢迎大家订阅【Vue2Vue3】入门到实践 专栏&#xff0c;开启你的 Vue 学习之旅&#xff01; 文章目录 前言一、网络的基本概念二、集线器、交换机和路由器三、互连网与互联网四、网络的类型五、互连网的组成1. 边缘部分2. 核心部分 六、网络协议 前言 计算机网络是现代信息社会…

【每日一题】LeetCode 104.二叉树的最大深度(树、深度优先搜索、广度优先搜索、二叉树)

【每日一题】LeetCode 104.二叉树的最大深度&#xff08;树、深度优先搜索、广度优先搜索、二叉树&#xff09; 题目描述 给定一个二叉树 root&#xff0c;我们需要计算并返回该二叉树的最大深度。二叉树的最大深度是指从根节点到最远叶子节点的最长路径上的节点数。 思路分…

极米科技:走出舒适圈,推动数据架构现代化升级 | OceanBase 《DB大咖说》

《DB 大咖说》第 13 期&#xff0c;邀请到了极米科技软件与创新产品线高级架构师施刘凡来进行分享。 在小红书平台上&#xff0c;“是否应将家里的电视升级为投影仪&#xff1f;”这一话题激发了上百万篇笔记的分享与推荐&#xff0c;反映出年轻群体对投影仪的偏好。随着手机、…

ESP32 UDP 05

1.在上一文章基础上修改&#xff0c;文章网址 ESP32-Ethernet-04-CSDN博客 2.基本代码 /* Ethernet Basic ExampleThis example code is in the Public Domain (or CC0 licensed, at your option.)Unless required by applicable law or agreed to in writing, thissoftware…

Apple Intelligence深夜炸场!苹果发布4颗自研芯片,iPhone/iWatch/AirPods大升级

今年 6 月&#xff0c;苹果在 WWDC 上正式推出 Apple Intelligence。消息发布次日&#xff0c;苹果股价在盘中突破 200 美元大关&#xff0c;创 2022 年 11 月 10 日以来最大涨幅&#xff0c;截至收盘&#xff0c;苹果总市值升至 3.18 万亿美元&#xff08;约合人民币 23 万亿&…

通信工程学习:什么是IP-CAN(IP连接接入网)

IP-CAN&#xff1a;IP连接接入网 IP-CAN&#xff08;IP连接接入网&#xff09;是一个通过IP实现用户设备&#xff08;UE&#xff09;与IP多媒体子系统&#xff08;IMS&#xff09;实体之间连通的网络实体和接口的集合。以下是对IP-CAN的详细解释&#xff1a; 一、定义与概述 1…

深度学习实战87-高中数学自适应测试系统研究与应用研发,前后台页面设计

大家好,我是微学AI ,今天给大家介绍一下深度学习实战87-高中数学自适应测试系统研究与应用研发,前后台页面设计。高中数学自适应测试系统旨在通过精准评估学生能力,用最少的题目发现其薄弱环节,并提供定制化的学习计划,帮助学生快速提升成绩。同时,系统结合了AI大模型实现…

WinCC 中对 VBS 进行单步执行调试

以前应该写过文章给各位展示如何在WinCC 中通过自身控件对脚本&#xff08;C、VBS&#xff09;进行脚本诊断和排错。但是也有用户反馈说在编写了一些相对复杂的脚本后&#xff0c;WinCC自身控件无法做到单步调试&#xff0c;也会影响脚本的诊断调试效率。如果能够对WinCC 中的脚…

在Linux中从视频流截取图片帧(ffmpeg )

Linux依赖说明: 说明: 使用到的 依赖包 1. ffmpegsudo apt update sudo apt-get install ffmpeg2. imagemagick (选装) (检测图像边缘信息推断清晰度,如果是简单截取但个图像帧>用不到<)sudo apt-get install imagemagick备注: 指令及相关参数说明核心指令: (作用: 执…

WRF-LES与PALM微尺度气象大涡模拟、PALM静态数据预备、PALM驱动数据预报、PALM模拟

查看原文>>>WRF-LES与PALM微尺度气象大涡模拟及ChatGPT在大气科学领域应用 针对微尺度气象的复杂性&#xff0c;大涡模拟&#xff08;LES&#xff09;提供了一种无可比拟的解决方案。微尺度气象学涉及对小范围内的大气过程进行精确模拟&#xff0c;这些过程往往与天气…

Parsec无法使用、访问、连接、被墙、被封、800报错解决方案 完美平替软件

最近Parsec出现无法使用、报错等问题&#xff0c;话不多说先上解决办法 方案一&#xff1a;在%appdata%/Parsec/config.txt中&#xff0c;添加代理 app_proxy_address 127.0.0.1 app_proxy_scheme http app_proxy true app_proxy_port 你的http代理端口 方案二&#xff1a;…

计算机网络 第2章 物理层

文章目录 通信基础基本概念信道的极限容量编码与调制常用的编码方法常用的调制方法 传输介质双绞线同轴电缆光纤以太网对有限传输介质的命名规则无线传输介质物理层接口的特性 物理层设备中继器集线器一些特性 物理层任务&#xff1a;实现相邻节点之间比特&#xff08;0或1&…