本發(fā)明涉及數字信號處理技術領域,尤其涉及一種實現快速傅里葉變換的裝置。
背景技術:
快速傅里葉變換fft是離散傅里葉變換dft的一種快速算法,它是一個利用運算的周期性,減少運算量、通常fft可以將時域的數據變換到頻域,同樣的道理ifft可以將頻域的數據變化到時域,這樣對于通信、醫(yī)療、航空等等應用到得到了廣泛利用,標準的fft公式是一個數據的反復迭代過程。
其中,
正反變化的運算量都是相同的,數據都是復數序列,計算一個x(k)值,需要n次復數乘法和n-1次復數加法,x(k)有n個點,所述總共需要n*n次復數乘法和n*(n-1)加法。復數運算實際是用實數運算來完成的,可以推導出:
可以認為一次運算就是一次碟形運算,其中一次碟形運算為4次乘法和3次加法。
可見,常規(guī)的fft運算需要大量的存儲器、乘法器和加(減)法器,越多的位數和點數越多的運算時間和資源開銷。
如果為了增加精度或者增加點數,需要增加2n的查表器(n為數據位數寬度)。比如單精度就要232的查表深度,它的資源開銷是非常大,如果使用4地碟形(減少運算時間)運算,則還需要相應的2倍查表資源,在資源緊張的fpga,或者dsp外掛ddr模塊,或者arm等都需要資源大量的ram。
因此,現有實現快速傅里葉變換的裝置存在資源開銷大的技術問題。
技術實現要素:
本發(fā)明提供了一種實現快速傅里葉變換的裝置,能夠在不影響處理速度的同時解決資源占用的問題。
為解決上述技術問題,本發(fā)明采用的一個技術方案是:提供一種實現快速傅里葉變換的裝置,包括:對數變化器、數據輸入輸出寄存器、碟形引擎、控制模塊、旋轉因子模塊、計算地址模塊以及反對數變化器;
對數變化器用于將待處理的數據通過查表變化為復數的對數域數據;
數據輸入輸出寄存器用于對復數的對數域數據和查表內容進行存儲;
控制模塊用于按照時域抽取順序或頻域抽取順序,發(fā)送地址指令至計算地址模塊;
計算地址模塊用于根據所述地址指令計算當前與復數的對數域數據地址和旋轉因子地址;
碟形引擎用于根據對計算地址給出的復數的對數域數據地址和旋轉因子地址,從數據輸入輸出寄存器查找對應的復數的對數域數據和從旋轉因子模塊查找對應的旋轉因子,并將所述復數的對數數據與旋轉因子進行碟形運算,所述碟形運算包括3個查表操作和4個加法操作;
反對數變化器用于對碟形引擎完成預設次數碟形運算后的運算結果通過查表變換為常規(guī)復數域,完成快速傅里葉變換的運算。。
優(yōu)選地,所述控制模塊還用于計算碟形運算的次數,若碟形運算的次數未達到預設完成次數時,重新按照時域抽取順序或頻域抽取順序,發(fā)送地址指令至計算地址模塊,使得碟形引擎繼續(xù)進行碟形運算。
優(yōu)選地,輸入輸出寄存器還用于在碟形引擎完成每次碟形運算之后,存儲每次碟形運算完成的結果。
優(yōu)選地,所述數據輸入輸出寄存器的長度等于待處理數據的長度。
區(qū)別于現有技術的情況,本發(fā)明的有益效果是:
由于在原有實現標準快速傅里葉變換的裝置的基礎上增加對數變換器和反對數變化器,將待處理的數據由復數轉變?yōu)閷涤驍祿?,然后經過碟形引擎的運算時,能夠將原有運算中的乘法運算和加(減)法運算轉化為單純的加(減)法運算和查表運算,因此,有效降低了資源開銷,提高了運算速度,節(jié)省了乘法器。
附圖說明
圖1是本發(fā)明實施例中實現快速傅里葉變換的裝置的模塊示意圖;
圖2是本發(fā)明實施例中l(wèi)og算法輸出變化曲線示意圖。
具體實施方式
下面將結合本發(fā)明實施例中的附圖,對本發(fā)明實施例中的技術方案進行清楚、完整地描述,顯然,所描述的實施例僅是本發(fā)明的一部分實施例,而不是全部的實施例?;诒景l(fā)明中的實施例,本領域普通技術人員在沒有做出創(chuàng)造性勞動前提下所獲得的所有其他實施例,都屬于本發(fā)明保護的范圍。
本發(fā)明實施例提供了一種實現快速傅里葉變換的裝置,如圖1所示,包括對數變化器10、數據輸入輸出寄存器20、碟形引擎30、控制模塊40、旋轉因子模塊50、計算地址模塊60以及反對數變化器70。
具體地,對數變化器10連接數據輸入輸出寄存器20,該數據輸入輸出寄存器20連接碟形引擎30,碟形引擎30分別連接控制模塊40、旋轉因子模塊50、計算地址模塊60,反對數變化器70連接數據輸入輸出寄存器。
在具體的實施方式中,該對數變化器10用于將待處理的數據通過查表變換為復數的對數域數據,該數據輸入輸出寄存器20用于對復數的對數域數據和查表內容進行存儲,其中,該數據輸入輸出寄存器20的長度與待處理器數據的長度對應。該控制模塊40用于按照時域抽取或頻域抽取順序,發(fā)送地址指令至計算地址模塊60,計算地址模塊60用于根據地址指令計算當前與復數的對數域數據地址和旋轉因子地址,碟形引擎30用于根據對計算地址模塊60給出的復數的對數域數據地址和旋轉因子地址,從數據輸入輸出寄存器20查找對應的復數的對數域數據和從旋轉因子模塊50查找對應的旋轉因子,并將復數的對數域數據與旋轉因子進行碟形運算,該碟形運算包括3個查表操作和4個加法操作,最后,反對數變化器70用于對碟形引擎完成預設次數碟形運算后的運算結果通過查表變換為常規(guī)復數域,完成快速傅里葉變換的運算。
具體地,首先將待處理的數據映射到復數的對數域上,即:
其中,
那么在碟形引擎30中的處理過程就變?yōu)椴楸砗图?減)法操作:
其中,
因此,可以得到每次碟形運算是3個查表操作和4個加法操作,代替了原有的乘法操作和加法操作。由于不再使用乘法操作用的乘法器,因此,降低了資源開銷。
其中,該控制模塊40在碟形引擎30運算過程中,計算該碟形運算的次數,若碟形運算的次數未達到預設完成次數時,重新按照時域抽取順序或頻域抽取順序,發(fā)送地址指令至計算地址模塊60,使得碟形引擎30繼續(xù)進行碟形運算。直到碟形運算的次數達到預設完成次數。
該輸入輸出寄存器20還用于在碟形引擎30完成每次碟形運算之后,存儲每次碟形運算完成的結果,便于輸出。
通過采用上述的技術方案,在碟形引擎30中所做的運算不包含有乘法器的運算,僅存在加(減)法運算,這樣,有效降低了資源開銷,提高了運算速度,節(jié)省了乘法器。
為了增加精度或者增加點數,需要增加2n的查表器(n為數據位數寬度),比如單精度就要232的查表器深度,它的資源開銷是非常大的,如果使用4個碟形引擎(減少運算)進行運算,則需要相應的2倍查表器資源,在資源緊張的fpga,或者dsp外掛ddr模塊,或者arm等都需要資源大量的ram。
本申請中采用“折線算法”,減少對數查表器的存儲資源開銷,可以不影響精度的情況下,大量的下降查表器的資源,在對數變化器和反對數變化器上使用,log算法輸出變化使在于數據精度變化不是線性變化的,而是一個曲線變化,數據越大,log精度變化越小。
由圖2所示,在y軸和x軸變大以后,y軸的變化不夠明顯,可以從該算法減少相應的位數變化,使得折線查表法優(yōu)化對數表和反對數表,它不是簡單的一一對應進行變換而是通過以下的公式進行變換,符號位不變,數值部分:
其中a是一個常數,它的調制是受數據位寬的變化而變化,可以在仿真確定,一般情況可以選擇3-8,u是數據的變化,可以看到la的有效位數可以大大小于32bit(針對于32單精度),如果是雙精度節(jié)省資源更多。
對于一個16bit輸入的logfft模塊,在fpga系統(tǒng)上實現,下表為傳統(tǒng)的fft與新型log-fft資源占用和處理速度的比較:
從上表可以看出,本算法修改后的logff對資源的需求也較傳統(tǒng)的fft近似,但是提高了運算速度,節(jié)省了乘法器,同時回避了logfft的大量的ram資源開銷。
采用本算法可以利用與資源非常緊張的環(huán)境,典型的一個fpga應用環(huán)境,同時大大提高了logfft的運算周期,并減少了ram開銷和slices(fpga的一個標準單元,針對不同的器件型號有可能有4-16個查表器組成)。和標準的fft比較來說fpgaslices開銷小,和常規(guī)的logfft比較來說節(jié)省了ram,同時因為沒有乘法器,整體的運算速度提高了10%-30%(針對不同器件)。
通過上述方式,本發(fā)明實施例的實現快速傅里葉變換的裝置,能夠有效降低資源開銷,提高了運算速度。
以上所述僅為本發(fā)明的實施例,并非因此限制本發(fā)明的專利范圍,凡是利用本發(fā)明說明書及附圖內容所作的等效結構或等效流程變換,或直接或間接運用在其他相關的技術領域,均同理包括在本發(fā)明的專利保護范圍內。