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

这篇具有很好参考价值的文章主要介绍了基于FPGA的RC滤波器设计实现。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

简介:

传递函数

FPGA代码实现

总结

简介:

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

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

基于FPGA的RC滤波器设计实现,FPGA设计,fpga开发

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

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

Uo/Ui=wl/wl+r

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

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

传递函数

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

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

基于FPGA的RC滤波器设计实现,FPGA设计,fpga开发

基于FPGA的RC滤波器设计实现,FPGA设计,fpga开发

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

基于FPGA的RC滤波器设计实现,FPGA设计,fpga开发

基于FPGA的RC滤波器设计实现,FPGA设计,fpga开发

总结

FPGA实现的话两个乘法器和一个加法器即可,能满足单时钟周期计算出结果。文章来源地址https://www.toymoban.com/news/detail-569155.html

到了这里,关于基于FPGA的RC滤波器设计实现的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • m基于FPGA的半带滤波器verilog设计,对比普通结构以及乘法器复用结构

    目录 1.算法描述 2.仿真效果预览 3.verilog核心程序 4.完整FPGA         HBF模块由半带滤波器(HBF)和抽取模块组成。该模块的任务是实现2倍抽取进一步降低信号采样速率。由于HBF的冲激响应h(k)除零点外其余偶数点均为零,所以用HBF实现2倍抽取可以节省一半的运算量,对增强软

    2023年04月08日
    浏览(76)
  • FPGA设计FIR滤波器低通滤波器,代码及视频

    名称:FIR滤波器低通滤波器 软件:Quartus 语言:Verilog/VHDL 本资源含有verilog及VHDL两种语言设计的工程,每个工程均可实现以下FIR滤波器的功能。 代码功能: 设计一个8阶FIR滤波器(低通滤波器),要求截止频率为20KHz,使用线性相位结构。 参数设计方法: 使用matlab软件设计滤

    2024年02月08日
    浏览(49)
  • 基于FPGA的FIR低通滤波器实现(附工程源码),matlab+vivado19.2+simulation

    本文为FPGA实现FIR滤波器仿真过程,附源代码。 提示:以下是本篇文章正文内容,下面案例可供参考 打开MATLAB在命令行窗口输入: fadtool 回车后在滤波器设计界面设置滤波器参数如下 之后点击如图标志,设置定点,在菜单栏\\\"目标(R)\\\"出选择生成对应滤波器系数.COE文件 mat

    2024年02月11日
    浏览(45)
  • CIC滤波器:原理、设计与FPGA开发

    CIC滤波器,全称为累积积分器滤波器(Cascaded Integrator-Comb Filter),是一种数字滤波器,通常在信号处理和通信系统中使用。本文将详细介绍CIC滤波器的原理、设计方法以及如何在FPGA上实现。 一、CIC滤波器原理 CIC滤波器由级联的积分器和组合器组成,其中积分器用于对输入信

    2024年02月04日
    浏览(50)
  • (三)FPGA实现滤波器

     DDS:直接数字式频率合成器,可以根据需求产生不同频率和相位的正弦波数据,通常用于通信系统中的调制解调。 配置过程: 【IP CATALOG】à【modulation DDS complier】 Configuration Options Phase generator and SIN COS LUT 相位和查找表(本实验中选这个) Phase Generator only 只产生相位 SIN CO

    2024年02月16日
    浏览(36)
  • FPGA实现CIC滤波器

    上一节MATLAB CIC滤波器_小小低头哥的博客-CSDN博客介绍了如何使用MATLAB仿真不同要求的CIC滤波器,并对结果进行了分析。这次使用FPGA分别实现单级、多级CIC滤波器。   单级CIC滤波器的实现非常简单。根据 y ( n ) = ∑ k = 0 M − 1 x ( n − k ) = x ( n ) − x ( n − M ) + ∑ k = 0 M − 1

    2024年02月04日
    浏览(36)
  • 升余弦滤波器的FPGA实现

    升余弦滤波器与无码间串扰(一) 升余弦滤波器与无码间串扰(二) 升余弦滤波器的FPGA实现 成形滤波器采用vivado中的FIR ip核实现。滤波器的系数用matlab产生并转成coe文件。 FIR滤波器的输入数据是s_axis_data_tdata,输出数据是m_axis_data_tdata。输入和输出接口均采用AXIS总线,即接

    2024年02月14日
    浏览(39)
  • 孩子都能学会的FPGA:第十六课——用FPGA实现IIR滤波器滤波

    (原创声明:该文是 作者的原创 ,面向对象是 FPGA入门者 ,后续会有进阶的高级教程。宗旨是 让每个想做FPGA的人轻松入门 , 作者不光让大家知其然,还要让大家知其所以然 !每个工程作者都搭建了全自动化的仿真环境,只需要双击 top_tb.bat 文件就可以完成整个的仿真(前

    2024年01月21日
    浏览(56)
  • FIR内插滤波器的FPGA实现(一)-matlab实现

    FIR内插滤波器是一种基本的插值方法,主要有两个步骤: 1)在输入的每一个初始采样中间插入L个零点; 2)插零后的数据经过低通滤波器。 运行结果如图(时域、频域): 我们的目标是把采样频率提升五十倍。 得到的频域图: 可以看出内插零点在频域会实现频谱扩展,因此

    2024年02月03日
    浏览(53)
  • FIR滤波器的FPGA实现【IP核实现版】

    本文使用FPGA来实现FIR滤波器设计,设计中使用的DDS、乘法器与FIR滤波器均采用IP core进行实现,实现效果是将3MHz和4MHz的正弦信号混频后使用FIR低通滤波器滤除7MHz信号得到1MHz的信号。 首先用两个DDS核生成3MHz以及4MHz的正弦波信号。 注意:此处的dds的命名要和代码中对应,系统

    2024年02月04日
    浏览(50)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包