精华内容
下载资源
问答
  • 本文基于工程实际出发,在信号处理速率要求不且滤波器阶数较的情况下,提出了一种基于LPM参数化宏功能模块的FIR滤波器设计方法,具有一定的工程实用价值。
  • 基于FPGA高阶FIR滤波器的实现.pdf
  • 基于FPGA的高阶FIR滤波器设计.pdf
  • 高阶FIR滤波器的计算机设计与FPGA实现.pdf
  • 介绍了一种适用于在强干扰、关键...软件上通过从A/D读取数字化后的信号,再进行高阶FIR滤波,剔除了干扰信号。通过FIR滤波在数据采集系统中的运用,采集系统可以较传统数据系统有更高的采集精度和更强的抗干扰能力。
  • 基于分布式算法的高阶FIR滤波器及其FPGA实现.pdf
  • 基于FPGA的高阶FIR滤波器设计 (1).pdf
  • 基于FPGA的高阶FIR滤波器强抗干扰数据采集系统.pdf
  • 基于MA型分布式算法的高阶FIR滤波器设计及其FPGA实现.pdf
  • 把计算机工程与应用 基于分布式算法的高阶滤波器及其实现 李书华曾以成 湘潭大学光电工程系湖南湘潭 跎
  • 研究了一种采用FPGA实现32阶FIR数字滤波器硬件电路方案;讨论了窗函数的选择、滤波器的结构以及系数量化问题;阐述了FIR滤波器的FPGA实现,各模块的设计以及如何优化硬件资源,提高运行速度等问题。实验结果表明了该...
  • 设计了一种用于数字下变频的256分布式FIR滤波器。通过分析分布式FIR滤器结构给实现电路所需资源和运算速度带来的影响,确定了适用于Cyclone III系列FPGA的实现结构。在Cyclone III系列EP3C40F484C6N芯片上实现该...
  • FIR滤波器

    万次阅读 多人点赞 2018-12-21 15:57:27
    FIR滤波器是非递归型滤波器的简称,又叫有限长单位冲激响应滤波器。带有常系数的FIR滤波器是一种LTI(线性时不变)数字滤波器。冲激响应是有限的意味着在滤波器中没有发反馈。长度为N的FIR输出对应于输入时间序列x(n)...

    1.原理

    FIR滤波器是非递归型滤波器的简称,又叫有限长单位冲激响应滤波器。带有常系数的FIR滤波器是一种LTI(线性时不变)数字滤波器。冲激响应是有限的意味着在滤波器中没有发反馈。长度为N的FIR输出对应于输入时间序列x(n)的关系由一种有限卷积和的形式给出,具体形式如下:

                                                                 

    直接形式FIR滤波器图解:

                                                           

    上式表达的是一个N-1阶的FIR滤波器,它有N个抽头(系数)。因此有N个乘法器,N-1个累加器组成。每一个抽头需要消耗逻辑资源的乘法器累加器( Mac )单元。

    输入信号是有时间性的,随着时间的改变而改变,FIR滤波器最终的输出是各个时刻的输入乘以相应的权重(系数),然后进行叠加输出:

               


    FIR数字滤波器“移动平均数”为例子:

    “移动平均数”就是按我们事先设定的信号个数将输入信号加以平均。譬如,如果我们按每4个信号就做一次平均,那么这个4点的“移动平均数”滤波器就如下图所示:

                                 

    下图是经过11点和51点“移动平均数”滤波器过滤的信号图:

                                           

    “移动平均数”滤波器的频率响应如下图所示:

                                           

    如上图所示,随着点数的增加,滚降(ROLLOFF)变陡了,但对旁瓣(sidelobe,衰减部分)的高低影响不大。但是如果我们考虑对滤波器的每个系数采用不同的权重(加权),而不是像“移动平均数”滤波器那样,用相同的权重(1/4,对4点“移动平均数”滤波器来说),那么可以期待旁瓣的大小会大大的降低。

    对系数采用不同权重的滤波器,我们可以用下面的数学公式来表达:

                                  

    2.FPGA实现fir滤波器

    2.1在MATLAB中输入fdatool即可打开滤波器设计工具,如图7所示。里面可以设置滤波器的类型,采样频率,截止频率等。本设计设置的参数如图所示。

    然后将此滤波器系数导出,然后用以下命令将系数放大、取整:

    >> Num=round(Num*256)//将系数放大并取整

    num=[ 5    17    43    63    63    43    17     5]; 

    本设计用于仿真的输入波形是2个正弦波叠加而成,分别是5HZ、45HZ。

    Fs = 1000; %采样频率决定了两个正弦波点之间的间隔
    N = 256; %采样点数
    N1 = 0 : 1/Fs : N/Fs-1/Fs;
    s = cos(5*2*pi*N1) + cos(45*2*pi*N1) ;%
    fidc = fopen('mem.txt','wb');  %将结果写入mem.txt文件,便于modesim使用
    
    for x = 1 : N
        A = round(s(x)*20);%放大
       if (A >= 0)
          bin_x = dec2bin(A, 8);        % 正数的反码和补码都和原码一样,转换位8位
          fprintf(fidc,'%s\n',bin_x);
       else
          bin_x = dec2bin(2^8 + A, 8);
          fprintf(fidc,'%s\n',bin_x);
       end
    end 
    
    fclose(fidc);
    

    2.verilog

    module fir(clk,rst,din,dout,ordy);
     input clk;
     input rst;
     input [7:0] din;
     output [15:0] dout;
     output ordy;
     //matlab fir生成系数 * 256  该滤波器采样率为100Hz,截止频率为10Hz
     parameter coeff1=8'd5,coeff2=8'd17,coeff3=8'd43,coeff4=8'd63,coeff5=8'd63,coeff6=8'd43,coeff7=8'd17,coeff8=8'd5;
     //8个寄存器
     reg  signed [7:0]  sample_1;
     reg  signed [7:0]  sample_2;
     reg  signed [7:0]  sample_3;
     reg  signed [7:0]  sample_4;
     reg  signed [7:0]  sample_5;
     reg  signed [7:0]  sample_6;
     reg  signed [7:0]  sample_7;
     reg  signed [7:0]  sample_8;
     
     reg [18:0] dout;
     reg ordy;
     //输入数据,移位寄存
     always @(posedge clk )
       begin
            if(rst)
    		   begin
    		        sample_1 <= 8'd0;
    				sample_2 <= 8'd0;
    				sample_3 <= 8'd0;
    				sample_4 <= 8'd0;
    				sample_5 <= 8'd0;
    				sample_6 <= 8'd0;
    				sample_7 <= 8'd0;
    				sample_8 <= 8'd0;
    		   end
    		else
    		   begin
    		        sample_1 <= din;
    				sample_2 <= sample_1;
    				sample_3 <= sample_2;
    				sample_4 <= sample_3;
    				sample_5 <= sample_4;
    				sample_6 <= sample_5;
    				sample_7 <= sample_6;
    				sample_8 <= sample_7;//8个周期完成移位
    		   end
       end
     //调用ip,执行乘法
     wire [15:0] p[8:1];
     mult_8 u1 (
      .CLK(clk),  // input wire CLK
      .A(sample_1),      // input wire [7 : 0] A
      .B(coeff1),      // input wire [7 : 0] B
      .P(p[1])      // output wire [15 : 0] P 设置pipline stage 为3,表示3级延时
    );
     mult_8 u2 (
      .CLK(clk),  // input wire CLK
      .A(sample_2),      // input wire [7 : 0] A
      .B(coeff2),      // input wire [7 : 0] B
      .P(p[2])      // output wire [15 : 0] P
    );
     mult_8 u3 (
      .CLK(clk),  // input wire CLK
      .A(sample_3),      // input wire [7 : 0] A
      .B(coeff3),      // input wire [7 : 0] B
      .P(p[3])      // output wire [15 : 0] P
    );
     mult_8 u4 (
      .CLK(clk),  // input wire CLK
      .A(sample_4),      // input wire [7 : 0] A
      .B(coeff1),      // input wire [7 : 0] B
      .P(p[4])      // output wire [15 : 0] P
    );
     mult_8 u5 (
      .CLK(clk),  // input wire CLK
      .A(sample_5),      // input wire [7 : 0] A
      .B(coeff5),      // input wire [7 : 0] B
      .P(p[5])      // output wire [15 : 0] P
    );
     mult_8 u6 (
      .CLK(clk),  // input wire CLK
      .A(sample_6),      // input wire [7 : 0] A
      .B(coeff6),      // input wire [7 : 0] B
      .P(p[6])      // output wire [15 : 0] P
    );
     mult_8 u7 (
      .CLK(clk),  // input wire CLK
      .A(sample_7),      // input wire [7 : 0] A
      .B(coeff7),      // input wire [7 : 0] B
      .P(p[7])      // output wire [15 : 0] P
    );
     mult_8 u8 (
      .CLK(clk),  // input wire CLK
      .A(sample_8),      // input wire [7 : 0] A
      .B(coeff8),      // input wire [7 : 0] B
      .P(p[8])      // output wire [15 : 0] P
    );
     //加法第一级
     wire [16:0] s1 [4:1];//加法器的延时为2
     add_16 a1 (
      .A(p[1]),      // input wire [15 : 0] A
      .B(p[2]),      // input wire [15 : 0] B
      .CLK(clk),  // input wire CLK
      .S(s1[1])      // output wire [16 : 0] S
    );
     add_16 a2 (
      .A(p[3]),      // input wire [15 : 0] A
      .B(p[4]),      // input wire [15 : 0] B
      .CLK(clk),  // input wire CLK
      .S(s1[2])      // output wire [16 : 0] S
    );
     add_16 a3 (
      .A(p[5]),      // input wire [15 : 0] A
      .B(p[6]),      // input wire [15 : 0] B
      .CLK(clk),  // input wire CLK
      .S(s1[3])      // output wire [16 : 0] S
    );
     add_16 a4 (
      .A(p[7]),      // input wire [15 : 0] A
      .B(p[8]),      // input wire [15 : 0] B
      .CLK(clk),  // input wire CLK
      .S(s1[4])      // output wire [16 : 0] S
    );
     //加法第二级
     wire [17:0] s2 [2:1];
     add_17 a21 (
      .A(s1[1]),      // input wire [16 : 0] A
      .B(s1[2]),      // input wire [16 : 0] B
      .CLK(clk),  // input wire CLK
      .S(s2[1])      // output wire [17 : 0] S
    );
     add_17 a22 (
      .A(s1[3]),      // input wire [16 : 0] A
      .B(s1[4]),      // input wire [16 : 0] B
      .CLK(clk),  // input wire CLK
      .S(s2[2])      // output wire [17 : 0] S
    );
     //加法第三级
     wire [18:0] s3;
     add_18 a31 (
      .A(s2[1]),      // input wire [17 : 0] A
      .B(s2[2]),      // input wire [17 : 0] B
      .CLK(clk),  // input wire CLK
      .S(s3)      // output wire [18 : 0] S
    );
     //计数
     reg [4:0] counter;
     always @(posedge clk)
      begin
          if(rst)
    	    begin
    		   counter <= 5'd0;
    		   dout <= 19'd0;
    		   ordy <= 1'b0;
    		end
    	  else if(counter == 17)
    	    begin
    	       dout <= s3;
    		   ordy <= 1'b1;
    		end
    	  else
    	       begin
    		       dout <= 19'd0;
    			   counter <= counter + 1'b1;
    		   end
      end
    endmodule

    由于抽头系数N=8,滤波的效果不是太好,可以采用更高阶数的fir滤波器,这里只是做个演示,有何错误之处还请指教!!

    展开全文
  • 基于FPGA的高速高阶FIR滤波器设计;基于FPGA的高速高阶FIR滤波器设计
  • 通过ZYBOZ7开发板实现了分布式结构的FIR滤波器,实现了AD输入两路信号,通过开关输入可以分别单路输出、相加、相乘、相加后滤波、相乘后滤波的功能。

    摘要

    通过ZYBOZ7开发板实现了分布式结构的FIR滤波器,实现了AD输入两路信号,通过开关输入可以分别单路输出、相加、相乘、相加后滤波、相乘后滤波的功能。

    一、设计目标

    设计基于FPGA的分布式结构的FIR滤波器,实现对输入信号的采集、滤波和输出。

    二、 设计方案

    1.硬件

    材料型号规格
    ZyboZ7开发板zynq-7000xc7z020clg400
    DAPmodDA316位串行/类SPI接口
    AD拓展接口--

    实物图:
    在这里插入图片描述

    2.系统流程图

    信号发生器1
    信号发生器2
    AD
    FIR核
    DA
    示波器

    三、具体实现步骤

    1.XADC的使用

    在这里插入图片描述
    XADC包括一个双12位、1兆每秒采样(MSPS) ADC和片上ADC传感器。上图显示了XADC的框图。双重adc支持多种操作模式,例如,外部触发和同步。支持单极和差分输入。adc最多可以访问17个外部模拟输入通道。
    由数据手册可知,ADC由两种操作模式:事件触发和连续转换模式。连续转换模式会在上次转换完成后继续下一次转换,默认一次转换需要26个ADCCLK;事件触发模式使用外部信号上升沿触发,启动一次转换。因为需按照固定采样率采样,故选择事件触发模式,使用100K信号触发,故采样率为100k。同时配置XDAC的时钟分频系数为4,clk为100MHz,所以ADCCLK实际大约为25MHz。
    ADC的通道采样模式有四种:双ADC、独立ADC、单通道、多通道序列采样。因为本文须同时对两路信号信号进行采样,所以选择双ADC的模式,此模式下,在被外界信号触发后,两路ADC同时开始转换,并将结果保存的寄存器中。
    在这里插入图片描述
    ADC的接口可以配置为DRP(Dynamic Reconfiguration Port)和AXI,因为本文没有使用到PS部分,所以使用DRP接口。DRP接口读写时序如上图所示。
    在这里插入图片描述
    ADC的通道选择AD7和AD15,XADC引出如下引脚。查询时序图每次转换完成时会有eoc信号上升沿,channel会在转换完成时输出通道地址(AD7地址为7’h17,AD15地址为7’h1f),因为采用双ADC模式,所以channel只会输出AD7的地址。为了在每次转换完成时读取两通道AD的值,故编写XADC_wrapper.v封装了一层。编写如下状态机实现一次eoc信号触发两通道采样结果的读取:

    Eoc转换完成信号
    ToReadAD7
    WaitAD7
    ToReadAD15
    WaitAD15

    仿真结果如下:
    在这里插入图片描述
    代码整理好后会上传到Github。

    2.PmodDA3的调试

    在这里插入图片描述

    Pmod DA3是一个基于Analog Devices AD5541A的16位数字模拟转换器,参考电压为2.5V,其单端SMA输出口能够将从类SPI接口所获得的信息转换成一个清晰、有保障的单调模拟输出。
    为了控制PmodDA3,需要编写一个并转串行的模块,此模块的外部接口如下图所示:输入16为数据,在DA_drdy信号上升沿时将数据读入并转化为串行后通过Pmod接口发送给DA模块。
    在这里插入图片描述
    参考AD5541A用户手册的时序图编写并转串模块,SCK为发送数据的时钟,其由clk分频得到,本文配置其为25Mhz;_CS为片选信号,_CS信号拉低时,DA会在下个SCLK的上升沿读取DIN信号作为信号最高位(DB15),每个SCLK读取一个二进制位,16个上升沿读取完成,_CS信号置高。_LDAC信号为装载信号,在数据传输完成后拉低,触发DA模块内部数据装载到DAC单元实现模拟信号输出。
    在这里插入图片描述
    编写状态机实现上述时序:

    DA_drdy信号触发
    Start
    Idle
    SendData
    LoadData

    仿真结果:
    在这里插入图片描述
    编写个小程序:定义 reg[15:0] counter=0,每来一个clk ,counter+100,到65535溢出。如此就可以实现控制DA生成锯齿波,嘿嘿!
    在这里插入图片描述

    3.Fir滤波器

    - 系统自带的IP核

    - Matlab生成DA滤波器

    4.开关控制

    开关控制较为简单,顶层模块定义[3:0] sw输入信号,对其分配管脚,通过case(sw)语句块实现更改开关状态切换功能。

    按键状态功能
    0001AD7单路输出
    0010AD15单路输出
    0011两路相乘
    1011两路相加
    0111两路相乘滤波
    1111两路相加滤波

    实现代码如下:

    //Control Logic
    parameter[3:0]   OnlyAd7=4'b0001; 
    parameter[3:0]   OnlyAd15=4'b0010;
    parameter[3:0]   Ad15_AD7_mlt=4'b0011; 
    parameter[3:0]   Ad15_AD7_add=4'b1011; 
    parameter[3:0]   Ad15_AD7_mlt_Fir=4'b0111;
    parameter[3:0]   Ad15_AD7_add_Fir=4'b1111;
    always@(posedge clk)
    begin
           case(sw)
               OnlyAd7:
                   begin
                      da_indata<=_DataAD7;
                      da_invalid<=Data_rdy;
                   end
               OnlyAd15:
                   begin
                      da_indata<=_DataAD15;
                      da_invalid<=Data_rdy;                
                   end
               Ad15_AD7_mlt:
                   begin
                       DataAD7=_DataAD7;
                       DataAD15=_DataAD15;
                       da_indata=DataAD15[15:8]*DataAD7[15:8]; 
                       da_invalid<=Data_rdy;                   
                   end
               Ad15_AD7_add:
                       begin
                           DataAD7=_DataAD7;
                           DataAD15=_DataAD15;
                           da_indata=DataAD15[15:1]+DataAD7[15:1];
                           da_invalid<=Data_rdy;               
                       end
               Ad15_AD7_mlt_Fir:
                   begin
                     DataAD7=_DataAD7;
                     DataAD15=_DataAD15;
                     fir_indata=DataAD15[15:8]*DataAD7[15:8]; 
                     fir_invalid<=Data_rdy;
                     da_indata<=(fir_outdata<<2);
                     da_invalid<=fir_outvalid; 
                     da_invalid<=Data_rdy;                 
                   end
               Ad15_AD7_add_Fir:
                   begin
                     DataAD7=_DataAD7;
                     DataAD15=_DataAD15;
                     fir_indata=DataAD15[15:1]+DataAD7[15:1];
                     fir_invalid<=Data_rdy;
                     da_indata<=(fir_outdata<<2);
                     da_invalid<=fir_outvalid; 
                     da_invalid<=Data_rdy;                   
                   end
               default:
                   begin
                     da_indata<=_DataAD7;
                     da_invalid<=Data_rdy;    
                   end
           endcase    
    end   
    

    四、总结

    总耗时3周,系统实现了AD输入两路信号,通过开关输入可以分别单路输出、相加、相乘、相加后滤波、相乘后滤波的功能。缺点是滤波器设计截至频率和实际测试截至频率不同,大约相差10倍,至今未找到原因在哪。
    因为Fir核不是自己编写的,所以整体难度一般。主要是通过此项目对ZYNQ的FPGA部分进行入门学习,个人感觉开发过程中除了需要Verilog语言基础,仿真和Debug方法尤为重要。
    欢迎和各位交流分享

    展开全文
  • FIR滤波器的FPGA实现

    千次阅读 2018-04-18 16:21:33
    转载自:https://www.cnblogs.com/kl2blog/p/7490499.html  在时域中,FIR滤波器的输入/输出就是一个输入信号与单位脉冲相应的卷积。...设计FIR滤波器就是要找到N个系数。N-1滤波器通常需要N个系数描...

    转载自:https://www.cnblogs.com/kl2blog/p/7490499.html

      在时域中,FIR滤波器的输入/输出就是一个输入信号与单位脉冲相应的卷积。离散方程为y(n)=x(n)*h(n)=∑x(k)h(n-k)=∑h(k)x(n-k),其中y(n)为滤波输出,x(n)为采样数据,h(n)为滤波抽头系数.设计FIR滤波器就是要找到N个系数。N-1阶滤波器通常需要N个系数描述,通常需要N个乘法器和N-1个2输入加法器实现。根据FIR表达式,滤波器实质上就是进行乘累加运算,乘累加的次数由滤波器阶数决定。其串行结构如图

    系数表的产生我们利用matlab的FDATool来完成。

      首先打开matlab的FDATool工具,选择一个38阶的带通滤波,利用窗函数法,窗口类型为kaiser,BETA设置为3.4,通带频率为10Hz~20Hz。采样频率100Hz。

     

    设置好之后点击Design Filter并保存为.fda文件。之后在simulation环境下,添加该设计,另外使用y=sin(5t)+sin(15t)+sin(30t)作为输入信号,开始运行并查看滤波器的滤波效果,如下图

    可见这个带通滤波器的滤波效果还是比较好的,同样我们可以利用FDATool工具设计一个LowPass Filter,采用等波纹设计法,采样频率100Hz,截止频率为20Hz,同样用上述的信号作为输入,得到如下的滤波效果

    自此我们在matlab中验证了滤波器的效果,接下来我们需要在FPGA中实现。在我们设置好FDATool的参数后,我们可以点击Analysis-->Filter Coefficients来观察FIR滤波器的系数,

    这里的系数全是有符号型的小数,我们在FPGA中需要用整数作为滤波器的系数,所以我们要进行系数的归一化,点击左下角设置量化参数(Set Quantization Parameters),Filter arithmetic选择Fixed-point(定点)。然后就可以导出Xilink的.coe文件了。Targets-->XILINK Coefficients(.COE) File.保存后matlab自动打开该.coe文件


    CoefData这就是我们FPGA要用的系数表。接下来去编写Verilog代码

    module FIR_kaiser_LPF(Clk,Rst_n,data_in,data_out);
    
        parameter word_data_in = 8;
        parameter word_data_out = 2*word_data_in+1;
        parameter order = 8;
        
        parameter c0 = 8'h0d;
        parameter c1 = 8'h23;
        parameter c2 = 8'h41;
        parameter c3 = 8'h5b;
        parameter c4 = 8'h65;
        parameter c5 = 8'h5b;
        parameter c6 = 8'h41;
        parameter c7 = 8'h23;
        parameter c8 = 8'h0d;
        
        input Clk;
        input Rst_n;
        input [word_data_in-1:0]data_in;
        output wire [word_data_out-1:0]data_out;
        reg [word_data_in-1:0]samples[order-1:0];
        reg [word_data_in-1:0]data_in_tmp1;
        reg [word_data_in-1:0]data_in_tmp2;
        
        integer i;
        
        always@(posedge Clk)
            if(!Rst_n)begin
                data_in_tmp1<=8'd0;
                data_in_tmp2<=8'd0;
            end
            else begin
                data_in_tmp1<=data_in;
                data_in_tmp2<=data_in_tmp1;
            end
                
        
        always@(posedge Clk)//同步复位,完成移位功能
            if(!Rst_n)begin
                for(i=0;i<order;i=i+1)
                    samples[i]<=0;
            end
            else begin
                samples[0]<=data_in_tmp2;
                for(i=1;i<order;i=i+1)
                    samples[i]<=samples[i-1];
            end
        //串行实现累加    
        assign data_out = c0*data_in_tmp2 + c1*samples[0] + c2*samples[1] + c3*samples[2] + 
                 c4*samples[3] + c5*samples[4] + c6*samples[5] + c7*samples[6] + c8*samples[7];
                
    
    endmodule



    展开全文
  • 用matlab设计fir滤波器的三种方法.doc 用MATLAB信号处理工具箱进行FIR滤波器设计的三种方法摘要介绍了利用MATLAB信号处理工具箱进行FIR滤波器设计的三种方法程序设计法、FDATOOL设计法和SPTOOL设计法,给出了详细的...

    41528d3028836879cd698677c3999917.gif用matlab设计fir滤波器的三种方法.doc

    用MATLAB信号处理工具箱进行FIR滤波器设计的三种方法摘要介绍了利用MATLAB信号处理工具箱进行FIR滤波器设计的三种方法程序设计法、FDATOOL设计法和SPTOOL设计法,给出了详细的设计步骤,并将设计的滤波器应用到一个混和正弦波信号,以验证滤波器的性能。关键词MATLAB,数字滤波器,有限冲激响应,窗函数,仿真1前言数字滤波器是一种用来过滤时间离散信号的数字系统,通过对抽样数据进行数学处理来达到频域滤波的目的。根据其单位冲激响应函数的时域特性可分为两类无限冲激响应(IIR)滤波器和有限冲激响应(FIR)滤波器。与IIR滤波器相比,FIR的实现是非递归的,总是稳定的;更重要的是,FIR滤波器在满足幅频响应要求的同时,可以获得严格的线性相位特性。因此,它在高保真的信号处理,如数字音频、图像处理、数据传输、生物医学等领域得到广泛应用。2FIR滤波器的窗函数设计法FIR滤波器的设计方法有许多种,如窗函数设计法、频率采样设计法和最优化设计法等。窗函数设计法的基本原理是用一定宽度窗函数截取无限脉冲响应序列获得有限长的脉冲响应序列,主要设计步骤为1通过傅里叶逆变换获得理想滤波器的单位脉冲响应HDN。2由性能指标确定窗函数WN和窗口长度N。3求得实际滤波器的单位脉冲响应HN,HN即为所设计FIR滤波器系数向量BN。4检验滤波器性能。本文将针对一个含有5HZ、15HZ和30HZ的混和正弦波信号,设计一个FIR带通滤波器,给出利用MATLAB实现的三种方法程序设计法、FDATOOL设计法和SPTOOL设计法。参数要求采样频率FS100HZ,通带下限截止频率FC110HZ,通带上限截止频率FC220HZ,过渡带宽6HZ,通阻带波动001,采用凯塞窗设计。2程序设计法MATLAB信号处理工具箱提供了各种窗函数、滤波器设计函数和滤波器实现函数。本文的带通滤波器设计及滤波程序如下N,WN,BETA,FTYPEKAISERORD7131723,010,001001001,100得出滤波器的阶数N38,BETA34W12FC1/FSW22FC2/FS将模拟滤波器的技术指标转换为数字滤波器的技术指标WINDOWKAISERN1,BETA使用KAISER窗函数BFIR1N,W1W2,WINDOW使用标准频率响应的加窗设计函数FIR1FREQZB,1,512数字滤波器频率响应T0100/FSSSIN2PIT5SIN2PIT15SIN2PIT30混和正弦波信号SFFILTERB,1,S%对信号S进行滤波程序执行的结果如图1所示(1)滤波器幅频特性和相频特性(2)滤波前后的波形图1滤波器特性和滤波效果图4FDATOOL设计法FDATOOLFILTERDESIGNSSIN2PIT5SIN2PIT15SIN2PIT30此时,变量FS、T、S将显示在WORKSPACE列表中。在命令窗口键入SPTOOL,将弹出SPTOOL主界面,如图3所示;点击菜单FILE/IMPORT将信号S导入并取名为S。(2)单击FILTERS列表下的NEW,按照参数要求设计出滤波器FILT1,具体步骤类似于321。(3)将滤波器FILT1应用到S信号序列。分别在SIGNALS、FILTERS、SPECTRA列表中选择S、FILT1、MTLBSE,单击FILTERS列表下的APPLY按钮,在弹出的APPLYFILTER对话框中将输出信号命名为SIN15HZ。(4)进行频谱分析。在SIGNALS中选择S,单击SPECTRA下的CREATE按钮,在弹出的SPECTRAVIEWER界面中选择为FFT,NFFT512,单击APPLY按钮生成S的频谱SPECT1。同样的步骤可以生成信号SIN15HZ的频谱SPECT2。分别选中信号S、SIN15HZ、SPECT1、SPECT2,单击各自列表下方的VIEW按钮,即可观察他们的波形,如图4所示。图3SPTOOL主界面图4滤波前后的时域波形和频域特性由图4可以看出,带通滤波器FILT1使输入信号S中频率为15HZ的正弦波信号通过,而将频率为5HZ和30HZ的正弦波信号大大衰减。6结束语本文通过一个设计实例,介绍了利用MATLAB实现FIR滤波器设计与滤波的三种方法,从仿真结果可以看出它们均可以达到技术指标要求,而且方法简单、快捷,大大减轻了工作量。滤波器的设计工作完成后,可以借助于MATLAB的EXPORT操作导出所设计滤波器的系统函数HZ。由于MATLAB具有强大的接口功能,仿真后的结果可以很方便的移植到DSP、CPLD或FPGA等器件中。在实际应用中,只需按要求修改滤波器参数,并对程序作较少的改动,即可实现不同截止频率的FIR滤波器,实用性较强。

    展开全文
  • FIR滤波器的FPGA实现方法

    千次阅读 2019-07-09 18:53:17
    随着现代数字通信系统对于精度、处理速度的需求,越来越多的研究转向采用FPGA来实现FIR滤波器。而对于FIR滤波器要充分考虑其资源与运行速度的合理优化,各种不同的FIR滤波结构各具优缺点,在了解各种结构优 缺点...
  • FIR滤波器文献笔记

    2020-11-26 15:06:14
    关于FIR滤波器各个文献中可能有用的知识笔记 一、 FIR滤波器设计在数字信号处理领域居于重要的地位, 而且 可以做成具有严格的线性相位,而且同时可以具有任意的幅度响应,因而在工程实际中得到了广泛的应用。 FIR...
  • 分析了FIR数字滤波器的原理,介绍了采用窗函数法设计FIR数字滤波器的实现过程。Matlab仿真验证了所设计滤波器可以根据需要调整参数,从而实现需要的滤波功能。设计简单、方便,实用性强。
  • 本文介绍了高阶数字滤波器的设计与应用,适合于初学者自己自学
  • FPGA/Verilog 设计FIR滤波器

    千次阅读 多人点赞 2018-12-19 01:50:03
    FPGA/Verilog 设计FIR滤波器 文章目录FPGA/Verilog 设计FIR滤波器前言设计目标基础知识数字滤波器FIR滤波器具体实现matlab-获取FIR抽头系数matlab-产生波形数据FPGA-导入波形数据FPGA - FIR结构设计part1-移位寄存器...
  • 一种用于数字下变频的高阶分布式FIR滤波器及FPGA实现.pdf
  • 并行FIR滤波器Verilog设计

    千次阅读 2020-02-10 10:51:27
    版权声明:本文为CSDN博主「FPGADesigner」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。 ...感谢博主FPGADesigner,本文在原文基础上做...FPGA最方便实现的是直接型结构FIR,实现时可...
  • 文章探求高速全并行FIR的FPGA实现方法,并以8输入15阶FIR滤波器为示例,在直接型FIR的基础上改进得到全并行FIR结构,采用Verilog硬件描述语言完成设计,仿真结果与MATLAB软件测试结果一致。在此基础上,提出两种改进...
  • [Matlab]FIR滤波器设计:(基本窗函数FIR滤波器设计)

    万次阅读 多人点赞 2019-11-16 00:54:00
    [Matlab]FIR滤波器设计:(基本窗函数FIR滤波器设计) ​ IIR滤波器主要设计方法先设计一个模拟低通滤波器,然后把它转化为形式上的数字滤波器。但对于FIR滤波器来说,设计方法的关键要求之一就是保证线性相位条件。而...
  • (三)FIR数字滤波器的FPGA实现-并行FIR滤波器设计 文章目录(三)FIR数字滤波器的FPGA实现-并行FIR滤波器设计1 FIR滤波器基本原理   对于FIR滤波器主要涉及到滤波器的设计和滤波器的实现,设计和实现的区别如下...
  • 基于FPGA的高阶FIR抽取滤波器有效实现结构.pdf

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,141
精华内容 456
关键字:

高阶fir滤波器