快速傅立叶转换方法

文档序号:6427174阅读:465来源:国知局
专利名称:快速傅立叶转换方法
技术领域
本发明提供一种快速傅立叶转换方法,特别指一种用以计算段L(Llength)数据的快速傅立叶转换方法。
背景技术
蝴蝶结构(butterfly structure)是一种普遍用来实现快速傅立叶转换的演算法。这种方法是将输入的数据点利用多层交叉运算的方式,得到最后快速傅立叶转换的结果。请参考图1。图1为常规快速傅立叶转换的蝴蝶结构。在此例子中,共有八个固定的输入数据x(0),x(1),x(2)至x(7)用来进行快速傅立叶转换,并得到最后的输出结果X(0),X(1),X(2)至X(7)。首先,八点输入数据必须先经过编号的位反转(bit reversal)运算来决定此八点输入数据的顺序。所谓地编号的位反转运算是指反转原本编号位中各个位从最不重要位(Least Significant Bit)至最重要位(Most Significant Bit)的顺序。举例来说,标号为4的位表示为”100”,其位反转后的结果为”001”,也就是标号变为1,标号为6的位表示为”110”,其位反转后的结果为”011”,也就是标号变为3,而标号为0的位表示经反转后标号一样为0,依此类推。原本编号为x(0),x(1),x(2)至x(7)的八个数据点经编号的位反转再排序之后,变成了如图1所示的x(0),x(4),x(2),x(6),x(1),x(5),x(3),x(7),做为快速傅立叶转换蝴蝶结构的输入。
接着,依照输入数据的顺序两两进行交叉运算,如图所示x(0)与x(4)交叉运算,x(2)与x(6)交叉运算,x(1)与x(5)交叉运算,x(3)与x(7)交叉运算,在交叉运算的过程中,x(4),x(6),x(5),x(7)会乘上一个称做twiddlefactor(旋转因子)的加权参数W[z],运算结果得到x’(0),x’(1),x’(2)至x’(7)。从x得到x’是第一层的蝴蝶结构运算。然后,x’(0)与x’(2)交叉运算,x’(1)与x’(3)交叉运算,x’(4)与x’(6)交叉运算,x’(5)与x’(7)交叉运算,并且,在交叉运算的过程中,x’(2),x’(3),x’(6),x’(7)会乘上加权参数W[z],得到x”(0),x”(1),x”(2)至x”(7)。从x’得到x”是第二层的蝴蝶结构运算。最后,x”(0)与x”(4),x”(1)与x”(5),x”(2)与x”(6),x”(3)与x”(7)进行交叉运算,运算过程中x”(4),x’(5),x”(6),x”(7)乘上加权参数W[z],运算过后得到最后快速傅立叶转换结果X(0),X(1),X(2)至X(7)。从x”得到X是第三层的蝴蝶结构运算。
以上八点输入数据共需要三层的蝴蝶结构运算,事实上,愈多点的输入数据需愈多层的蝴蝶结构运算,这与输入数据点数的乘幂有关。假设有M点输入数据,而M的乘幂为N,所以这M点输入数据需要N层运算。与例来说,八的乘幂为3,所以需三层运算,16点的乘幂为4,所以需4层运算。
在常规的方法中,处理输入数据的快速傅立叶转换时,只能针对固定长度的数据点进行运算,而且,这输入数据的长度一定要事先设定成2的次方,才能顺利进行接下来的运算。此种固定数据点的输入方式造成使用上的不便,也让快速傅立叶转换运算较无弹性。另外,对于乘幂为N的M点输入数据,在快速傅立叶转换运算的过程中需经过N层的蝴蝶结构,才能得到运算结果,换句话说,以程序的执行上需要N层循环才能完成运算。这样程序执行较为复杂冗长。

发明内容
因此本发明的主要目的在于提供一种用以一处理单元载入并计算段L数据的快速傅立叶转换方法,以解决上述常规的问题。
本发明公开一种快速傅立叶转换方法用以一处理单元载入并计算段L数据的快速傅立叶转换,该方法包含令该段L输入数据对应一序列数据,该序列数据长度为M;计算一乘幂N,使该N值对应该M值;针对该序列数据进行位反转,得到一反转序列数据;依据该N值以及该序列数据长度M计算多组加权参数W[z];以及依据多组循环参数及该多组加权参数W[z]对该反转序列数据进行循环运算后输出该段L数据的快速傅立叶转换值。
本发明更公开一种快速傅立叶转换转换装置,其用于执行段L数据的快速傅立叶转换,其包含一补零模块,接收该段L输入数据,使其对应一序列数据,该序列数据长度为M;一乘幂计算模块,用来计算一乘幂N,使该N值对应该M值;一位反转模块,接收该序列数据且依据该N值将该序列数据进行反转,并产生一反转序列数据;一参数计算模块,依据该N值以及该段L数据长度计算多组加权参数W[z];一循环控制模块,依据该N值及至少一计数器提供多组循环参数;以及一傅立叶转换模块,依据该多组循环参数及多组加权参数W[z]对该反转序列数据进行循环运算后输出该段L数据的快速傅立叶转换值。


图1为常规快速傅立叶转换的蝴蝶结构。
图2为本发明用以计算段L数据的快速傅立叶转换方法的流程图。
图3为本发明一种用于执行段L数据的快速傅立叶转换的快速傅立叶转换转换装置。
主要元件符号说明
10 快速傅立叶转换转换装置12 补零模块
14 乘幂计算模块 16 位反转模块
18 参数计算模块 22 循环控制模块
24 傅立叶转换模块
具体实施例方式
请参考图2。图2为本发明用以计算段L数据的快速傅立叶转换方法的流程图,本流程可以一程序代码撰写,并以一处理单元处理后出,可用于行动单元的频谱分析或是频谱分析仪上直接分析信号。步骤100,令该段L输入数据对应一序列数据,该序列数据长度为M。步骤110,计算一乘幂N,使该N值对应该M值。本发明的精神在于使用者可以输入任意长度L的数据,L值不一定要为2的次方,但是为了让快速傅立叶转换的运算顺利进行,必须让这段L输入数据对应至一长度为M的序列数据,M的值即为2的N次方(2N=M)。如果L值恰好为2的次方,则L值与M值相等,2的N次方等于L。如果L值不等于2的次方,则M值为2的次方中大于L的最小值。这段M(lengthM)序列数据是由该段L输入数据补上(M-L)个零所组成。
步骤120中,针对该序列数据进行位反转,得到一反转序列数据。位反转指的是反转该序列数据中的各个位从最不重要位至最重要位的顺序。步骤130,依据该N值以及该序列数据长度M计算多组加权参数W[z](Twiddlefactor)。加权参数W[z]是在进行快速傅立叶转换过程中必要的函数,其与输入数据长度和输入数据长度的乘幂有关。此加权参数W[z]是本领域技术人员所熟知,在此不加以详述。步骤140,依据多组循环参数及该多组加权参数W[z]对该反转序列数据进行循环运算后输出该段L数据的快速傅立叶转换值。在循环运算过程中,共进行三层循环运算。该多组循环参数包括一用来控制最外层循环的主循环控制信号i,用来控制第二层循环的一次循环控制信号j,用来控制第三层循环的一内循环控制信号k,以及一倍数控制信号FFA_radix。i值为0、1、、、(N-1);j值为0、1、、、(M/2)-1;该反转序列数据为x
、x[1]、、、x[M-1];该倍数控制信号FFA-radix为一2的次方的变数,于第一次执行主循环时该FFA_radix的值为2,而第二次执行主循环开始该FFA_radix每次以2的倍数增加,每一次的主循环对应一FFA_radix值;该k值为于其中一次主循环之下,以间隔1依序从0递增至对应该次主循环的FFA_radix值。该循环运算中最内层循环运算包含于其中一次主循环之下,如果k值小于对应该次主循环的FFA_radix值的二分之一,则计算x[FFA_radix*j+k]=x[FFA_radix*j+k]+x[FFA_radix*j+k+FFA_radix/2]*W[z]。如果k值不小于对应该次主循环的FFA_radix值的二分之一,则计算x[FFA_radix*j+k]=x[FFA_radix*j+k]*W[z]+x[FFA_radix*j+k-FFA_radix/2]。
为了更清楚说明本发明步骤140的循环运算,其程序如下
FFA_pts=M;  FFA_radix=1;  For(i=0;i<N;i++)  {  FFA-pts/=2;  FFA-radix*=2;  For(j=0;j<FFA_pts;j++)  {   for(k=0;k<FFA_radix;k++)   {  if(k<FFA_radix/2)  x[FFA_radix*j+k]= x[FFA_radix*j+k]+x[FFA_radix*j+k+FFA_radix/2]*W[k*FFA_pts];<!-- SIPO <DP n="4"> --><dp n="d4"/>  else  x[FFA_radix*j+k]= x[FFA_radix*j+k] *W[k*FFA_pts]+x[FFA_radix*j+k-FFA_radix/2];  }  }  for(k=0;k<FFT_pts;k++)x[k]=X[k];  }
程序说明如下
如同的前所述,最外层的循环受到主循环控制信号i的控制,从0开始每次加1一直变化到N-1为止。一开始,参数FFA_pts设定成数据的长度M,而倍数控制信号FFA_radix设定为1。在每执行一次主循环时,参数FFA_pts会变成一半,倍数控制信号FFA_radix会加倍,因此,在对应不同的主循环的i值之下,参数FFA_pts和倍数控制信号FFA_radix的值都不相同。第二层循环由一次循环控制信号j来控制,在某一主循环i所对应的参数FFA_pts之下,j的值以间隔为1由0变化到FFA_pts-1。第三层循环由内循环控制信号k控制,在某一主循环i所对应的倍数控制信号FFA_radix之下,k的值以间隔为1由0变化到FFA_radix-1。在最内层的循环中,如果k值小于对应该次主循环的FFA_radix值的二分之一,则x[FFA_radix*j+k]=x[FFA_radix*j+k]+x[FFA_radix*j+k+FFA_radix/2]*W[z]。如果k值不小于对应该次主循环的FFA_radix值的二分之一,则x[FFA_radix*j+k]=x[FFA_radix*j+k]*W[z]+x[FFA_radix*j+k-FFA_radix/2]。最后程序算得的结果X[z]即是段L输入数据的快速傅立叶转换结果。
请参考图3。图3为本发明一种用于执行段L数据的快速傅立叶转换的快速傅立叶转换转换装置10,此快速傅立叶转换转换装置10为一种处理装置。快速傅立叶转换转换装置10包含一补零模块12,一乘幂计算模块14,一位反转模块16,一参数计算模块18,一循环控制模块22以及一傅立叶转换模块24。补零模块12用来接收该段L输入数据,使其对应一序列数据,该序列数据长度为M。乘幂计算模块14用来计算一乘幂N,使该N值对应该M值。M的值即为2的N次方(2N=M)。如果L值恰好为2的次方,则L值与M值相等,2的N次方等于L。如果L值不等于2的次方,则M值为2的次方中大于L的最小值。这段M序列数据是由该段L输入数据补上(M-L)个零所组成。位反转模块16接收该序列数据并依据该N值将该序列数据进行位反转,并产生一反转序列数据。位反转指的是反转该序列数据中的各个位从最不重要位至最重要位的顺序。参数计算模块18依据该N值以及该段L数据长度计算多组加权参数W[z](Twiddle factor)。循环控制模块22控制本发明快速傅立叶转换法三个循环的循环参数,依据该N值及至少一计数器提供一用来控制最外层循环的主循环控制信号i,用来控制第二层循环的一次循环控制信号j,用来控制第三层循环的一内循环控制信号k,以及一倍数控制信号FFA_radix。i值为0、1、、、(N-1);j值为0、1、、、(M/2)-1;该反转序列数据为x
、x[1]、、、x[M-1];该倍数控制信号FFA_radix为一2的次方的变数,于第一次执行主循环时该FFA_radix的值为2,而第二次执行主循环开始该FFA_radix每次以2的倍数增加,每一次的主循环对应一FFA_radix值;该k值为于其中一次主循环之下,以间隔1依序从0递增至对应该次主循环的FFA_radix值。傅立叶转换模块24依据该多组循环参数及多组加权参数W[z]对该反转序列数据进行循环运算后输出该段L数据的快速傅立叶转换值。该循环运算包含执行图2中步骤140的循环运算程序。
在常规的方法中,处理输入数据的快速傅立叶转换时,只能针对固定长度的数据点进行运算,而且,这输入数据的长度一定要事先设定成2的次方,才能顺利进行接下来的运算。此种固定数据点的输入方式造成使用上的不便,也让快速傅立叶转换运算较无弹性。另外,对于乘幂为N的M点输入数据,在快速傅立叶转换运算的过程中需经过N层的蝴蝶结构,才能得到运算结果,换句话说,以程序的执行上需要N层循环才能完成运算。这样程序执行较为复杂冗长。相较于常规技术,本发明的快速傅立叶转换方法中,将任意段L输入数据对应一序列数据,使其变成二的次方长度的数据,因此,本发明的快速傅立叶转换方法可以处理不固定长度的输入数据的快速傅立叶转换。另外,不论输入数据长度的乘幂值N为何,本发明循环运算皆只需要三层循环即可完成快速傅立叶转换的运算,因此具有运算简单,运算效率高,所需硬体较少的优点。
以上所述仅为本发明的较佳实施例,凡依本发明权利要求所进行的等效变化与修改,皆应属本发明的涵盖范围。
权利要求
1.一种快速傅立叶转换方法,被一处理单元载入并执行,用以计算段L数据的快速傅立叶转换,该方法包含
令该段L输入数据对应一序列数据,该序列数据长度为M;
计算一乘幂N,使该N值对应该M值;
针对该序列数据进行位反转,得到一反转序列数据;
依据该N值以及该序列数据长度M计算多组加权参数W[z];以及
依据多组循环参数及该多组加权参数W[z]对该反转序列数据进行循环运算后输出该段L数据的快速傅立叶转换值。
2.如权利要求1所述的快速傅立叶转换方法,其另包含如果输入数据长度L小于M,则将段L数据再补上(M-L)个零以构成该序列数据。
3.如权利要求1所述快速傅立叶转换方法,其中该2的N次方等于M。
4.如权利要求1所述的快速傅立叶转换方法,其中该循环运算共包含三个循环,该多组循环参数包括一用来控制最外层循环的主循环控制信号i,用来控制第二层循环的一次循环控制信号j,用来控制第三层循环的一内循环控制信号k,以及一倍数控制信号FFA_radix。
5.如权利要求4所述的快速傅立叶转换方法,该i值为0、1、、、(N-1);该j值为0、1、、、(M/2)-1;该反转序列数据为x
、x[1]、、、x[M-1];该倍数控制信号FFA_radix为一2的次方的变数,于第一次执行主循环时该FFA_radix的值为2,而第二次执行主循环开始该FFA_radix每次以2的倍数增加,每一次的主循环对应一FFA_radix值;该k值为于其中一次主循环之下,以间隔1依序从0递增至对应该次主循环的FFA_radix值。
6.如权利要求5所述的快速傅立叶转换方法,其中该循环运算另包含于其中一次主循环之下,如果k值小于对应该次主循环的FFA_radix值的二分之一,则计算
x[FFA_radix*j+k]=x[FFA_radix*j+k]+x[FFA_radix*j+k+FFA_radix/2]*W[z]。
7.如权利要求5所述的快速傅立叶转换方法,其中该循环运算另包含于其中一次主循环之下,如果k值不小于对应该次主循环的FFA_radix值的二分之一,则计算
x[FFA_radix*j+k]=x[FFA_radix*j+k]*W[z]+x[FFA_radix*j+k-FFA_radix/2]。
8.如权利要求1所述的快速傅立叶转换方法,其中针对该序列数据进行位反转系反转该序列数据中各个位从最不重要位至最重要位的顺序,以得到一反转序列数据。
9.一种快速傅立叶转换转换装置,其用于执行段L数据的快速傅立叶转换,其包含
一补零模块,接收该段L输入数据,使其对应一序列数据,该序列数据长度为M;
一乘幂计算模块,用来计算一乘幂N,使该N值对应该M值;
一位反转模块,接收该序列数据且依据该N值将该序列数据进行反转,并产生一反转序列数据;
一参数计算模块,依据该N值以及该段L数据长度计算多组加权参数W[z];
一循环控制模块,依据该N值及至少一计数器提供多组循环参数;以及
一傅立叶转换模块,依据该多组循环参数及多组加权参数W[z]对该反转序列数据进行循环运算后输出该段L数据的快速傅立叶转换值。
10.如权利要求9所述的转换装置,其中该2的N次方等于M。
11.如权利要求9所述的转换装置,其中该L等于M。
12.如权利要求9所述的转换装置,其中当该M大于L时,长度为M的该序列数据为该补零模块将该段L输入数据补上(M-L)组零所构成。
13.如权利要求9所述的转换装置,其中该傅立叶转换模块所执行的循环运算共包含三个循环,该多组循环参数包括一用来控制最外层循环的主循环控制信号i,用来控制第二层循环的一次循环控制信号j,用来控制第三层循环的一内循环控制信号k,以及一倍数控制信号FFA_radix。
14.如权利要求9所述的快速傅立叶转换方法,该i值为0、1、、、(N-1);该j值为0、1、、、(M/2)-1;该反转序列数据为x
、x[1]、、、x[M-1];该倍数控制信号FFA_radix为一2的次方的变数,于第一次执行主循环时该FFA_radix的值为2,而第二次执行主循环开始该FFA_radix每次以2的倍数增加,每一次的主循环对应一FFA_radix值;该k值为于其中一次主循环之下,以间隔1依序从0递增至对应该次主循环的FFA_radix值。
15.如权利要求14所述的快速傅立叶转换方法,其中该循环运算另包含于其中一次主循环之下,如果k值小于对应该次主循环的FFA_radix值的二分之一,则计算
x[FFA_radix*j+k]=x[FFA_radix*j+k]+x[FFA_radix*j+k+FFA_radix/2]*W[z]。
16.如权利要求14所述的快速傅立叶转换方法,其中该循环运算另包含于其中一次主循环之下,如果k值不小于对应该次主循环的FFA_radix值的二分之一,则计算
x[FFA_radix*j+k]=x[FFA_radix*j+k]*W[z]+x[FFA_radix*j+k-FFA_radix/2]。
17.如权利要求9所述的快速傅立叶转换方法,其中针对该序列数据进行位反转系反转该序列数据中各个位从最不重要位至最重要位的顺序,以得到一反转序列数据。
全文摘要
一种快速傅立叶转换方法,被一处理单元载入并执行,用以计算段L数据的快速傅立叶转换,该方法包含令该段L输入数据对应一长度为M的序列数据;计算一乘幂N,使该N值对应该M值;针对该序列数据进行位反转,得到一反转序列数据;依据该N值以及该序列数据长度M计算多组加权参数W[z];以及依据多组循环参数及该多组加权参数W[z]对该反转序列数据进行循环运算后输出该段L数据的快速傅立叶转换值。
文档编号G06F17/14GK1746882SQ200410077069
公开日2006年3月15日 申请日期2004年9月10日 优先权日2004年9月10日
发明者廖伟舜 申请人:明基电通股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1