当前位置:   article > 正文

基于FPGA的低通滤波器,通过verilog实现并提供testbench测试文件_16位低通滤波器verilog

16位低通滤波器verilog

目录

1.算法仿真效果

2.MATLAB核心程序

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

4.完整MATLAB


1.算法仿真效果

matlab2022a仿真结果如下:

2.MATLAB核心程序

  1. module xfilter(clk, rst,
  2. i_valid_new_pixel,
  3. i_new_pixel,
  4. i_valid_lpos,
  5. i_valid_cpos,
  6. i_valid_rpos,
  7. i_rowM,
  8. o_valid_filt,
  9. o_filt_pixel,
  10. o_colN,
  11. o_rowM
  12. );
  13. parameter XB = 10;
  14. parameter PB = 8;
  15. input clk;
  16. input rst;
  17. input i_valid_new_pixel;
  18. input [(PB + 2) - 1:0] i_new_pixel;
  19. input i_valid_lpos;
  20. input i_valid_cpos;
  21. input i_valid_rpos;
  22. input i_rowM;
  23. output o_valid_filt;
  24. output [PB - 1:0] o_filt_pixel;
  25. output o_colN;
  26. output o_rowM;
  27. reg [(PB + 4) - 1:0] r_pixel_sum = 0;
  28. reg [PB - 1:0] rr_pixel_sum = 0;
  29. reg r_valid_lpos = 0;
  30. reg r_valid_cpos = 0;
  31. reg r_valid_rpos = 0;
  32. reg r_valid_filt_pixel = 0;
  33. reg rr_valid_cpos = 0;
  34. reg r_valid_pixel_in = 0;
  35. reg rr_valid_pixel_in = 0;
  36. ........................................................................
  37. always @(posedge clk)
  38. begin
  39. //read in pixel
  40. r_valid_lpos <= i_valid_lpos;
  41. r_valid_cpos <= i_valid_cpos;
  42. r_valid_rpos <= i_valid_rpos;
  43. rr_valid_cpos <= r_valid_cpos;
  44. r_colN <= i_valid_rpos;
  45. rr_colN <= r_colN;
  46. rrr_colN <= rr_colN;
  47. r_rowM <= i_rowM;
  48. rr_rowM <= r_rowM;
  49. rrr_rowM <= rr_rowM;
  50. if (rst)
  51. begin
  52. r_valid_pixel_in <= 0;
  53. rr_valid_pixel_in <= 0;
  54. r_valid_filt_pixel <= 0;
  55. end
  56. else
  57. begin
  58. r_valid_pixel_in <= c_valid_pixel_in;
  59. rr_valid_pixel_in <= r_valid_pixel_in;
  60. r_valid_filt_pixel <= rr_valid_pixel_in;
  61. end
  62. r_pixel2 <= c_pixel2;
  63. end
  64. wire [PB + 4 - 1: 0] c_pixel_sum = (rr_valid_cpos) ? r_pixel_sum + r_pixel2 + 8: r_pixel_sum + 8;
  65. reg r_valid_new_pixel = 0; //needed to check if new row's data was added
  66. //add filter
  67. always @(posedge clk)
  68. begin
  69. r_valid_new_pixel <= i_valid_new_pixel;
  70. if (r_valid_rpos)
  71. begin
  72. if (r_valid_new_pixel) //new data added to queue
  73. r_pixel_sum <= {c_pixel1, 1'd0} + c_pixel2;
  74. else
  75. r_pixel_sum <= {c_pixel0, 1'd0} + c_pixel1;
  76. end
  77. else
  78. begin
  79. r_pixel_sum <= c_pixel0 + {c_pixel1, 1'd0};
  80. end
  81. rr_pixel_sum <= c_pixel_sum[PB + 4 -1: 4];
  82. end
  83. //3 pixel buffer
  84. queue PIXBUF (.clk(clk),
  85. .i_valid_pixel(i_valid_new_pixel),
  86. .i_pixel(i_new_pixel),
  87. .o_pixel0(c_pixel0),
  88. .o_pixel1(c_pixel1),
  89. .o_pixel2(c_pixel2)
  90. );
  91. endmodule
  92. module queue(clk, i_valid_pixel, i_pixel, o_pixel0, o_pixel1, o_pixel2);
  93. parameter PB = 8;
  94. .....................................................
  95. endmodule
  96. A411

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平面的任何位置。

        对于FIR(有限长单位冲激响应)滤波器,其基本结构是一个分节的延时线,每一节的输出加权累加,得到滤波器的输出。其输出y就是输入x和系数h的内积:

4.完整MATLAB

V

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

闽ICP备14008679号