当前位置:   article > 正文

基于FPGA的FIR低通滤波器verilog开发,包含testbench测试程序,输入噪声信号使用MATLAB模拟产生_matlab生成滤波器verilog

matlab生成滤波器verilog

目录

1.算法仿真效果

2.MATLAB核心程序

3.算法涉及理论知识概要

4.完整MATLAB


1.算法仿真效果

VIVADO2019.2/matlab2022a仿真结果如下:

运行matlab:

 将matlab得到的数据文件保存到FPGA的project_13.sim\sim_1\behav\xsim路径,测试仿真时,可以自动调用matlab任意产生的测试数据。

rtl:

2.Verilog核心程序

  1. .............................................................
  2. reg[15:0]delay_pipeline[0:8];
  3. reg[26:0]sum;
  4. reg[23:0]product[0:8];
  5. always@(posedge clk or negedge rst_n) begin
  6. if(!rst_n) begin
  7. delay_pipeline[0] <= 0;
  8. delay_pipeline[1] <= 0;
  9. delay_pipeline[2] <= 0;
  10. delay_pipeline[3] <= 0;
  11. delay_pipeline[4] <= 0;
  12. delay_pipeline[5] <= 0;
  13. delay_pipeline[6] <= 0;
  14. delay_pipeline[7] <= 0;
  15. delay_pipeline[8] <= 0;
  16. end
  17. else if(clk_en) begin
  18. delay_pipeline[0] <= filter_in;
  19. delay_pipeline[1] <= delay_pipeline[0];
  20. delay_pipeline[2] <= delay_pipeline[1];
  21. delay_pipeline[3] <= delay_pipeline[2];
  22. delay_pipeline[4] <= delay_pipeline[3];
  23. delay_pipeline[5] <= delay_pipeline[4];
  24. delay_pipeline[6] <= delay_pipeline[5];
  25. delay_pipeline[7] <= delay_pipeline[6];
  26. delay_pipeline[8] <= delay_pipeline[7];
  27. end
  28. end
  29. always@(posedge clk or negedge rst_n) begin
  30. if(!rst_n) begin
  31. product[0] <= 0;
  32. product[1] <= 0;
  33. product[2] <= 0;
  34. product[3] <= 0;
  35. product[4] <= 0;
  36. product[5] <= 0;
  37. product[6] <= 0;
  38. product[7] <= 0;
  39. product[8] <= 0;
  40. end
  41. else if(clk_en) begin
  42. product[0] <= delay_pipeline[0]*coeff0;
  43. product[1] <= delay_pipeline[1]*coeff1;
  44. product[2] <= delay_pipeline[2]*coeff2;
  45. product[3] <= delay_pipeline[3]*coeff3;
  46. product[4] <= delay_pipeline[4]*coeff4;
  47. product[5] <= delay_pipeline[5]*coeff5;
  48. product[6] <= delay_pipeline[6]*coeff6;
  49. product[7] <= delay_pipeline[7]*coeff7;
  50. product[8] <= delay_pipeline[8]*coeff8;
  51. end
  52. end
  53. ..................................................
  54. assign filter_out = sum[26:11];
  55. endmodule
  56. A451

3.算法涉及理论知识概要

         FIR(Finite Impulse Response)滤波器:有限长单位冲激响应滤波器,又称为非递归型滤波器,是数字信号处理系统中最基本的元件,它可以在保证任意幅频特性的同时具有严格的线性相频特性,同时其单位抽样响应是有限长的,因而滤波器是稳定的系统。因此,FIR滤波器在通信、图像处理、模式识别等领域都有着广泛的应用。
        在进入FIR滤波器前,首先要将信号通过A/D器件进行模数转换,把模拟信号转化为数字信号;为了使信号处理能够不发生失真,信号的采样速度必须满足香农采样定理,一般取信号频率上限的4-5倍做为采样频率;一般可用速度较高的逐次逼进式A/D转换器,不论采用乘累加方法还是分布式算法设计FIR滤波器,滤波器输出的数据都是一串序列,要使它能直观地反应出来,还需经过数模转换,因此由FPGA构成的FIR滤波器的输出须外接D/A模块。FPGA有着规整的内部逻辑阵列和丰富的连线资源,特别适合于数字信号处理任务,相对于串行运算为主导的通用DSP芯片来说,其并行性和可扩展性更好,利用FPGA乘累加的快速算法,可以设计出高速的FIR数字滤波器。
(1) 系统的单位冲激响应h (n)在有限个n值处不为零
(2) 系统函数H(z)在|z|>0处收敛,极点全部在z = 0处(因果系统)
(3) 结构上主要是非递归结构,没有输出到输入的反馈,但有些结构中(例如频率抽样结构)也包含有反馈的递归部分。
设FIR滤波器的单位冲激响应h (n)为一个N点序列,0 ≤ n ≤N —1,则滤波器的系统函数为
H(z)=∑h(n)*z^-k
就是说,它有(N—1)阶极点在z = 0处,有(N—1)个零点位于有限z平面的任何位置。

4.完整FPGA工程

V

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/码创造者/article/detail/939780
推荐阅读
相关标签
  

闽ICP备14008679号