基于FPGA的RC滤波器设计实现

news2024/12/24 8:52:53

目录

简介:

传递函数

FPGA代码实现

总结

 

简介:

RC滤波器的特性基本情况介绍

RC一阶低通滤波介绍;RC滤波器电路简单,抗干扰性强,有较好的低频性能,并且选用标准的阻容元件易得,所以在工程测试的领域中最经常用到的滤波器是RC滤波器。

9372093cbf9d4fd1bdd7b7e2f36e7846.png

这里我们主要认识和介绍低通滤波器。

尝试根据现有的知识,推导以下他的传递函数。

Uo/Ui=wl/wl+r

这里有个许哟注意的地方时标量还是向量的问题。

 

     最主要的原因,这个电路的电容是储能器件,电容左端a点在信号某个时刻的变化,如果要是传递到下一级,需要一个时间,这个时间一般叫时间常数,用τ表示,对于电阻不是储能器件,电阻前端的电流发生变化会立刻传递到后端,如果前级信号的变化传递到后级中间有个延时,就导致后级的信号和前级的信号有一定的相位差。对于理想电容来说,幅值可能没有变化,但是相位可能会有变化。相位的变化可通过反正切函数计算出来。

 

传递函数

     推导一阶滤波器的传递函数,重点介绍标量与向量之间的关系,有个博客写的非常好,可以借鉴过来

     阻抗等于电容的容抗+电阻,这个“+”是向量相加。
1.先计算电容的容抗,容抗值用Xc表示,单位Ω,Xc=1/(2πfc),f是频率,单位Hz,c是电容值,单位F;带入公式计算要用标准单位。

4cbbf3aea8a842b4b5f6ff57db26ee6f.png

 

a9ec97450ef046c3b988a9f23a089583.png

 

 

 

FPGA代码实现

这里我们主要介绍一阶滤波器的实现

主要借鉴代码的代码,实现滤波功能

一阶RC滤波器级联,一阶RC滤波器传递函数为:

Uo1/Ui1=1/(2*pi*RC*f)^2+1)^0.5,

依次迭代可算出级联型RC滤波器传递函数:

Uom/Ui1=1/((2*pi*RC*f)^2+1)^(0.5*m)  式中m表示级联的滤波器阶数

取Uom/Ui1=1/2^0.5来计算时间常数Tc与3dB截止带宽fcut-off之间的对应关系,得到:

Tc=(2^(1/m)-1)^0.5/(2*pi*fcut-off)

 

///

module RC_LP1_module_new(

    input           clk,

    input           clk_enable,

    input           reset,

    input [63:0]    filter_input,

    output reg signed [63:0] filter_output,

    input           in_valid,

    output reg     out_valid,

    input [47:0]    coe_a1,         //coefficients---------------

    input [47:0]    coe_b0

    );

 

reg         [47:0]  local_coe_a1;

reg         [47:0]  local_coe_b0;

reg  signed [63:0]  input_register;

reg         [2:0]   out_valid_counter;

wire signed [104:0] b0_mul1;

wire signed [104:0] a1_mul1;

wire signed [104:0] filter_sum;

 

(* keep = "true"*) reg [47:0] local1_coe_a1;

(* keep = "true"*) reg [47:0] local1_coe_b0;

 

always@(posedge clk or posedge reset)

begin

    if(reset==1) begin

        local_coe_a1 <= 48'd0;

        local_coe_b0 <= 48'd0;

    end

    else begin

        local_coe_a1 <= coe_a1;

        local_coe_b0 <= coe_b0;

        local1_coe_a1 <= local_coe_a1;

        local1_coe_b0 <= local_coe_b0;

    end

end

 

always@(posedge clk or posedge reset)

begin

    if(reset==1) begin

        input_register <= 64'sd0;

        out_valid <= 1'b0;

        out_valid_counter <= 3'd0;

    end

    else

        if(clk_enable==1 && in_valid==1) begin

            input_register <= filter_input;

            if(out_valid_counter == 3)

                out_valid <= 1'b1;

            else begin

                out_valid <= 1'b0;

                out_valid_counter <= out_valid_counter + 1'b1;

            end

        end

        else begin

            input_register <= 64'sd0;

            out_valid <= 1'b0;

            out_valid_counter <= 3'd0;

        end

end

 

always@(posedge clk or posedge reset)

begin

    if(reset==1)

        filter_output <= 64'sd0;

    else

        filter_output <= filter_sum[104:41];

end

 

mult_u41_s64 mult1(

    .A(local1_coe_b0[47:7]),

    .B(input_register),

    .P(b0_mul1)

    );

   

mult_u41_s64 mult2(

    .A(local1_coe_a1[47:7]),

    .B(filter_sum[104:41]),

    .P(a1_mul1)

    );

   

adder_s105_s105 adder1(

    .CLK(clk),

    .A(b0_mul1),

    .B(a1_mul1),

    .S(filter_sum)

    );    

 

edmodule

a8df2cfb3c9b4af094e424058b1c8705.png

 

 

a9ed4ac7c4c6474b83a96d7b0cd3d690.png

 

总结

FPGA实现的话两个乘法器和一个加法器即可,能满足单时钟周期计算出结果。

 

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

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

相关文章

【滤波】平滑

%matplotlib inline#format the book import book_format book_format.set_style()简介 当你考虑未来的数据时&#xff0c;卡尔曼滤波器的性能并不是最优的。例如&#xff0c;假设我们在跟踪飞行器&#xff0c;最新的观测值突然偏离的很离谱&#xff0c;就像这样&#xff08;我…

PHP的pack/unpack

前言&#xff1a;直接参照官网。 PHP: pack - Manual PHP中文手册 PHP中国镜像 php 国内镜像 PHP官方网站 PHP: unpack - Manual PHP中文手册 PHP中国镜像 php 国内镜像 PHP官方网站 1、作用 &#xff08;1&#xff09;pack&#xff1a;将数据打包成二进制字符串。将输入数据…

链表刷题(9-11)

目录 相交链表 环形链表 环形链表Ⅱ 相交链表 力扣 第一种思路&#xff1a;判断尾节点地址是否相同&#xff0c;时间复杂度为O(N^2)。 第二种思路&#xff1a;(节点对齐)记录两个链表节点个数&#xff0c;再根据节点差设置两个快慢指针进行next节点比对。时间复杂度O(N)(3N)…

PHP 税务申报征收系统mysql数据库web结构apache计算机软件工程网页wamp

一、源码特点 PHP 税务申报征收系统 是一套完善的WEB设计系统&#xff0c;对理解php编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开发。 代码下载 https://download.csdn.net/download/qq_41221322/87959340https://downl…

spring boot security之前后端分离配置

前言 spring boot security默认配置有一个登录页面&#xff0c;当采用前后端分离的场景下&#xff0c;需要解决两个问题&#xff1a; 前端有自己的登录页面&#xff0c;不需要使用spring boot security默认的登录页面登录相关接口允许匿名访问 因此需要自定义相关实现。 自…

【C51 --- 单片机学习历程与分享】

51单片机学习历程与分享 开篇 --- 认识单片机1、什么是单片机&#xff1f;2、51单片机主要资源3、STC89C51 芯片简介4、单片机脚位判断5、51单片机的应用领域6、如何学好51单片机&#xff1f;7、参考文献 开篇 — 认识单片机 前言&#xff1a; 1.本专栏适合有一定C语言功底的读…

数据结构与算法:数组和字符串

1 数组 1.1 集合、列表、数组的联系与区别 集合&#xff1a;由一个或多个确定的元素所构成的整体。类型不一定相同、确定、无序、互异。 列表&#xff08;又称线性列表&#xff09;&#xff1a;按照一定的线性顺序&#xff0c;排列而成的数据项的集合。类型不一定相同、有序…

所有独立站都适合做谷歌推广吗?怎么做好谷歌推广?

大家有没有这种困扰&#xff1a;是不是所有的独立站都适合用谷歌来打广告呢&#xff1f;我的行业能不能用Google Ads来推广&#xff1f;如果我刚刚起步&#xff0c;我应该开启哪种类型的广告呢&#xff1f;让我们一起来揭秘吧&#xff01; 如果你是一个独立站卖家&#xff0c;…

用异或计算只出现一次的数字

因为与0异或的都是数字本身&#xff0c;数字本身和数字本身异或是等于0&#xff0c;应用这个定理&#xff0c;我们来做这个题 链接: leetcode用异或计算只出现一次的数字 class Solution { public:int singleNumber(vector<int>& nums) {size_t v 0;for(size_t i …

Git指南 - 刚提的commit 怎么找不到了(游离分支)?

在有一次使用git时&#xff0c;我提交commit后&#xff0c;并未push&#xff0c;然后直接切到了当前分支的某个tag&#xff0c;最后我想切回来的时候&#xff0c;竟然找不到我刚才提交commit的节点了… 关联篇 Git指南 - 你该掌握的那些基础认知和首次配置Git指南 - 项目实战中…

uni-app处理请求发送表单类型的数据

我在本地开发了一个分页的接口 这里 我设置的是 form-data 参数类型 要的是个表单类型的数据 然后呢 我按传统PC端的方式处理了数据 <template><view class "box"><view class"management"></view></view> </template…

QT Creator上位机学习(二)基础布局控件及信号与槽

c# 系列文章目录 文章目录 布局控件信号与槽第二种connect 程序图标使用技巧 布局控件 美化界面的时候&#xff0c;经常需要进行一些控件的布局&#xff0c;这时需要使用一些容器类。 在快捷栏出&#xff0c;也有一些布局设计的选择 如上图&#xff0c;其中涉及到几种编辑…

【图像软件篇】Windows最强大的截图贴图神器-Snipaste的优化设置

【图像软件篇】Windows最强大的截图贴图神器-Snipaste的优化设置 个人用户免费、开源&#xff0c;以及和剪贴板神器Ditto一样简单易用&#xff0c;默认设置上手够快&#xff0c;除了没有长截图和OCR功能&#xff0c;我觉得它已经做到了截图贴图软件的天花板&#xff1b;本文我…

Springboot的配置原理

一、起步依赖–Maven的依赖传递 原始基于Spring框架来运行&#xff0c;需要手动配置很多依赖项&#xff0c;而Springboot简化了基于Spring框架的开发–引入Springboot的起步依赖&#xff0c;里面引入了所有常见的Springboot的依赖&#xff0c;都是通过maven的依赖传递自动的传…

Redisson 延时队列 延时严重问题

延时队列原理我在这篇文章讲了 Redisson 延时队列 原理 详解 - 知乎 十分建议先把原理看了 我们一个项目是做消息推送的&#xff0c; 分钟量达到了几百万。需求是要设置5秒以上的延时推消息。 当初我想了几个方案&#xff1a; 定时器轮询数据库 mq做延时推送 redisson做延时推…

【微服务架构模式】微服务设计模式

这是微服务架构系列文章的第 3 篇 高可用性、可扩展性、故障恢复能力和性能是微服务的特征。您可以使用微服务架构模式来构建微服务应用程序&#xff0c;从而降低微服务失败的风险。 模式分为三层&#xff1a; 应用模式 应用程序模式解决了开发人员面临的问题&#xff0c;例如数…

应用面向对象思想进行Linux内核分析的优化方法

在分析Linux内核时&#xff0c;应用面向对象思想可以帮助我们更好地理解和组织内核代码。虽然Linux内核是用C语言编写的&#xff0c;并没有内置的面向对象机制&#xff0c;但我们可以通过一些方法来应用面向对象思想进行分析。 我这里刚好有嵌入式、单片机、plc的资料需要可以…

在线客服系统哪家好,2024五家常用客服系统权威测评

在线客服系统推荐哪家随着互联网的发展&#xff0c;人们沟通交流方式越来越趋向智能化。很多企业都会选择在线客服系统来提升员工效率和质量&#xff0c;而且还能为企业带来一个强大的销售平台。那么在线客服系统推荐哪家呢&#xff1f;首先我们要知道&#xff0c;在线客服系统…

DINO推理模块实现

如何将一个模型真正的投入应用呢&#xff1f;即我们常说的推理模块&#xff0c;前面博主已经介绍了如何使用DETR进行推理&#xff0c;今天博主则介绍DINO的推理实现过程&#xff1a; 其实在DINO的代码中已经给出了推理模块的实现&#xff0c;这里博主是将其流程进行梳理&#x…

w3af启动后提示“Traceback (most recent call last)”

第一次提示 /usr/bin/env: “python”: 没有那个文件或目录 一看这提示就是python目录没有引用对&#xff0c;所以建一个软链接 软连接参考&#xff1a;每天学命令-ln 软硬链接 | 夜云泊个人博客 命令如下 whereis python3 sudo ln -s /usr/bin/python3 /usr/bin/python 软…