0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

基于matlab FPGA verilog的FIR滤波器设计

FPGA学习交流 来源:互联网 作者:佚名 2018-06-08 09:41 次阅读


203537ag09vfggf80289rg.png


本例程实现8阶滤波器,9个系数,由于系数的对称性,h(0)=h(8),h1(1)=h(7),h(2)=h(6),h(3)=h(5),h(4)为中间单独一个系数。根据公式:203540r0khhz1gypbzzey1.png


实现框图:

203538ahze28diee2n8ueh.png



203538b2c33032tdjdtd2r.png



推导出当系数N为偶数时,例如N=4:y(n)=h(0)*{x(0)+x(n-3)}+h(1)*{x(n-1)+x(n-2)}

当系数N为奇数时,例如N=5:

y(n)=h(0)*{x(0)+x(n-1)}+h(1)*{x(n-1)+x(n-3)}+h(2)*x(n-2)


1、用matlab生成和量化滤波器系数

203539zlmaen6dihdlvkoi.png


设置参数后,点击“Design Filter”按钮,“file”—“export”,把滤波器系数导出到workspace,如下图:

203539gi83i88dj88mqxd2.png



执行命令:Num=Num’ ,把滤波器系数拷贝到文件COFFICIENT.dat中。

量化系数:在matlab中运行quantization.m

2、说明

用matlab程序sin_1MHz_gen.m生成正弦波波形表,改变变量f0 = 1.5e6可以生成不同频率的波形。把第一个周期的波形数据存入signal_1m.dat文件中,存入的数据个数为Fs/Fo的最小正整数之比的分子,比如Fs=25MHz,Fo=0.3MHz,Fs/Fo=250/3(Fs=25/24MHz),则存入文件signal_1m.dat的波形数据个数为开头的250个数据。相应的signal_gen0.v中的语句if(i0<50)相应的改为if(i0<250)。仿真时signal_1m.dat放在仿真目录下

3、滤波器的multisim仿真

运行matlab,用sin_1MHz_gen.m产生5MHz(f0 =5e6)正弦波信号,Fs/Fo=5,把数据hex_sin_data的前5个数据存入signal_1m.dat文件,相应的signal_gen0.v中的语句if(i0<50)相应的改为if(i0<5)。

仿真的波形如下图(fir滤波器的输入输出信号):

203539zz6zcgp2f8rqpr23.png



运行matlab,用sin_1MHz_gen.m产生1MHz(f0 =1e6)正弦波信号,Fs/Fo=25,把数据hex_sin_data的前5个数据存入signal_1m.dat文件,相应的signal_gen0.v中的语句if(i0<5)相应的改为if(i0<25)。

仿真的波形如下图(fir滤波器的输入输出信号):

203540jihbwh92xi8bwpii.png


由此可见FIR对带外信号起到衰减的作用。

部分代码:

//Date :2012-5-27
//Description : 8 阶FIR滤波器 ,通带2MH,阻带8MHz ,带外衰减80dB,通带波动1dB
//Uesedfor
//Taobao :
//E-mail :2352517093@qq.com
//==========================================================================
`timescale 1 ns / 1 ns

module fir_filter
(
i_fpga_clk ,
i_rst_n ,
i_filter_in,
o_filter_out
);

input i_fpga_clk ; //25MHz
input i_rst_n ;
input signed [7:0] i_filter_in ; //数据速率25Mh
output reg signed [7:0] o_filter_out; //滤波输出

//==============================================================
//8阶滤波器系数,共9个系数,系数对称
//==============================================================
wire signed[15:0] coeff1 = 16'd239 ;
wire signed[15:0] coeff2 = 16'd1507;
wire signed[15:0] coeff3 = 16'd4397;
wire signed[15:0] coeff4 = 16'd7880;
wire signed[15:0] coeff5 = 16'd9493;

//===============================================================
//延时链
//===============================================================
reg signed [7:0] delay_pipeline1 ;
reg signed [7:0] delay_pipeline2 ;
reg signed [7:0] delay_pipeline3 ;
reg signed [7:0] delay_pipeline4 ;
reg signed [7:0] delay_pipeline5 ;
reg signed [7:0] delay_pipeline6 ;
reg signed [7:0] delay_pipeline7 ;
reg signed [7:0] delay_pipeline8 ;

always@(posedge i_fpga_clk or negedge i_rst_n)
if(!i_rst_n)
begin
delay_pipeline1 <= 8'b0 ;
delay_pipeline2 <= 8'b0 ;
delay_pipeline3 <= 8'b0 ;
delay_pipeline4 <= 8'b0 ;
delay_pipeline5 <= 8'b0 ;
delay_pipeline6 <= 8'b0 ;
delay_pipeline7 <= 8'b0 ;
delay_pipeline8 <= 8'b0 ;
end
else
begin
delay_pipeline1 <= i_filter_in     ;

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • FPGA
    +关注

    关注

    1600

    文章

    21281

    浏览量

    592869
  • matlab
    +关注

    关注

    175

    文章

    2917

    浏览量

    228412
  • 滤波器
    +关注

    关注

    158

    文章

    7314

    浏览量

    174718
收藏 人收藏

    评论

    相关推荐

    基于FPGAFIR滤波器设计与实现

    本帖最后由 eehome 于 2013-1-5 09:50 编辑 基于FPGAFIR滤波器设计与实现   文章研究基于FPGA、采用分布式算法实现
    发表于 08-11 15:32

    基于FPGAFIR滤波器IP仿真实例

    基于FPGAFIR滤波器IP仿真实例 AT7_Xilinx开发板(USB3.0+LVDS)资料共享 腾讯链接:https://share.weiyun.com/5GQyKKc 百度网盘链接
    发表于 07-16 17:24

    并行FIR滤波器Verilog设计

    滤波器系数,量化后应用到FPGA设计中。MATLAB提供了基于窗函数设计法的fir1函数、设计任意响应滤波器
    发表于 09-25 17:44

    数字滤波器-IIR滤波器原理介绍&Verilog HDL设计

    ,功能强大、界面便捷。之前用于设计FIR滤波器,这两个工具也可以用于设计IIR滤波器。本系列主要是讲述FPGA设计,不详细讨论上述函数及工具的使用,具体情况可以的
    发表于 09-27 09:22

    fir滤波器的设计和实现

    对于fir滤波器,已经在前面的文章中记录了仿制DIY&关于MATLAB滤波器设计工具的使用心得记录),其设计和实现都非常简单。如果在嵌入式系统中可以满足且有必要实时iir运算,那么
    发表于 12-22 08:29

    基于MATLAB与QUARTUS II的FIR滤波器设计与验

    基于MATLAB与QUARTUS II的FIR滤波器设计与验证 FIR滤波器是一种应用广泛的基本数字信号处理元件。
    发表于 05-13 17:16 53次下载

    MATLAB设计FIR滤波器的方法

    MATLAB设计FIR滤波器的方法 摘  要 介绍了利用MATLAB信号处理工具箱进行FIR滤波器
    发表于 01-16 18:12 1.5w次阅读
    用<b class='flag-5'>MATLAB</b>设计<b class='flag-5'>FIR</b><b class='flag-5'>滤波器</b>的方法

    基于MATLAB与QUARTUS II的FIR滤波器设计与验

    基于MATLAB与QUARTUS II的FIR滤波器设计与验证 1 引言    FIR数字滤波器能够满足
    发表于 12-12 11:23 2419次阅读
    基于<b class='flag-5'>MATLAB</b>与QUARTUS II的<b class='flag-5'>FIR</b><b class='flag-5'>滤波器</b>设计与验

    基于MATLABFPGAFIR低通滤波器的设计

    充分利用有限冲击响应数字滤波器(Finite Impulse Response digital filter ,FIR)系数的对称特性,借助于MATLAB语言和现场可编程门阵列(FPGA
    发表于 08-05 14:23 82次下载
    基于<b class='flag-5'>MATLAB</b>及<b class='flag-5'>FPGA</b>的<b class='flag-5'>FIR</b>低通<b class='flag-5'>滤波器</b>的设计

    基于MATLABFPGAFIR滤波器设计与仿真

    数字滤波器是数字信号处理领域内的重要组成部分。FIR滤波器又以其严格的线性相位及稳定性高等特性被广泛应用。本文结合MATLAB工具软件介绍了FIR
    发表于 09-25 11:34 120次下载
    基于<b class='flag-5'>MATLAB</b>与<b class='flag-5'>FPGA</b>的<b class='flag-5'>FIR</b><b class='flag-5'>滤波器</b>设计与仿真

    基于matlabfpgaFIR滤波器设计

    基于matlabfpgaFIR滤波器设计,有兴趣的同学可以下载学习
    发表于 04-27 15:51 56次下载

    基于FPGAFIR滤波器设计与实现

    基于FPGAFIR滤波器设计与实现,下来看看
    发表于 05-10 11:49 38次下载

    基于MATLABFIR滤波器设计与滤波

    基于MATLABFIR滤波器设计与滤波
    发表于 12-14 22:08 63次下载

    FIR滤波器MATLABFPGA设计

    数字滤波器从实现结构上划分,有FIR和IIR两种。FIR的特点是:线性相位、消耗资源多;IIR的特点是:非线性相位、消耗资源少。由于FIR系统的线性相位特点,设计中绝大多数情况都采用
    的头像 发表于 04-24 14:40 2574次阅读

    串行FIR滤波器MATLABFPGA实现

    本文介绍了设计滤波器FPGA实现步骤,并结合杜勇老师的书籍中的串行FIR滤波器部分进行一步步实现硬件设计,对书中的架构做了简单的优化,并进行了仿真验证。
    的头像 发表于 05-24 10:56 589次阅读
    串行<b class='flag-5'>FIR</b><b class='flag-5'>滤波器</b><b class='flag-5'>MATLAB</b>与<b class='flag-5'>FPGA</b>实现