微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > FPGA,CPLD和ASIC > 请教IIR数字滤波器实现过程中的截位问题。

请教IIR数字滤波器实现过程中的截位问题。

时间:10-02 整理:3721RD 点击:
我在fdatool中设计了一个IIR巴特沃斯低通滤波器,阶数为4阶,2个sos结构,系数按照48位定点数进行量化。然后在菜单“Targets”中选择“Generate HDL”,生成了一个filter.v文件和filter_tb.v文件。我自己更改了那个filter_tb.v文件,输入了一个信号加噪声的一个东东,结果发现滤波器输出一直为零。然后就是那个filter.v文件里的具体的滤波处理过程,流程我可以看懂,但是涉及到那些截位、移位的操作,我就不理解了。有哪位大侠懂这方面的吗?请不吝赐教,在下非常感谢!filter.v文件里的滤波器系数如下:
parameter signed [47:0] scaleconst1 = 48'h52A5AB39CDC4; //sfix48_En63
  parameter signed [47:0] coeff_b1_section1 = 48'h200000000000; //sfix48_En45
  parameter signed [47:0] coeff_b2_section1 = 48'h400000000000; //sfix48_En45
  parameter signed [47:0] coeff_b3_section1 = 48'h200000000000; //sfix48_En45
  parameter signed [47:0] coeff_a2_section1 = 48'h804F457BF9B7; //sfix48_En46
  parameter signed [47:0] coeff_a3_section1 = 48'h3FB15FCF5CBC; //sfix48_En46
  parameter signed [47:0] scaleconst2 = 48'h525E1DB7DF35; //sfix48_En63
  parameter signed [47:0] coeff_b1_section2 = 48'h200000000000; //sfix48_En45
  parameter signed [47:0] coeff_b2_section2 = 48'h400000000000; //sfix48_En45
  parameter signed [47:0] coeff_b3_section2 = 48'h200000000000; //sfix48_En45
  parameter signed [47:0] coeff_a2_section2 = 48'h80BDD2256AED; //sfix48_En46
  parameter signed [47:0] coeff_a3_section2 = 48'h3F42D296D083; //sfix48_En46

然后看到下面几行我就看不懂了:
  assign mul_temp = input_register * scaleconst1;
  assign scale1 = $signed({{5{mul_temp[63]}}, mul_temp});//这里符号位扩5位的准则是什么?
  assign scaletypeconvert1 = (scale1[68:0] + {scale1[53], {52{~scale1[53]}}})>>>53;//结果保留16bit,从哪个bit开始截位是怎么来定的?

请看我的注释,有懂的老师可以教教我吗?谢谢!

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top