用于VHDL中ECG去噪的低通FIR滤波器

此项目是用于VHDL中ECG去噪的低通FIR滤波器。在此VHDL项目中,在VHDL中实现了用于ECG去噪的简单低通FIR滤波器。 完整显示了FIR滤波器的VHDL代码。通过将Modelsim中的仿真结果与Matlab生成的正确结果进行比较,可以对FIR滤波器的VHDL代码进行仿真和验证。 显然,ECG数字信号处理中最关键的步骤之一就是噪声滤波,因为ECG信号受到许多不同来源(例如基线漂移,EMG干扰和电力线噪声)的干扰。

应用介绍

此项目是用于VHDL中ECG去噪的低通FIR滤波器。在此VHDL项目中,在VHDL中实现了用于ECG去噪的简单低通FIR滤波器。 完整显示了FIR滤波器的VHDL代码。通过将Modelsim中的仿真结果与Matlab生成的正确结果进行比较,可以对FIR滤波器的VHDL代码进行仿真和验证。 显然,ECG数字信号处理中最关键的步骤之一就是噪声滤波,因为ECG信号受到许多不同来源(例如基线漂移,EMG干扰和电力线噪声)的干扰。FIR滤波器基本上是通过使用D型触发器,有符号乘法器和加法器来实现的。 一个基本块包括一个N位寄存器,一个乘法器和一个加法器。 VHDL generate语句用于使用基本块生成完整的设计。

附件中包括:低通FIR滤波器的VHDL代码、FIR滤波器的Testbench VHDL代码。

本人在下方展示了FIR滤波器的VHDL代码;如想了解的更多请下载附件。

Library IEEE;  
 USE IEEE.Std_logic_1164.all;   
 USE IEEE.Std_logic_signed.all;   
 -- fpga4student.com: FPGA projects, VHDL projects, Verilog projects   
 -- LOW pass FIR filter for ECG Denoising
 -- VHDL project: VHDL code for FIR filter   
 entity FIR_RI is  -- VHDL projects
 generic (  
           input_width          : integer     :=8               ;-- set input width by user  
           output_width     : integer     :=16               ;-- set output width by user  
           coef_width          : integer     :=8               ;-- set coefficient width by user  
           tap                    : integer     :=11               ;-- set filter order  
           guard               : integer     :=0)               ;-- log2(tap)+1  
 port(  
      Din          : in      std_logic_vector(input_width-1 downto 0)     ;-- input data  
      Clk          : in      std_logic                                             ;-- input clk  
      reset     : in      std_logic                                             ;-- input reset  
      Dout     : out      std_logic_vector(output_width-1 downto 0))     ;-- output data  
 end FIR_RI;  
 architecture behaivioral of FIR_RI is  
 -- N bit Register  
 component N_bit_Reg   
 generic (  
           input_width          : integer     :=8  
           );  
   port(  
    Q : out std_logic_vector(input_width-1 downto 0);     
    Clk :in std_logic;    
    reset :in std_logic;   
    D :in std_logic_vector(input_width-1 downto 0)    
   );  
 end component;
 -- fpga4student.com: FPGA projects, VHDL projects, Verilog projects  
 type Coeficient_type is array (1 to tap) of std_logic_vector(coef_width-1 downto 0);  
 -----------------------------------FIR filter coefficients----------------------------------------------------------------  
 constant coeficient: coeficient_type :=   
                               (     X"F1",  
                                    X"F3",  
                                    X"07",  
                                    X"26",  
                                    X"42",  
                                    X"4E",  
                                    X"42",  
                                    X"26",  
                                    X"07",  
                                    X"F3",  
                                    X"F1"                                     
                                    );                                         
 ----------------------------------------------------------------------------------------------                                     
 type shift_reg_type is array (0 to tap-1) of std_logic_vector(input_width-1 downto 0);  
 signal shift_reg : shift_reg_type;  
 type mult_type is array (0 to tap-1) of std_logic_vector(input_width+coef_width-1 downto 0);  
 signal mult : mult_type;  
 type ADD_type is array (0 to tap-1) of std_logic_vector(input_width+coef_width-1 downto 0);  
 signal ADD: ADD_type;  
 begin  
 -- fpga4student.com: FPGA projects, VHDL projects, Verilog projects
        shift_reg(0)     <= Din;  
           mult(0)<= Din*coeficient(1);  
           ADD(0)<= Din*coeficient(1);  
           GEN_FIR:  
           for i in 0 to tap-2 generate  
           begin  
                 -- N-bit reg unit  
                 N_bit_Reg_unit : N_bit_Reg generic map (input_width => 8)   
                 port map ( Clk => Clk,   
                                    reset => reset,  
                                    D => shift_reg(i),  
                                    Q => shift_reg(i+1)  
                                    );       
                -- filter multiplication  
                mult(i+1)<= shift_reg(i+1)*coeficient(i+2);  
                -- filter conbinational addition  
                ADD(i+1)<=ADD(i)+mult(i+1);  
           end generate GEN_FIR;  
           Dout <= ADD(tap-1);  
 end Architecture;  
 Library IEEE;  
 USE IEEE.Std_logic_1164.all;  
 
 -- fpga4student.com: FPGA projects, VHDL projects, Verilog projects   
 -- LOW pass FIR filter for ECG Denoising
 -- VHDL project: VHDL code for FIR filter
 -- N-bit Register in VHDL 
 entity N_bit_Reg is   
 generic (  
           input_width          : integer     :=8  
           );  
   port(  
    Q : out std_logic_vector(input_width-1 downto 0);    
    Clk :in std_logic;    
    reset :in std_logic;  
    D :in std_logic_vector(input_width-1 downto 0)    
   );  
 end N_bit_Reg;  
  -- fpga4student.com: FPGA projects, VHDL projects, Verilog projects  
 architecture Behavioral of N_bit_Reg is   
 begin   
      process(Clk,reset)  
      begin   
           if (reset = '1') then  
                Q <= (others => '0');  
        elsif ( rising_edge(Clk) ) then  
                Q <= D;   
       end if;      
      end process;   
 end Behavioral;

文件列表(部分)

名称 大小 修改日期
用于VHDL中ECG去噪的低通FIR滤波器.txt1.73 KB2020-03-31

立即下载

相关下载

[用于VHDL中ECG去噪的低通FIR滤波器] 此项目是用于VHDL中ECG去噪的低通FIR滤波器。在此VHDL项目中,在VHDL中实现了用于ECG去噪的简单低通FIR滤波器。 完整显示了FIR滤波器的VHDL代码。通过将Modelsim中的仿真结果与Matlab生成的正确结果进行比较,可以对FIR滤波器的VHDL代码进行仿真和验证。 显然,ECG数字信号处理中最关键的步骤之一就是噪声滤波,因为ECG信号受到许多不同来源(例如基线漂移,EMG干扰和电力线噪声)的干扰。

评论列表 共有 0 条评论

暂无评论

微信捐赠

微信扫一扫体验

立即
上传
发表
评论
返回
顶部