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

  • 滤波器系数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;

猜你喜欢

转载自www.cnblogs.com/gmh1996/p/12926097.html