首页 > 其他 > 详细

滤波器的CSD编码与嵌套乘法

时间:2020-05-20 22:26:28      阅读:53      评论:0      收藏:0      [点我收藏+]
  • 滤波器系数CSD编码

CSD编码就是将‘11’变成‘10(-1)’,其中最高位的1为向前一位的进位(注意:编码前后数值不变)

先将滤波器的系数整理一下:

fid1 = fopen(hb_filter_b1_b2.txt‘,w);
fprintf(fid1,b1 = \n);
for i = 1:L1
    fprintf(fid1,%2.24f,b1(i));
    fprintf(fid1,\n); 
end
fprintf(fid1,b2 = \n);
for i = 1:L2
    fprintf(fid1,%2.24f,b2(i));
    fprintf(fid1,\n); 
end
fclose(fid1);

将(半带)滤波器系数b1导出到文档中,然后做一下量化,我们把输出小数位数定为24bit

b1 =                                                   x(2^24)                              24bit小数                                                   CSD编码
-0.031394965341144054000000      526720          -(0000 1000 0000 1001 1000 0000?)       -(0000 1000 0000 1001 1000 0000?)   连续的‘1’不多,所以不编码用原值
0.000000000000000000000000       
0.281394519027249990000000       4721016            0100 1000 0000 1001 0111 1000?                 0100 1000 0000 1001 1000 (-1)000?
0.500000000000000000000000       8388608            1000 0000 0000 0000 0000 0000?                1000 0000 0000 0000 0000 0000?     
0.281394519027249990000000    
0.000000000000000000000000
-0.031394965341144054000000    

b2 =
-0.031834594252995910000000      534095          -(0000 1000 0010 0110 0100 1111?)        -(0000 1000 0010 0110  0101 000(-1)?)
0.000000000000000000000000                                                                                                              
0.281827409659883290000000       4728279             0100 1000 0010 0101 1101 0111?               0100 1000 0100 0110 00-10 -100-1
0.500000000000000000000000       8388608             1000 0000 0000 0000 0000 0000?              1000 0000 0000 0000 0000   0000
0.281827409659883290000000
0.000000000000000000000000
-0.031834594252995910000000

  • 镶套乘法

eg.  0.3086=2^(-2) + 2^(-4) - 2^(-8)

     0.3086x=2^(-2)x + 2^(-4)x - 2^(-8)x               其中产生了x右移8bit

                  =2^(-2)( x + 2^(-2)( x - 2^(-4)x )  )     其中最多x右移4bit

                 (平均右移数从4.6bit降低至2.6bit)

故,带来的好处是1、降低了舍入噪声;2、减少了总共所需位移长度,降低加法运算量

                                                                   -(0000 1000 0000 1001 1000 0000?)

                                                                                 5              13  16 17

所以,b1(1)x=-0.031394965341144054x = - ( 2^(-5)x + 2^(-13)x + 2^(-16)x + 2^(-17)x )

                                                                  = - ((( (2^(-5)x + x)2^(-8) + x )2^(-3) + x )2^(-1)

           assign b11‘ = (((din>>5 + din) >>8 +din) >>3 +din )>>1 ;

           assign b11 = (~b11‘) + 1;

 

滤波器的CSD编码与嵌套乘法

原文:https://www.cnblogs.com/gmh1996/p/12926097.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!