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

news2024/9/20 16:39:43

理解和掌握 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.coloradmin.cn/o/2120724.html

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

相关文章

GMT绘图笔记:绘制堆叠三维图

绘制三维图可以更好地表现物理场的空间分布和对比&#xff0c;也有很多的软件工具可以实现这一功能&#xff0c;本专栏主要强调使用GMT绘制。语法也非常简单&#xff0c;实例代码如下&#xff1a; gmt begin tibet_moho_3D png,pdf E600 # 绘制底图 gmt set FORMAT_GEO_MAP d…

【超快解决方法】教资点击打印准考证没反应!!!

首先点击右键【检查】 2.选中控制台 3.点击小红点 4.再点击第二个链接就可以下载下来啦

【Delphi】实现程序屏幕内容防止截图

前言&#xff1a; 有时候&#xff0c;我们做的程序界面内容不希望被截图&#xff0c;那么如何实现呢&#xff1f;其实实现起来非常简单&#xff0c;就是一句话的事。 在主窗口show的时候&#xff0c;调用如下参数即可&#xff01;需要注意的是Delphi中并没有定义WDA_EXCLUDEFRO…

微信加粉计数器/微信加人计数网页版

微信加粉计数器/微信加人计数网页版 计数器支持的vx版本微信计数器特色计数器的定制开发 计数器支持的vx版本 最新版本计数器支持任意版本的微信&#xff0c;在也不用使用指定的版本了 微信计数器特色 目前该计数器采用非hook,非注入&#xff0c;不修改覆盖任何源文件 计数…

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

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

为什么 GitHub 成为开发者的“唯一真爱”?吊打其他代码托管平台

GitHub,这个名字可能已经深深印在了每一个开发者的脑海里。但你有没有想过,为什么 GitHub 能够在激烈的竞争中脱颖而出,成为全球最大、最流行的代码托管平台?其实它的成功背后,有着很多不为人知的细节。今天我们就来聊聊 GitHub 是如何一步步赢得开发者的心,让其他竞争对…

何时何地,你需要提示工程、函数调用、RAG还是微调大模型?

介绍 在快速发展的生成式人工智能领域&#xff0c;某些流行术语已变得司空见惯&#xff1a;“提示工程”、“函数调用”、“RAG”和“微调”&#xff0c;你应该也经常遇到这些术语&#xff0c;但你是否能够理清这些概念之间的关系&#xff1f;这些其实都是一些大模型的应用策略…

OpenGL Texture C++ 预览Camera视频

OpenGL是一个图形API&#xff0c;并不是一个独立的平台。包含了一系列可以操作图形、图像的函数。基于Texture纹理强大的功能&#xff0c;本篇文章实现Android OpenGL Texture C 预览Camera视频流的功能。 项目github地址&#xff1a;https://github.com/wangyongyao1989/WyFFm…

Reflection Llama-3.1 70B:目前最强大的开源大语言模型

Reflection Llama-3.1 70B:目前最强大的开源大语言模型 模型特点性能表现使用建议未来展望 近日,一个名为Reflection Llama-3.1 70B的新型大语言模型(LLM)引起了业界广泛关注。该模型采用了名为"Reflection-Tuning"的创新训练技术,能够自主检测推理过程中的错误并及时…

入门必看!高薪+自由职业的3D建模师有多香?

‌3D建模‌是将现实世界中的物体或场景转化为三维数字模型的过程。这项技术连接着现实与虚拟两个世界&#xff0c;通过3D建模&#xff0c;我们可以将名胜古迹、雕塑艺术品等以三维的形式呈现于互联网&#xff0c;让用户体验到更加真实、立体的视觉感受。3D建模的应用领域广泛&a…

【基于 Spring Boot 的二手交易平台】

构建一个基于 Spring Boot 的二手交易平台是一个涉及多个组件和技术栈的复杂项目。以下是一个基本的框架概述&#xff0c;可以帮助你开始搭建这样一个平台&#xff1a; 技术栈选择 Spring Boot: 用于快速开发 RESTful Web 服务。数据库: MySQL, PostgreSQL, 或其他关系型数据…

华为 HCIP-Datacom H12-821 题库 (15)

有需要题库的可以加下方Q群 V群进行学习交流 1.以下关于 OSPF 路由聚合的描述&#xff0c;错误的是哪一项&#xff1f; A、OSPF 中任意一台路由器都可以进行路由聚合的操作 B、OSPF 有两种路由聚合方式&#xff1a;ABR 聚合和ASBR 聚合 C、路由聚合是指将相同前缀的路由信息聚合…

018.PL-SQL编程—包

我 的 个 人 主 页&#xff1a;&#x1f449;&#x1f449; 失心疯的个人主页 &#x1f448;&#x1f448; 入 门 教 程 推 荐 &#xff1a;&#x1f449;&#x1f449; Python零基础入门教程合集 &#x1f448;&#x1f448; 虚 拟 环 境 搭 建 &#xff1a;&#x1f449;&…

【Prompt Engineering提示:Active-Prompt、方向性刺激提示、PAL(程序辅助语言模型)】

Active-Prompt 思维链&#xff08;CoT&#xff09;方法依赖于一组固定的人工注释范例。问题在于&#xff0c;这些范例可能不是不同任务的最有效示例。为了解决这个问题&#xff0c;Diao 等人&#xff08;2023&#xff09;(opens in a new tab)最近提出了一种新的提示方法&…

Python的情感词典情感分析和情绪计算

一.大连理工中文情感词典 情感分析 (Sentiment Analysis)和情绪分类 (Emotion Classification&#xff09;都是非常重要的文本挖掘手段。情感分析的基本流程如下图所示&#xff0c;通常包括&#xff1a; 自定义爬虫抓取文本信息&#xff1b;使用Jieba工具进行中文分词、词性标…

015.PL-SQL编程—块

我 的 个 人 主 页&#xff1a;&#x1f449;&#x1f449; 失心疯的个人主页 &#x1f448;&#x1f448; 入 门 教 程 推 荐 &#xff1a;&#x1f449;&#x1f449; Python零基础入门教程合集 &#x1f448;&#x1f448; 虚 拟 环 境 搭 建 &#xff1a;&#x1f449;&…

Python专项进阶——初步认识Numpy库

NumPy是Numeric Python的缩写&#xff0c;一个优秀的开源科学计算库。 个人理解&#xff0c;NumPy是一个主要围绕着数值数组对象&#xff08;ndarray&#xff09;&#xff08;或叫做矩阵&#xff09;进行各种操作的对象、函数集合。提供很多实用的数学函数&#xff0c;涵盖线性…

【大数据】Hadoop里的“MySQL”——Hive,干货满满

【大数据】Hadoop里的“MySQL”——Hive&#xff0c;干货满满 文章脉络 Hive架构 HQL 表类型 创建表语法 分区 数据导入导出 函数 内置函数 UDF Java Python 在阅读本文前&#xff0c;请确保已经对Hadoop的三大组件&#xff08;HDFS、MapReduce、YARN&#xff09;有…

启动动效流程梳理(一)

因为项目涉及一些启动相关的方案&#xff0c;以及平常处理问题的时候会遇到很多启动响应的问题&#xff0c;所以对启动动效的拉起流程进行一个全面的梳理&#xff0c;同时也借此即会对U版本的动效流程做一个初步的了解吧。 startActivityUnchecked&#xff1a; 启动的流程就先不…

Windows10 如何配置python IDE

Windows10 如何配置python IDE 前言Python直接安装&#xff08;快速上手&#xff09;Step1.找到网址Step2.选择版本&#xff08;非常重要&#xff09;Step3. 安装过程Step4. python测试 Anaconda安装&#xff08;推荐&#xff09;Step1. 找到网址Step2. 下载anacondaStep3. 安装…