本發(fā)明涉及數(shù)字信號(hào)處理領(lǐng)域,特別涉及一種無需重新排序的小點(diǎn)數(shù)winograd快速傅里葉變換算法(winogradfouriertransformalgorithm,wfta)的實(shí)現(xiàn)方法。
背景技術(shù):
隨著無線通信業(yè)務(wù)的不斷增長(zhǎng),可利用的頻譜資源日益緊張。為了提高頻譜利用率和通信質(zhì)量,現(xiàn)代無線通信系統(tǒng)廣泛采用對(duì)頻率選擇性衰落具有較強(qiáng)免疫力的正交頻分復(fù)用(orthogonalfrequencyduplexmultiplexing,ofdm)技術(shù)。ofdm技術(shù)的核心是fft。fft的點(diǎn)數(shù)分為2的冪次和非2冪次兩種。點(diǎn)數(shù)是2的冪次的fft算法和實(shí)現(xiàn)比較成熟。相比之下,非2冪次點(diǎn)數(shù)的fft更為靈活,近年來在drm、dtmb、lte系統(tǒng)中開始得到應(yīng)用。因此,非2冪次點(diǎn)數(shù)fft的算法和實(shí)現(xiàn)值得深入研究。
目前,素因子算法(primefactoralgorithm,pfa)是最有效的非2冪次fft,它采用嵌套多維結(jié)構(gòu),能有效降低計(jì)算復(fù)雜度。對(duì)于n點(diǎn)非2冪次fft,假設(shè)n可分解為s個(gè)兩兩互素因子的乘積,即n=n1n2…ns。n點(diǎn)pfa的基本原理是,把一維大點(diǎn)數(shù)fft映射成s維小點(diǎn)數(shù)fft,第i(i=1,2,…,s)維fft進(jìn)行n/ni次ni點(diǎn)小點(diǎn)數(shù)fft。小點(diǎn)數(shù)fft可借助于cooley-tukey算法、wfta以及其它高效算法。
在某些情況下,pfa需要重新排序。根據(jù)在計(jì)算過程中所處的位置,重新排序分為預(yù)擾亂和后擾亂。不考慮ni(i=1,2,…,s)點(diǎn)fft的內(nèi)部機(jī)制,如果第i維fft無需重新排序,那么它是同址的;否則,它是變址的,重新排序是在ni點(diǎn)序列內(nèi)進(jìn)行的,預(yù)擾亂和后擾亂分別在ni點(diǎn)fft之前和之后執(zhí)行。類似地,不考慮每維fft的內(nèi)部機(jī)制,如果n點(diǎn)pfa整體上無需重新排序,那么它是同序的;否則,它是變序的,重新排序是在n點(diǎn)序列內(nèi)進(jìn)行的,預(yù)擾亂和后擾亂分別在第一維fft開始前和最后一維fft結(jié)束后執(zhí)行。這樣,pfa理論上可分為4種:變址變序、變址同序、同址同序和同址變序。
目前,pfa要么是變址同序的,要么是同址變序的,不可避免地引入了重新排序操作。眾所周知,重新排序意味著必須增加一級(jí)緩沖區(qū),需要消耗較多的存儲(chǔ)器資源,會(huì)增加硬件成本。此外,重新排序還會(huì)降低運(yùn)算速度,增加控制的復(fù)雜度。與同址變序pfa相比,變址同序pfa消耗較少的存儲(chǔ)器資源,兩者重新排序的總延時(shí)完全相同,都是n個(gè)時(shí)鐘周期,因此,變址同序pfa更可取。
技術(shù)實(shí)現(xiàn)要素:
針對(duì)pfa的現(xiàn)有實(shí)現(xiàn)方案中存在的需要重新排序這一技術(shù)缺點(diǎn),本發(fā)明提供了無需重新排序的三點(diǎn)winograd傅里葉變換器。當(dāng)n點(diǎn)非2冪次fft采用變址同序pfa實(shí)現(xiàn)時(shí),如果n的某一互素因子ni=3(i=1,2,…,s),那么使用本專利無需對(duì)第i維fft重新排序。
為了去除第i維3點(diǎn)fft的重新排序操作,需要修改常規(guī)的3點(diǎn)wfta。常規(guī)的3點(diǎn)wfta的對(duì)角矩陣是固定不變的,本發(fā)明將對(duì)角矩陣對(duì)角線上的各元素表示成角度參數(shù)θ=2π/3*<n/3>3的函數(shù),其中,<n/3>3表示對(duì)n/3取模3操作。對(duì)于不同的n,修改的3點(diǎn)wfta的對(duì)角矩陣不盡相同。
對(duì)于第i維fft,需進(jìn)行n/3次無需重新排序的3點(diǎn)wfta,無需重新排序,簡(jiǎn)化了控制邏輯,共節(jié)約了n/3*3=n個(gè)時(shí)鐘周期,提高了運(yùn)算速度,存儲(chǔ)器消耗減少了一半,降低了硬件成本。
關(guān)于本發(fā)明的優(yōu)點(diǎn)與精神可通過接下來的發(fā)明詳述及附圖得到進(jìn)一步的了解。
附圖說明
圖1是常規(guī)的三點(diǎn)winograd傅里葉變換器的功能框圖;
圖2是輸入矩陣i的具體構(gòu)成;
圖3是輸出矩陣o的具體構(gòu)成;
圖4是對(duì)角矩陣d對(duì)角線上的具體構(gòu)成;
圖5是預(yù)擾亂的三點(diǎn)winograd傅里葉變換器的結(jié)構(gòu)示意圖;
圖6是后擾亂的三點(diǎn)winograd傅里葉變換器的結(jié)構(gòu)示意圖;
圖7是無需重新排序的三點(diǎn)winograd傅里葉變換器的功能框圖;
圖8是可變對(duì)角矩陣a對(duì)角線上的具體構(gòu)成。
具體實(shí)施方式
下面結(jié)合附圖和具體實(shí)施例對(duì)本發(fā)明作進(jìn)一步說明,但不作為對(duì)本發(fā)明的限定。
n點(diǎn)序列x(n)的fft為
其中,n,k=0,1,…,n-1,wn=e-j2π/n。直接計(jì)算n點(diǎn)fft的乘法和加法運(yùn)算量都與n的平方成正比。當(dāng)n較大時(shí),運(yùn)算量很大。
為了降低計(jì)算復(fù)雜度,當(dāng)n不是2的冪次時(shí),可采用嵌套多維的pfa實(shí)現(xiàn)n點(diǎn)fft。假設(shè)n可分解為s個(gè)兩兩互素因子的乘積,即n=n1n2…ns。也就是說,任意兩個(gè)因子ni和nj(i,j=1,2,…,s,且i≠j)的最大公約數(shù)是1。注意,ni未必是素?cái)?shù)。n點(diǎn)pfa的基本原理是,把一維大點(diǎn)數(shù)fft映射成s維fft,第i維fft進(jìn)行n/ni次ni點(diǎn)小點(diǎn)數(shù)fft。小點(diǎn)數(shù)fft可借助于cooley-tukey算法、wfta以及其它高效算法。
為了使pfa總體上是同序的,在一維fft映射成s維fft時(shí),根據(jù)中國(guó)余數(shù)定理,輸入索引n和輸出索引k采用如下相同的映射方式:
其中,符號(hào)<>n表示模n運(yùn)算,ni,ki=0,1,…,ni-1。將式(2)和(3)代入式(1),整理可得:
其中,
對(duì)比式(2)和(3)容易發(fā)現(xiàn),索引n和k的映射方式本質(zhì)上完全相同。因此,只要式(4)中每維fft的索引ni和ki都是自然順序的,n點(diǎn)pfa就是同序的。
在式(4)中,第i(i=1,2,…,s)維fft的傅里葉變換因子可寫作
或
式中,
眾所周知,常規(guī)的ni點(diǎn)fft算法的輸入和輸出都是按照自然順序的。如果式(4)中的第i維fft采用常規(guī)的ni點(diǎn)fft算法,那么式(5)是按照ni的自然順序輸入、k′i的自然順序輸出,式(6)則是按照n′i的自然順序輸入、ki的自然順序輸出。然而,由式(2)和(3)可知,同序pfa要求式(4)中的第i維fft按照ni的自然順序輸入、ki的自然順序輸出。可見,如果式(4)中的第i維fft采用常規(guī)的ni點(diǎn)fft算法,那么必須重新排序。具體而言,式(5)和(6)分別根據(jù)式(7)和(8)中的規(guī)則進(jìn)行后擾亂和預(yù)擾亂??梢姡?4)中的第i維fft是變址的。變址通過重新排序?qū)崿F(xiàn)。為了去掉重新排序這一額外操作,我們必須修改常規(guī)的ni點(diǎn)fft算法,將重新排序操作吸納其中。
常規(guī)的ni點(diǎn)wfta可用向量與矩陣的連乘表示,即
v=o*d*i*v(9)
其中,v和v分別是由ni點(diǎn)輸入和輸出序列構(gòu)成的向量,i和o分別是輸入和輸出矩陣,d是對(duì)角矩陣。通常,矩陣i和o中的元素都只可能是0、±1和±j,與向量相乘時(shí)不涉及實(shí)質(zhì)性乘法。對(duì)于對(duì)角矩陣d,除對(duì)角上的元素非零外,其它位置上的元素均為0。
當(dāng)ni=3時(shí),n點(diǎn)變址同序pfa的第i維fft可采用3點(diǎn)wfta。圖1給出了常規(guī)的三點(diǎn)winograd傅里葉變換器的功能框圖。3點(diǎn)輸入序列構(gòu)成向量v,它先與矩陣i相乘,運(yùn)算所得向量再與對(duì)角矩陣d相乘,運(yùn)算所得向量最后與矩陣o相乘,運(yùn)算所得向量v即為3點(diǎn)輸出序列。圖2和3分別給出了輸入矩陣i和輸出矩陣o的具體構(gòu)成。圖4給出了對(duì)角矩陣d對(duì)角線上的具體構(gòu)成,從左上角到右下角的元素分別是d0~d2。
變址同序pfa第i維fft的變址是通過重新排序?qū)崿F(xiàn)的。當(dāng)ni=3時(shí),圖5和6分別給出了預(yù)擾亂和后擾亂的三點(diǎn)winograd傅里葉變換器的結(jié)構(gòu)示意圖。為了去掉預(yù)擾亂或后擾亂中的重新排序操作,我們必須修改常規(guī)的ni=3點(diǎn)wfta,將重新排序操作吸納其中。
圖7給出了無需重新排序的三點(diǎn)winograd傅里葉變換器的功能框圖,它主要由輸入矩陣i、可變對(duì)角矩陣a、輸出矩陣o和復(fù)數(shù)乘法器四種功能模塊組成。輸出向量與輸入向量滿足:v=o*a*i*v。與常規(guī)的3點(diǎn)wfta相比,無需重新排序的3點(diǎn)wfta的矩陣i和o均保持不變,對(duì)角矩陣不再是常數(shù),其對(duì)角線上的各元素修改為角度參數(shù)θ=2π/3*<n/3>3的函數(shù),其中,<n/3>3表示對(duì)n/3取模3操作。圖8給出了可變對(duì)角矩陣a對(duì)角線上的具體構(gòu)成,從左上角到右下角的元素分別是a0~a2。對(duì)于不同的n,無需重新排序的3點(diǎn)wfta的對(duì)角矩陣不盡相同。
本發(fā)明提供了一種去除變址同序pfa中3點(diǎn)wfta重新排序的方法,當(dāng)ni=3時(shí),n點(diǎn)變址同序pfa的第i維fft可通過n/3次無需重新排序的3點(diǎn)wfta加以實(shí)現(xiàn),其步驟如下:
(1)根據(jù)n確定角度參數(shù)θ=2π/3*<n/3>3的具體取值,在此基礎(chǔ)上初始化可變對(duì)角矩陣a對(duì)角線上各元素的數(shù)值,使a變?yōu)槌?shù),初始化變量l=0(0≤l<n/3);
(2)從輸入序列x[n]中讀取3個(gè)數(shù)據(jù),它們的索引是n=<n/3*m+3*l>n(0≤m<3),它們構(gòu)成向量v;
(3)通過復(fù)數(shù)乘法器m1,輸入矩陣i與向量v相乘,得到向量p;
(4)通過復(fù)數(shù)乘法器m2,可變對(duì)角矩陣a與向量p相乘,得到向量q;
(5)通過復(fù)數(shù)乘法器m3,輸出矩陣o與向量q相乘,得到向量v;
(6)將向量v中的3個(gè)數(shù)據(jù)依次寫入到輸出序列x[k]中,寫入的索引與讀取的索引完全相同,仍然是k=<n/3*m+3*l>n;
(7)以1為步長(zhǎng)遞增改變l的取值,重復(fù)步驟(2)~(6),直到完成n/3次無需重新排序的3點(diǎn)wfta。
如果n點(diǎn)變址同序pfa的第i維fft采用常規(guī)的3點(diǎn)wfta,那么每次重新排序需要3個(gè)時(shí)鐘周期,這意味執(zhí)行n/3次常規(guī)的3點(diǎn)wfta共需n/3*3=n個(gè)時(shí)鐘周期進(jìn)行重新排序??梢姡鬾點(diǎn)變址同序pfa的第i維fft采用本發(fā)明,則無需重新排序,從而簡(jiǎn)化控制邏輯,可節(jié)約n個(gè)時(shí)鐘周期,提高了運(yùn)算速度,存儲(chǔ)器需求可減少一半,降低了硬件成本。
以上通過具體實(shí)施方式和實(shí)施例對(duì)本發(fā)明進(jìn)行了詳細(xì)的說明,對(duì)于本領(lǐng)域的技術(shù)人員來說,在不脫離本發(fā)明原理的情況下,還可做出若干變形和改進(jìn),這些也應(yīng)視為本發(fā)明的保護(hù)范圍。