发布时间 : 星期六 文章DSP查表法更新完毕开始阅读
2.查表法
在实时DSP应用中实现非线性运算,一般都采取适当降低运算精度来提高程序的运算速度。查表法是快速实现非线性运算最常用的方法。采用这种方法必须根据自变量的范围和精度要求制作一张表格。显然输入的范围越大,精度要求越高,则所需的表格就越大,即存储量也越大。查表法求值所需的计算就是根据输入值确定表的地址,根据地址就可得到相应的值,因而运算量较小。查表法比较适合于非线性函数是周期函数或已知非线性函数输入值范围这两种情况,例3.12和例3.13分别说明这两种情况。
例3.12 已知正弦函数y=cos(x),制作一个512点表格,并说明查表方法。 由于正弦函数是周期函数,函数值在-1至+1之间,用查表法比较合适。
由于Q15的表示范围为-1至32767/32768之间,原则上讲-1至+1的范围必须用Q14表示。但一般从方便和总体精度考虑,类似情况仍用Q15表示,此时+1用32767来表示。 (1) 产生512点值的C语言程序如下所示: #define N 512
#define pi 3.14159 int sin_tab[512]; void main( ) {
int i;
for(i=0;i>20。 例3.13 用查表法求以2为底的对数,已知自变量取值范围为0.5~1,要求将自变量范围均匀划分为10等分。试制作这个表格并说明查表方法。 (1) 做表: y = log2(x),由于x在0.5到1之间,因此y在-1到0之间,x和y均可用Q15表示。由于对x均匀划分为10段,因此,10段对应于输入x的范围如表3.2所示。若每一段的对数值都取第1点的对数值,则表中第1段的对数值为y0(Q15) = (int)(log2(0.5)×32768),第2段的对数值为y1(Q15) = (int)(log2(0.55)×32768),依次类推。 表3.2 logtab0 10点对数表(输入0.5~1) 地址 输入值 对数值(Q15) 0 0.50~0.55 -32768 1 0.55~0.60 -28262 2 0.60~0.65 -24149 3 0.65~0.70 -20365 4 0.70~0.75 -16862 5 0.75~0.80 -13600 6 0.80~0.85 -10549 7 0.85~0.90 -7683 8 0.90~0.95 -4981 9 0.95~1.00 -2425 (2) 查表: 查表时,先根据输入值计算表的地址,计算方法为:index=((x-16384)×20)>>15。式中,index就是查表用的地址。例如,已知输入x= 26869,则index=6,因此y=-10549。