• 方案介绍
  • 相关推荐
申请入驻 产业图谱

基于FPGA的FIR数字滤波器的设计Verilog代码Quartus仿真

11/27 17:39
1556
加入交流群
扫码加入
获取工程师必备礼包
参与热点资讯讨论

名称:基于FPGA的FIR数字滤波器的设计Verilog代码Quartus仿真

软件:Quartus

语言:Verilog

代码功能:利用所学知识设计并制作一个基于FPGA数字滤波器

电路装置以VHDL为描述方法,基于FPGA来实现FIR滤波器的设计,掌握FIR滤波器的原理,基本网络结构以及FIR滤波器的常见实现方法,设计FIR滤波器方案的确定,设计的总体思路,算法的分解,系数的提取以及一些关键问题的解决.

 

 

演示视频:

设计文档:

滤波器参数

采样率 f_s = 100kHz,设计截止频率为10KHz的FIR滤波器。

设计的滤波器为7阶(长度为8) ,在Matlab中输入:fir1(7, 0.2);

其归一化截止频率为 0.2(对应实际频率为 0.2 * f_s/2,其中 f_s为采样频率)

参数 值/描述
采样率 f_s 100 kHz
窗函数类型 Hamming窗
归一化 W_n 0.2
实际截止频率 f_c 10 kHz
Nyquist 频率 50 kHz (f_s/2)

 

参数设计方法:

 

使用matlab软件设计滤波器系数

 

滤波器系数设计:

 

打开Matlab软件在指令窗口中键入:m=fir1(7,0.2),即可得到如下的系数:

 

0.009、0.048、0.164、0.279、0.279、0.164、0.048、0.009

 

将系数放大1000倍即:9,48,164,279;乘加计算计算完成后再除以1000.

 

 

1、工程文件

 

2、程序文件

 

 

3、程序编译

 

4、RTL图

 

5、testbench

 

6、仿真图

整体仿真图

上图中,data_in为输入的30K和1KHz正弦波信号叠加的测试信号,输出fir_data为滤波后的信号,可以看到30KHz信号被滤除,1KHz信号被保留,验证功能正确。

 

 

分频模块

 

分频产生100Hz的采样信号

 

FIR滤波器模块

 

上图中,data_in为输入的30KHz和1KHz正弦波信号叠加的测试信号,输出fir_data为滤波后的信号,可以看到30KHz信号被滤除,1KHz信号被保留,验证功能正确。

 

 

噪声测试信号产生模块

上图中,sin_30K为30KHz的正弦波,sin_1K为频率1KHz的正弦波,将两个波形叠加,得到sin_and_noise信号,用于测试滤波器功能。

部分代码展示:

LIBRARY ieee;
   USE ieee.std_logic_1164.all;
   USE ieee.std_logic_unsigned.all;
--分频模块,50M分频到100K,作为采样信号
ENTITY div_clk IS
   PORT (
      clk_in   : IN STD_LOGIC;
      clk_out  : OUT STD_LOGIC
   );
END div_clk;
ARCHITECTURE behave OF div_clk IS
   SIGNAL count : STD_LOGIC_VECTOR(15 DOWNTO 0) := "0000000000000000";
BEGIN
   PROCESS (clk_in)
   BEGIN
      IF (clk_in'EVENT AND clk_in = '1') THEN
         IF (count >= "0000000111110100") THEN--50_000K/100K=500
            count <= "0000000000000000";
         ELSE
            count <= count + "0000000000000001";
         END IF;
      END IF;
   END PROCESS;

 

 

 

 

 

 

 

相关推荐