一種fft處理器的運(yùn)算方法
【技術(shù)領(lǐng)域】
[0001] 本發(fā)明涉及可編程處理器,特別涉及一種FFT處理器的運(yùn)算方法。
【背景技術(shù)】
[0002] 在通訊和雷達(dá)信號(hào)處理中,F(xiàn)FT是一種常用的工具,在速度要求比較高或集成度較 高的情況下大多使用FPGA完成。絕大多數(shù)的處理器處理數(shù)據(jù)采用定點(diǎn)數(shù)據(jù)格式,這樣雖然 使得處理結(jié)構(gòu)相對(duì)簡(jiǎn)單,但是溢出現(xiàn)象則比較嚴(yán)重,而采用簡(jiǎn)單的定點(diǎn)截位又會(huì)將小信號(hào) 淹沒(méi)在大信號(hào)之中,使結(jié)果數(shù)據(jù)失去必要的精度。隨著對(duì)數(shù)據(jù)精度的要求越來(lái)越高,一般的 定點(diǎn)算法已經(jīng)無(wú)法滿足高精度的要求,需要求助于浮點(diǎn)處理器來(lái)進(jìn)行運(yùn)算,以避免應(yīng)用中 的溢出問(wèn)題。國(guó)外的FFTCore大多采用定點(diǎn)運(yùn)算或塊浮點(diǎn)運(yùn)算,國(guó)外的FFTCore-般采 用小于24位定點(diǎn)或小于24位塊浮點(diǎn)。但是浮點(diǎn)處理器消耗資源比較大,包含有復(fù)雜的硬 件結(jié)構(gòu)(浮點(diǎn)執(zhí)行單元),從而大大地增加了設(shè)計(jì)成本和功耗,降低了計(jì)算效率。在同樣的 處理速度下,浮點(diǎn)處理器相對(duì)昂貴,功耗較大。浮點(diǎn)運(yùn)算執(zhí)行單元只能自行設(shè)計(jì),在設(shè)計(jì)過(guò) 程還要考慮運(yùn)算精度、運(yùn)算速度、資源占用、設(shè)計(jì)復(fù)雜度的折衷等。因此相對(duì)定點(diǎn)運(yùn)算而言, 浮點(diǎn)運(yùn)算具有開(kāi)發(fā)難度大、研發(fā)周期長(zhǎng)、研制費(fèi)用高等缺點(diǎn)。
[0003] 因此,針對(duì)相關(guān)技術(shù)中所存在的上述問(wèn)題,目前尚未提出有效的解決方案。
【發(fā)明內(nèi)容】
[0004] 為解決上述現(xiàn)有技術(shù)所存在的問(wèn)題,本發(fā)明提出了一種FFT處理器的運(yùn)算方法, 包括:
[0005] 在FPGA的程序中設(shè)置多級(jí)蝶形運(yùn)算,每一級(jí)共用一個(gè)塊浮點(diǎn)移位因子;通過(guò)數(shù)據(jù) 在每級(jí)運(yùn)算前根據(jù)上一次的塊浮點(diǎn)因子判決狀態(tài)進(jìn)行判斷,來(lái)決定該次數(shù)據(jù)存儲(chǔ)器輸出時(shí) 的移位選擇,通過(guò)對(duì)每級(jí)的移位之和來(lái)控制最后輸出的增益。
[0006] 優(yōu)選地,該方法還包括:
[0007] 在FFT運(yùn)算之前,所有數(shù)據(jù)按照順序地址的形式排列,每級(jí)蝶形運(yùn)算前取數(shù)地址 和運(yùn)算結(jié)束后存數(shù)地址相同;第一級(jí)所取每?jī)蓚€(gè)數(shù)地址相隔為總點(diǎn)數(shù)的一半,每一級(jí)是上 一級(jí)相隔點(diǎn)數(shù)的一半,每級(jí)蝶形運(yùn)算是流水線操作,每個(gè)時(shí)鐘都從存儲(chǔ)器讀取數(shù)據(jù),通過(guò)在 主程序中定義一個(gè)時(shí)鐘計(jì)數(shù)器和一個(gè)級(jí)數(shù)計(jì)數(shù)器,級(jí)數(shù)計(jì)數(shù)器隨級(jí)數(shù)的增加自加,在每完 成一個(gè)FFT之后清零,時(shí)鐘計(jì)數(shù)器隨每一個(gè)時(shí)鐘自加,在每完成一級(jí)FFT之后清零,通過(guò)將 時(shí)鐘計(jì)數(shù)器減去一次蝶形運(yùn)算耗費(fèi)的時(shí)鐘數(shù)來(lái)實(shí)現(xiàn)讀取數(shù)據(jù)和存儲(chǔ)數(shù)據(jù)地址的一致性,并 將時(shí)鐘計(jì)數(shù)器循環(huán)右移來(lái)產(chǎn)生每次兩個(gè)數(shù)據(jù)之間的地址間隔。
[0008] 優(yōu)選地,該方法還包括:
[0009] 在基二DIF形式FFT運(yùn)算中,每一級(jí)的蝶形輸入的原始數(shù)據(jù)之間首先進(jìn)行的是簡(jiǎn) 單的加減運(yùn)算,將每級(jí)所有數(shù)據(jù)在進(jìn)入蝶形時(shí)需要左移/右移,如果是將所有數(shù)據(jù)右移一 位,那么就使該級(jí)輸出數(shù)據(jù)格式相對(duì)于該級(jí)輸入數(shù)據(jù)格式來(lái)說(shuō)多了一位小數(shù)位,每級(jí)運(yùn)算 后為前一級(jí)的1/2,并將其稱為浮點(diǎn)因子,經(jīng)過(guò)m級(jí)的蝶形迭代后,如果總共右移了m位,即 浮點(diǎn)因子位m,則計(jì)算結(jié)果數(shù)據(jù)放大2m倍后得到最終結(jié)果。
[0010] 本發(fā)明相比現(xiàn)有技術(shù),具有以下優(yōu)點(diǎn):
[0011] 本發(fā)明提出了一種浮點(diǎn)運(yùn)算方法,解決了定點(diǎn)算法和浮點(diǎn)算法之間的矛盾,提高 了浮點(diǎn)運(yùn)算效率,降低了成本。
【附圖說(shuō)明】
[0012] 圖1是根據(jù)本發(fā)明實(shí)施例的FFT處理器的運(yùn)算方法的流程圖。
[0013] 圖2為根據(jù)本發(fā)明實(shí)施例的塊浮點(diǎn)FFT結(jié)構(gòu)圖。
[0014] 圖3為根據(jù)本發(fā)明實(shí)施例的三位塊浮點(diǎn)因子判決程序流程圖。
【具體實(shí)施方式】
[0015] 下文與圖示本發(fā)明原理的附圖一起提供對(duì)本發(fā)明一個(gè)或者多個(gè)實(shí)施例的詳細(xì)描 述。結(jié)合這樣的實(shí)施例描述本發(fā)明,但是本發(fā)明不限于任何實(shí)施例。本發(fā)明的范圍僅由權(quán) 利要求書限定,并且本發(fā)明涵蓋諸多替代、修改和等同物。在下文描述中闡述諸多具體細(xì)節(jié) 以便提供對(duì)本發(fā)明的透徹理解。出于示例的目的而提供這些細(xì)節(jié),并且無(wú)這些具體細(xì)節(jié)中 的一些或者所有細(xì)節(jié)也可以根據(jù)權(quán)利要求書實(shí)現(xiàn)本發(fā)明。
[0016] 本發(fā)明的一方面提供了一種FFT處理器的運(yùn)算方法。圖1是根據(jù)本發(fā)明實(shí)施例的 FFT處理器的運(yùn)算方法流程圖。
[0017] FFT是將原有N點(diǎn)序列分解成為兩個(gè)或更多的較短序列,這些短序列的DFT可重新 組合成原序列的DFT,而總的運(yùn)算次數(shù)確比直接的DFT少的多,可以極大的降低計(jì)算量,從 而達(dá)到提高運(yùn)算速度的目的?;﨑IF形式FFT是將頻域X(k)按序號(hào)k的奇、偶分開(kāi),假 設(shè)N= 2m,則第一次分開(kāi)得到兩個(gè)N/2點(diǎn)的DFT,稱為第一級(jí)(Classm);再將其分別分解可 得到四個(gè)N/4點(diǎn)的DFT,稱為第二級(jí)(Classm- 1);依次類推,直到得到兩點(diǎn)的DFT。FFT 運(yùn)算的基本單元是蝶形運(yùn)算單元,基二DIF的蝶形運(yùn)算單元運(yùn)算式如下所示:
[0018] x' a+jy'a=xa+xb+j(ya+yb)
[0019] x'b+jy' b= (xa-xb)wr-(ya_yb)W^K(Xa-Xb)Wi+(ya_yb)wr]
[0020]即:x,a=Xa+Xb
[0021] y'a=(ya+yb)
[0022] x' b= (xa-xb)wr-(ya_yb)Wi
[0023] y' b= (xa-xb)Wi+(ya_yb)wr
[0024] 從上式可以得出,基二蝶形運(yùn)算只需一次復(fù)數(shù)乘法和兩次復(fù)數(shù)加法,則N= 2"個(gè)
【主權(quán)項(xiàng)】
1. 一種FFT處理器的運(yùn)算方法,其特征在于,包括: 在FPGA的程序中設(shè)置多級(jí)蝶形運(yùn)算,每一級(jí)共用一個(gè)塊浮點(diǎn)移位因子;通過(guò)數(shù)據(jù)在每 級(jí)運(yùn)算前根據(jù)上一次的塊浮點(diǎn)因子判決狀態(tài)進(jìn)行判斷,來(lái)決定該次數(shù)據(jù)存儲(chǔ)器輸出時(shí)的移 位選擇,通過(guò)對(duì)每級(jí)的移位之和來(lái)控制最后輸出的增益。
2. 根據(jù)權(quán)利要求1所述的方法,其特征在于,該方法還包括: 在FFT運(yùn)算之前,所有數(shù)據(jù)按照順序地址的形式排列,每級(jí)蝶形運(yùn)算前取數(shù)地址和運(yùn) 算結(jié)束后存數(shù)地址相同;第一級(jí)所取每?jī)蓚€(gè)數(shù)地址相隔為總點(diǎn)數(shù)的一半,每一級(jí)是上一級(jí) 相隔點(diǎn)數(shù)的一半,每級(jí)蝶形運(yùn)算是流水線操作,每個(gè)時(shí)鐘都從存儲(chǔ)器讀取數(shù)據(jù),通過(guò)在主程 序中定義一個(gè)時(shí)鐘計(jì)數(shù)器和一個(gè)級(jí)數(shù)計(jì)數(shù)器,級(jí)數(shù)計(jì)數(shù)器隨級(jí)數(shù)的增加自加,在每完成一 個(gè)FFT之后清零,時(shí)鐘計(jì)數(shù)器隨每一個(gè)時(shí)鐘自加,在每完成一級(jí)FFT之后清零,通過(guò)將時(shí)鐘 計(jì)數(shù)器減去一次蝶形運(yùn)算耗費(fèi)的時(shí)鐘數(shù)來(lái)實(shí)現(xiàn)讀取數(shù)據(jù)和存儲(chǔ)數(shù)據(jù)地址的一致性,并將時(shí) 鐘計(jì)數(shù)器循環(huán)右移來(lái)產(chǎn)生每次兩個(gè)數(shù)據(jù)之間的地址間隔。
3. 根據(jù)權(quán)利要求2所述的方法,其特征在于,該方法還包括: 在基二DIF形式FFT運(yùn)算中,每一級(jí)的蝶形輸入的原始數(shù)據(jù)之間首先進(jìn)行的是簡(jiǎn)單的 加減運(yùn)算,將每級(jí)所有數(shù)據(jù)在進(jìn)入蝶形時(shí)需要左移/右移,如果是將所有數(shù)據(jù)右移一位,那 么就使該級(jí)輸出數(shù)據(jù)格式相對(duì)于該級(jí)輸入數(shù)據(jù)格式來(lái)說(shuō)多了一位小數(shù)位,每級(jí)運(yùn)算后為前 一級(jí)的1/2,并將其稱為浮點(diǎn)因子,經(jīng)過(guò)m級(jí)的蝶形迭代后,如果總共右移了 m位,即浮點(diǎn)因 子位m,則計(jì)算結(jié)果數(shù)據(jù)放大2-倍后得到最終結(jié)果。
【專利摘要】本發(fā)明提供了一種FFT處理器的運(yùn)算方法,該方法包括:在FPGA的程序中設(shè)置多級(jí)蝶形運(yùn)算,每一級(jí)共用一個(gè)塊浮點(diǎn)移位因子;通過(guò)數(shù)據(jù)在每級(jí)運(yùn)算前根據(jù)上一次的塊浮點(diǎn)因子判決狀態(tài)進(jìn)行判斷,來(lái)決定該次數(shù)據(jù)存儲(chǔ)器輸出時(shí)的移位選擇,通過(guò)對(duì)每級(jí)的移位之和來(lái)控制最后輸出的增益。本發(fā)明提出了一種浮點(diǎn)運(yùn)算方法,解決了定點(diǎn)算法和浮點(diǎn)算法之間的矛盾,提高了浮點(diǎn)運(yùn)算效率,降低了成本。
【IPC分類】G06F17-14
【公開(kāi)號(hào)】CN104679721
【申請(qǐng)?zhí)枴緾N201510116879
【發(fā)明人】黃建喜, 劉宇波
【申請(qǐng)人】成都金本華科技股份有限公司
【公開(kāi)日】2015年6月3日
【申請(qǐng)日】2015年3月17日