用于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;
©版权声明:本文内容由互联网用户自发贡献,版权归原创作者所有,本站不拥有所有权,也不承担相关法律责任。如果您发现本站中有涉嫌抄袭的内容,欢迎发送邮件至: www_apollocode_net@163.com 进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。
转载请注明出处: apollocode » 用于VHDL中ECG去噪的低通FIR滤波器
文件列表(部分)
名称 | 大小 | 修改日期 |
---|---|---|
用于VHDL中ECG去噪的低通FIR滤波器.txt | 1.73 KB | 2020-03-31 |
发表评论 取消回复