用于dsp解码的相位计算方法

文档序号:6469583阅读:405来源:国知局

专利名称::用于dsp解码的相位计算方法
技术领域
:本发明涉及一种相位计算方法,特别是一种用于DSP解码的相位计算方法。
背景技术
:CORDIC(CoordinateRotationsDigitalComputer)算法被广泛应用于数字信号处理(DigitalSignalProcessor,DSP)算法的硬件实现中。在收音机的立体声处理流程中,当经频率调制(FM,FrequencyModulation)的立体声中频信号被采样后,即输入至DSP芯片进行解码。在DSP解码过程中,相位计算将占用较多的时钟周期。相位计算即是由两路信号(I和Q)进行反三角函数计算,计算得出其相应相位。目前,所述相位计算皆采用CORDIC算法,CORDIC算法由J.Voider于1959年提出,首先用于导航系统,使得矢量的旋转和定向运算不需要做查三角函数表、乘法、开方及反三角函数等复杂运算。CORDIC算法的核心思想是通过将一个复数与一常数序列相乘,以达到旋转该复数相位的目的。而为了用移位代替乘法,CORDIC算法一般选择的常数序列为2的整数幂序列。CORDIC算法常用旋转模式,而正余弦计算则采用旋转模式。所述旋转模式是将某向量旋转一个角度,具体公式(公式(l))与结果(公式(2))分别是<formula>formulaseeoriginaldocumentpage4</formula><formula>formulaseeoriginaldocumentpage4</formula>当Zi〈0时,di二-l,否则d^<formula>formulaseeoriginaldocumentpage4</formula>l,以及公式(2)上述CORDIC算法的缺点是当提高相位计算精度时,相位的计算速度即会极大地下降。而相位计算的速度将极大地影响DSP的解码效率。
发明内容有鉴于此,本发明的目的在于提供两种用于DSP解码的相位计算方法,使相位的计算速度和计算精度都得到极大的提升。本发明是通过以下技术方案实现的—种用于DSP解码的相位计算方法,包括以下步骤A)设置查表分段数L的值,制作区域的反正切表,并生成待查表的表格table[L+l];。进一步地,所述步骤B)后进一步包括步骤C)、将坐标区域[_,]分为其他七个区域的相位映射到区域,计算相应区域的相位。进一步地,所述步骤A)的生成待查表的表格table[L+l]的公式是区=(int){0.5+}其中,L为查表分段数,i为0,1,2,3...L。进一步地,所述八个区域是、(Ji/4,Ji/2)、(Ji/2,Ji3/4)、[Ji3/4,ji]、ji3/4)、(-Ji3/4,-Ji/2)、[-Ji/2,-Ji/4]、[-Ji/4,0]。进一步地,计算b/4,ji/2)的相位的公式是6>=^—";2计算(ji/2,ji3/4)的相位的公式是+计算[n3/4,]的相位的公式是eji_a;=_ji+a计算(-,-3/4)的相位的公式是e=计算(13/4,1/2)的相位的公式是^=—计算[1/2,1/4]的相位的公式是6>=—计算[_^/4,0]的相位的公式是e=-a,其中,a为的相位。进一步地,所述步骤B)的计算索引的公式是"'WfiferP丄,其中,X为待计算相的点的右位区域的反正切表,并生成待查表的表格+1];B)、计算索引index,查表得到相位值table[index];BC)、查表得到第一相位值table[index]和第二相位值table[index+1],计算第位值。进一步地,所述步骤BC)后进一步包括步骤C)、将坐标区域,Ji]分为八个区其他七个区域的相位映射到区域,计算相应区域的相位。进一步地,所述步骤A)的生成待查表的表格table[L+l]的公式是其中,L为查表分段数,i为0,1,2,3...L。进一步地,所述八个区域是、(ji/4,ji/2)、(ji/2,ji3/4)、[ji3/4,ji]、^6/e|>]二(int){0.5+},(i,-ji3/4)、(-Ji3/4,-Ji/2)、[-Ji/2,-Ji/4]、[-Ji/4,0]。进一步地,计算U/4,ji/2)的相位的公式是计算(ji/2,ji3/4)的相位的公式是+计算[n3/4,]的相位的公式是e=ji-a;计算(-Ji,-Ji3/4)的相位的公式是9=-Ji+a计算(-Ji3/4,-/2)的相位的公式是计算[1/2,i/4]的相位的公式是计算[_^/4,0]的相位的公式是e=-a,其中,a为的相位。进一步地,所述步骤B)的计算索引的公式是/W6/eX=,其中,X为待计算相位的点的横坐标,Y为待计算相位的点的纵坐标,L为查表分段数。进一步地,所述步骤BC)的计算第三相位值的公式是surplus=Y*L-index*X,[o酬=++,其中,X为待计算相位的点的横坐标,Y为待计算相位的点的纵坐标,L为查表分段数,index是索引,table是待查表的表格。进一步地,所述查表分段数是自然数。进一步地,所述查表分段数是2的n次幂,其中,n是整数。本发明的相位计算方法是不带插值查表法和带插值查表法,使相位的计算速度和计算精度都得到极大的提升。一次相位计算,不带插值查表法和带插值查表法占用的时钟周期约为CORDIC算法的一半。本发明的带插值查表法的计算误差呈规则分布并且足够小。不带插值查表法在查表分段数较大的情况下,计算误差也能达到足够小。图1是点(X,Y)的相位示意图。图2是Atan9/A9-A9的曲线图。图3是tan9的坐标分区域图。具体实施例方式请参阅图l,本发明的相位计算方法即是已知任一点的坐标(X,Y),计算该点的相位e的方法。相位的计算可以使用查表法。查表法分为不带插值查表法和带插值查表法。以下对上述两种方法的原理、步骤和计算结果进行描述和对比。请参阅图2,图2的横坐标是A9,纵坐标是Atane/Ae。在范围内,Atan9/A9为单调增加。当A9"0时,A9"Atan9;当A9"ji/4时,Atan9/A9"2。对于不带插值查表法,由于介于两个关键点之间的任意点的函数值需用两个关键点中的某个点的函数值近似,因此,参阅图2可知,当A9"Ji/4时,函数的斜率最大,点误差也最大。如果将0Ji/4分为L段,L可为任意自然数。但为利于DSP处理,兼顾计算精度和占用存储器容量,一般将L取值为2的n次幂,即查表分段数L=1,2,4,8,16,32,64,128,256,512,1024,...。表长为L+l,表中值分别为f(0),f(1),f(2),...f(L-l),f(L),则不带插值查表法的误差的计算公式见公式(3):,]f(L");f(L-2)公式(3)error=z因此,不带插值查表法的最大误差的计算公式见公式(4):^TOrmax=4承^l公式(4)由此可见,不带插值查表法的最大误差和查表分段数L成反比,查表分段数L越小,最大误差越大。不带插值查表法的计算步骤如下A)设置查表分段数L的值,制作区域的atan(反正切)表,并生成待查表的表格(table表);根据公式(5),制作待查表的表格/"6/e[)Xint)(0.5+;索引index的计算公式(6)如下z7(iex二"^公式(6)其中,X为待计算相位的点的横坐标,Y为待计算相位的点的纵坐标,L为查表分段上述步骤A)、B)是在区域计算相位。因此,查表所得相位值phase是/4]上的相位。C)、将坐标区域,Ji]分为八个区域,将其他七个区域的相位映射到区域、(ji/4,ji/2)、(ji/2,Ji3/4)、[Ji3/4,ji]、(-ji,-ji3/4)、(-ji3/4,-ji/2)、[-ji/2,-ji/4]、[-ji/4,0]。由于查表区域在区域l[O,Ji/4],其他七个区域的角度需映射到区域1后,再进行查表。上述分法的优点在于(1)查表分段数可设置为较小值;(2)由tan值的单调性可知,在范围内误差比较小。如区域1的相位(角度)为a=phase,可通过以下的公式计算其他七个区域相应的相位(角度)e:区域2(ji/4,/2),角度(9=7—a;计算最终的相位值:surplus=ji_aji+a区域3(ji/2,^13/4),角度<9=7+"区域4[ji3/4,Ji],角度9=区域5(-ji,-ji3/4),角度e区域6(-ji3/4,-ji/2),角度6>区域7[-ji/2,-ji/4],角度<9=+区域8[-ji/4,0],角度e=-a。当然,如果待计算相位的坐标点本身即位于区域1,则不需执行步骤C)。带插值查表法的计算方法在上述步骤B)、C)之间,添加如下步骤BC)、查表得到相位值table[index]和table[index+1],根据公式(7)和公式(8)Y承L一index承X公式(7)//zose=励/e卩"flfexJ+^-^-^--^-^——公式(8)由上可知,带插值查表法与不带插值查表法相比,添加步骤BC)。以下列举一具体实施例,对本发明作进一步阐述。本具体实施例以coolFlux的DSP为硬件基础,作计算仿真。由于DSP计算仿真是定点处理,为减小误差,将n/2设置为2097152作为基准。当然,Ji/2也可以设置为其它任意值,本具体实施例并不限于此值。现假设某一点的坐标值X=1000,Y=368,求其相位,具体的计算方法如下Al)、设置查表分段数L=16,根据力、表1A、式(5)制作待查表的表格,见表1;i=0i=1i=2i=3i=4i=5083335166025247456327068404378i=6i=7i=8i=9i=10i=11478991550604619011684085745779804107i=12i=13i=14i=15i=1685913191095395970210055241048576如表1所示,0、83335、166025、247456、327068、404378、478991、550604、619011、684085、745779、804107、859131、910953、959702、1005524、1048576分别为i=0、1、2、3、4、85、6、7、8、9、10、11、12、13、14、15、16时的待查表的值。Bi)、计算索引/w/ex二^^=(368x16)/1000=5,查表得到相位值phase=table[index]=table[5]=404378;404378即为不带插值查表法所得的相位值。对于带插值查表法,继续执行步骤BC1)、surplus=Y*L_index*X=368*16-5女1000=888;一置=+(励地"^X+1]-^地"fe])^"/M=table[5]+[(table问画table问)*surplus]/1000=404378+[(478991-404378)*888]/1000=470634。由于X二1000,Y=368,点(X,Y)位于区域l[O,/4],因此,不需再执行步骤C)。相位的实际精确值为470778,带插值查表法与不带插值查表法相比,精度要高得多。在本具体实施例中,查表分段数L二16,不带插值查表法可以将查表分段数L的值设置得足够大,以减小误差。但L值越大,占用的存储容量越大,相位的计算速度也会随之下降。由此可见,带插值查表法在L较小的情况下,仍能保持较高的精度。另外,再列举一些测试值,对比CORDIC算法、不带插值查表法和带插值查表法的优劣性。表2为CORDIC算法的仿真结果;表3为不带插值查表法的仿真结果;表4为带插值查表法的仿真结果。其中,X,Y分别表示所求相位的输入横坐标X、纵坐标Y;期望值为相位的实际精确值;MIPS为仿真计算所需的机器语言指令数;仿真值为仿真结果;A为仿真误差。表2C0RDIC算法的仿真结果XY期望值CORDICMIPS仿真值A100010001048576208104844812810242030147341421314726407741004310316793672121681280191320301024623737216623744310310044177852154158721913-20301024357056621935697927749表3不带插值查表法的仿真结果<table>tableseeoriginaldocumentpage10</column></row><table>表4带插值查表法的仿真结果<table>tableseeoriginaldocumentpage10</column></row><table>由表2、表3和表4可知,查表法与CORDIC算法相比,仿真计算所需的机器语言指令数MIPS要少得多。带插值查表法与不带插值查表法相比,仿真计算所需的MIPS稍多(增加步骤E)),但计算精度可以达到足够高。综合比较,带插值查表法使相位的计算速度和计算精度都得到极大的提升。另夕卜,由于查表分段数L可以设置为任意值,当然,可以减小至256,128,...16,8,4,2,1。对于不带插值查表法,当L=16时,误差A为208,当表L=8时,A为1317,误差太大。因此,当L值较小时,不建议使用该方法。本发明的查表法可应用于FM立体声处理中。在软件解码器中,相位计算即是由两路信号(I和Q)进行反三角函数计算,计算得出其相应相位。相位计算的速度将极大地影响DSP的解码效率。FM立体声处理中的I和Q对应于公式和表中的X和Y,也即是横坐标X和纵坐标Y。当然,本发明并不限于FM立体声处理,还可以用于其它需进行相位计算的应用中。以上介绍的仅仅是基于本发明的较佳实施例,并不能以此来限定本发明的范围。任何对本发明实施步骤作本
技术领域
内熟知的等同改变或替换均不超出本发明的揭露以及保护范围。权利要求一种用于DSP解码的相位计算方法,其特征在于,包括以下步骤A)设置查表分段数L的值,制作区域的反正切表,并生成待查表的表格table[L+1];B)、计算索引index,查表得到相位值table[index]。2.如权利要求1所述的用于DSP解码的相位计算方法,其特征在于,所述步骤B)后进一步包括步骤C)、将坐标区域,Ji]分为八个区域,将其他七个区域的相位映射到区域,计算相应区域的相位。3.如权利要求1所述的用于DSP解码的相位计算方法,其特征在于,所述步骤A)的生成待查表的表格table[L+l]的公式是=(int){0.5+},其中,L为查表分段数,i为0,1,2,3...L。4.如权利要求2所述的用于DSP解码的相位计算方法,其特征在于,所述八个区域是、(Ji/4,Ji/2)、(Ji/2,Ji3/4)、[Ji3/4,ji]、(_ji,_ji3/4)、(_ji3/4,_ji/2)、[_ji/2,_ji/4]、[_ji/4,0]。5.如权利要求4所述的用于DSP解码的相位计算方法,其特征在于,计算(ji/4,的相位的公式是计算(ji/2,ji3/4)的相位的公式是^^f+计算^3/4,ji]的相位的公式是e=ji-a;计算(-ji,-ji3/4)的相位的公式是9=-ji+a;十算(i3/4,i/2)的相位的公式是6>=-3—":十算[1/2,1/4]的相位的公式是夕=一|+";计算[-^/4,0]的相位的公式是9=-a,其中,a为的相位。6.如权利要求1所述的用于DSP解码的相位计算方法,其特征在于,所述步骤B)的计算索引的公式是/m/ex二^^,其中,X为待计算相位的点的横坐标,Y为待计算相位的点的纵坐标,L为查表分段数。7.如权利要求1-6中的任一权利要求所述的用于DSP解码的相位计算方法,其特征在于,所述查表分段数是自然数。8.如权利要求7所述的用于DSP解码的相位计算方法,其特征在于,所述查表分段数是2的n次幂,其中,n是整数。9.一种用于DSP解码的相位计算方法,其特征在于,包括以下步骤A)设置查表分段数L的值,制作区域的反正切表,并生成待查表的表格table[L+l];B)、计算索引index,查表得到相位值table[index];BC)、查表得到第一相位值table[index]和第二相位值table[index+1],计算第三相位值。10.如权利要求9所述的用于DSP解码的相位计算方法,其特征在于,所述步骤BC)后进一步包括步骤C)、将坐标区域,Ji]分为八个区域,将其他七个区域的相位映射到区域,计算相应区域的相位。11.如权利要求9所述的用于DSP解码的相位计算方法,其特征在于,所述步骤A)的生成待查表的表格table[L+l]的公式是=(int){0.5+[OjcI00000*atan(;)*1]},其中,L为查表分段数,i为0,1,2,3...L。12.如权利要求IO所述的用于DSP解码的相位计算方法,其特征在于,所述八个区域是、(Ji/4,Ji/2)、(Ji/2,Ji3/4)、[Ji3/4,ji]、(_ji,_ji3/4)、(_ji3/4,_ji/2)、[_ji/2,_ji/4]、[_ji/4,0]。13.如权利要求12所述的用于DSP解码的相位计算方法,其特征在于,计算(ji/4,的相位的公式是6i=*-a;计算(ji/2,ji3/4)的相位的公式是+计算^3/4,ji]的相位的公式是e=ji-a;计算(-ji,-ji3/4)的相位的公式是9=-ji+a;计算(i3/4,i/2)的相位的公式是计算[i/2,i/4]的相位的公式是计算[-^/4,0]的相位的公式是e=-a,其中,a为的相位。14.如权利要求9所述的用于DSP解码的相位计算方法,其特征在于,所述步骤B)的计算索引的公式是/mfex=^^,其中,X为待计算相位的点的横坐标,Y为待计算相位的点的纵坐标,L为查表分段数。15.如权利要求9所述的用于DSP解码的相位计算方法,其特征在于,所述步骤BC)的计算第三相位值的公式是surplus=Y*L-index*X,^聽=^冲"^]+(励地"^+1]—"啡"^])承,一其中,x为待计算相位的点的横坐标,Y为待计算相位的点的纵坐标,L为查表分段数,index是索引,table是待查表的表格。16.如权利要求8-15中的任一权利要求所述的用于DSP解码的相位计算方法,其特征在于,所述查表分段数是自然数。17.如权利要求16所述的用于DSP解码的相位计算方法,其特征在于,所述查表分段数是2的n次幂,其中,n是整数。全文摘要本发明公开了两种用于DSP解码的相位计算方法,其特征在于,包括以下步骤A)设置查表分段数L的值,制作区域的反正切表,并生成待查表的表格table[L+1];B)计算索引index,查表得到相位值table[index]等。本发明的相位计算方法占用的时钟周期约为CORDIC算法的一半,计算误差呈规则分布并且足够小。文档编号G06F1/03GK101751065SQ200810203840公开日2010年6月23日申请日期2008年12月2日优先权日2008年12月2日发明者丁柯,姚峰,徐芳菲,萧绍侯,顾丽娟申请人:无锡华润矽科微电子有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1