在DSP或一般单片机中最常见的运算指令是"加"和"乘",而在数据处理中,不但有加、减、乘、除等运算,还要有一些基本函数的计算,如利用正交双通道零中频算法测量信号相位差或分析信号倒频谱时,需要计算三角函数、平方根函数、对数函数等。在DSP上实现函数计算一般可以从数值精度、时间效率和空间效率等角度来衡量各种算法的优劣。利用高级语言库函数求这些基本函数的运算速度比较慢,在许多数字信号处理中,一般都有实时性的要求,在满足计算精度条件下,函数的运算速度尤为重要。对于空间效率来讲,本文中给出一个查表电路,其最大特点是不占用DSP的存储器空间,而只占用他的一个I/O端口,利用此电路提高了空间利用率,查表时使用的指令很少,从而提高了函数值的运算速度。
1函数表电路
函数表电路如图1所示,如果系统时钟比较快,应选择高速器件。这里以16位定点DSP为例,即数据线有16条,则用2片E2PROM 27512分别存储函数表的高8位和低8位数据,若每个函数表的容量是4 kB,则此电路可以存储16个函数表,每个函数表的空间大小也可以根据需要来定。设函数表示为:y=f(x) (1)
其中:x是自变量,y是函数值,x和y都是16位定点数。查表时x作为查找存储在27512存储单元中函数值y的地址,经两片74HC574输出连接到27512的16条地址线上,然后,DSP从两片74LS244中读取函数值y。若查表端口为PA,则查表时只用两条指令即可完成,即:
2函数表的制定
由于使用的是16位定点DSP,因此,各函数表的函数值采用16位定点方式,最高位为符号位,低15位为有效数字位,即Q15方式。所有的数都采用小数形式,即小数点位于最高位后。每个函数表容量为4 096 B,下面分别给出三角函数表(正弦函数表和余弦函数表)、以e为底的自然对数表、平方根函数表的制作方法。
2.1 三角函数表的制作
将正、余弦函数1/4周期内等间隔取4 096个值,归一化后进行量化并编码,分别制成正、余弦函数表。
在式(2)和式(3)中,n为自然数,取值范围为0~4 095,函数int[ ]表示对括号中的数取整数,式中函数值乘32 768是将小数变为整数后再变成Q15方式二进制数。
2.2 自然对数表的制作
对于任意一个正实数x,求其自然对数y=ln(x)。若x的浮点数形式为:
对于浮点数a*2b,b为指数,a为正的Q15方式小数,取值范围为:0.5≤a<1,则1≤2a<2。由于指数可以在运算中求得,从式(5)中得知,求x的自然对数,只要计算出2的自然对数即可。因为0≤ln(2a)<1,所以自然对数表就是将1~2之间等间隔取4 096个数,再求其自然对数。
自然对数表值:
式(6)中,n为自然数,取值范围为0~4 095。
2.3平方根函数表的制作
平方根函数表是将0~1等间隔取4 096个数,再求平方根,即平方根函数表值为:
式(7)中,n为自然数,取值范围为0~4 095。
以上是几个基本函数表值的计算,最后要将函数表值变为二进制数,用程序写入器写人两片27512中,每个函数表分配4 k地址,地址线高4位作为每个函数表的段地址,地址线低12位作为函数查表地址。
3函数的计算
3.1正、余弦函数值的计算
假设正、余弦信号频率为f,求一个周期内某一时刻点k的函数值,其中,k取值范围为0~N-1,则在计算cos(2πfk/N)和sin(2πfk/N)时,需要进行查表求函数值,由于在制表过程中,已将圆周率π考虑进去,所以,在计算角度时只计算2fk/N。
假设λ=2fk/N=2n+φ,其中,n为自然数,φ<2。下面给出cos(λ)和sin(λ)的求解过程。首先去掉λ中的2n项,得到小于2的Q15方式的小数,这里最高位不是符号位,而代表数值1或0。实际上,cos(λ)=cos(φ),sin(λ)=sin(φ)。计算cos(λ)和sin(λ)的流程图如图2所示。
3.2平方根值的计算
对于任意一个正实数x,求其平方根值。将x表示成浮点数形式:
从以上3种情况看,每种情况下只有对正实小数进行开方运算,所以在计算时,将Q15方式的小数向右移4位,其高4位为换上开方表段地址,即可查表求得
4结 语
在DSP上实现基本函数的计算方法有多种,这里介绍的方法可以快速计算函数值,其实现电路简单,函数表的空间扩展方便,不受DSP存储空间限制的,我们在为海军装备修理部研制"DSP-1型声纳电功率测量仪"中得到应用,取得良好效果。
作者:李泽光(大连大学 信息工程学院 116622) 来源:《现代电子技术》