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

目录

简介:

传递函数

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.hqwc.cn/news/4883.html

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

相关文章

GAMES101 笔记 Lecture08 Shading 2(Shading, Pipeline and Texture Mapping)

目录 Specular Term(高光项)Ambient Term(环境光照项)Blinn-Phong Reflection ModelShading Frequencies(着色频率)Shade each triangle(flat shading)在每个三角形上进行着色Shade each vertex (Gouraud shading)(顶点着色)Shade each pixel (Phong shading)Defining Per-Vert…

ES基本操作(JavaAPI篇)

引入jar包依赖 <dependencies><dependency><groupId>org.elasticsearch</groupId><artifactId>elasticsearch</artifactId><version>7.8.0</version></dependency><!-- es客户端 --><dependency><groupI…

Loadrunner怎么实现MD5加密

目录 前言&#xff1a; 1、写一个md5.h文件&#xff0c;将其放入脚本路径下 2、在globals.h中加入#include “md5.h” 3、在Action中写脚本&#xff0c;脚本示例如下&#xff1a; 前言&#xff1a; 在 LoadRunner 中实现 MD5 加密可以通过使用 LoadRunner 提供的函数来完成…

【FPGA零基础学习之旅#9】状态机基础知识

&#x1f389;欢迎来到FPGA专栏~状态机基础知识 ☆* o(≧▽≦)o *☆嗨~我是小夏与酒&#x1f379; ✨博客主页&#xff1a;小夏与酒的博客 &#x1f388;该系列文章专栏&#xff1a;FPGA学习之旅 文章作者技术和水平有限&#xff0c;如果文中出现错误&#xff0c;希望大家能指正…

macOS Ventura 13.5beta4(22G5059d)发布

系统介绍 黑果魏叔 6 月 28 日消息&#xff0c;苹果今日向 Mac 电脑用户推送了 macOS 13.5 开发者预览版 Beta 4 更新&#xff08;内部版本号&#xff1a;22G5059d&#xff09;&#xff0c;本次更新距离上次发布隔了 12 天。 macOS Ventura 带来了台前调度、连续互通相机、F…

TypeScript ~ 掌握基本类型 ②

作者 : SYFStrive 博客首页 : HomePage &#x1f4dc;&#xff1a; TypeScript ~ TS &#x1f4cc;&#xff1a;个人社区&#xff08;欢迎大佬们加入&#xff09; &#x1f449;&#xff1a;社区链接&#x1f517; &#x1f4cc;&#xff1a;觉得文章不错可以点点关注 &…

SQL-每日一题【182.查找重复的电子邮箱】

题目 表: Person 编写一个 SQL 查询来报告所有重复的电子邮件。 请注意&#xff0c;可以保证电子邮件字段不为 NULL。 以 任意顺序 返回结果表。 查询结果格式如下例。 示例 1: 解题思路 前置知识 count&#xff08;&#xff09; 1.count(*) &#xff1a;统计所有的行数&a…

软考01进制转换

文章目录 前言一、二进制1.二进制转十进制2.二进制转十六进制 二、十进制1.十进制转二进制2.十进制转十六进制 二、十六进制1.十六进制转二进制2.十六进制转十进制 总结 前言 比较常用的进制有二进制、十进制、十六进制这是我们的主要学习目标。 一、二进制 二进制由0和1组成&…

单表-DQL

注意&#xff1a;这张图还包含了对于的顺序&#xff0c;先分组再排序&#xff0c;再分页&#xff0c;顺序不能乱 基本查询 # 1.基本查询 # 查询全部行 select * from tb_emp; select id, user_name, password, name, gender, image, job, entry_date, create_time, update_ti…

ZLMediaKit 的安装及使用介绍

ZLMediaKit 介绍 ZLMediaKit是一个基于C开发的开源流媒体服务器。它提供了高性能的音视频处理能力&#xff0c;支持常见的流媒体协议&#xff0c;如RTSP、RTMP、HLS和HTTP-FLV&#xff0c;并且具有低延迟和高并发处理能力。 开源地址&#xff1a;https://github.com/xia-chu/…

【JAVA】十分钟带你了解java的前世今生

个人主页&#xff1a;【&#x1f60a;个人主页】 系列专栏&#xff1a;【初始JAVA】 文章目录 前言JAVA介绍诞生&#x1f52c;名字与图标&#x1f916;发展&#x1f6e9;️未来&#x1fa84; 前言 玩过我的世界的朋友想必对JAVA以及它的图标都很熟悉&#xff0c;在游戏开始画面…

Spring进阶学习(附面试快速答法)

文章目录 1、Bean线程安全问题小总结面试快速答法 2、AOP小总结面试快速答法 3、bean的生命周期小总结面试快速答法 4、循环引用小总结面试快速答法 &#xff15;、SpringMVC的执行流程小总结面试快速答法 6、Springboot自动配置原理小总结面试快速答法 7、Spring框架常见注解面…