文獻標識碼: A
文章編號: 0258-7998(2011)04-0051-04
FFT(快速傅里葉變換)在無線通信、語音識別、圖像處理和頻譜分析等領域有著廣泛應用。在FFT運算中,核心操作是蝶形運算,而蝶形運算的主要操作是向量旋轉,實現向量旋轉可用復數乘法運算來實現,但復數乘耗費了FFT運算中大量的乘法器資源。CORDIC算法只需簡單的移位與加減運算就能實現向量旋轉,具有使用資源少、硬件規(guī)模小等優(yōu)勢。因此在FFT蝶形運算中用其代替?zhèn)鹘yFFT運算中的復數乘法器,可以獲得更好的性能。但傳統CORDIC算法中每次CORDIC迭代方向需由剩余角度的計算來確定,影響了工作速度。為此,本文根據定點FFT復乘中旋轉因子的旋轉方向可預先確定的特點,對CORDIC算法做了一些改進,在節(jié)省資源的同時保證了工作速度。
1 CORDIC算法原理
假設直角坐標系中有一向量A(Xa,Ya),逆時針旋轉?茲角度后得到另一個向量B(Xb,Yb),這個過程可用如下矩陣表示:
針對這一特點,可在CORDIC算法上做一點改進,把旋轉因子所對應的CORDIC旋轉系數預先存在ROM中(人工計算旋轉系數比較麻煩,可用MATLAB編一段程序來計算,并把旋轉系數存為.mif文件以便ROM初始化),而不是把旋轉因子角度預先存在ROM中。這樣,在進行CORDIC運算時,直接從ROM中取出旋轉系數,從而減少計算Zi來確定下一步旋轉方向的步驟,減少CORDIC模塊設計的復雜性,提高了運算速度,并且旋轉系數不比旋轉因子角度占用的ROM資源多。另外由于旋轉因子需要進行0°、-90°或+90°三種預旋轉,所以預旋轉還要分配兩位二進制數,這樣存儲旋轉系數的ROM就為18位的ROM。
改進的CORDIC算法結構如圖1所示,所有旋轉因子所對應的CORDIC旋轉系數都存儲在ROM中,通過地址產生器的控制實現序列與相應的旋轉因子的復乘運算。與傳統CORDIC算法相比去掉了預旋轉角與已旋轉角之差的計算來確定下一次旋轉方向的結構,不但增加了系數寄存器模塊,而且總體上結構更為簡單。此CORDIC算法還采用流水線結構提高了運算的速度,從當前VLSI的發(fā)展趨勢上來看,芯片內的門資源相對富裕,對流水線CORDIC的實現規(guī)模約束很小。此外,流水線CORDIC不存在迭代式CORDIC的反饋回路,使得單元結構更加規(guī)則,有利于VLSI實現。
3.3 模校正因子的實現
基本CORDIC算法中在n級迭代執(zhí)行之后,被旋轉向量的模已經被改變了,算法的完全實現應該附加一個模校正環(huán)節(jié),即Xn、Yn乘以模校正因子。對于迭代次數N大于10的CORDIC算法,其模校正因子可認為已趨近常數K=0.607 25。而直接在流水結構后附加乘法器的直接實現方法,使原本由移位器和加法器組成的整體結構變得不規(guī)則,同時乘法器一級速度的變慢會降低整個流水的吞吐率[3,4]。
這樣分解后,被旋轉向量與K的乘轉化為簡單的移位加減運算,從而可以解決乘法器一級速度變慢而降低整個流水線吞吐率的問題。其硬件實現結構如圖2所示。這種結構進一步降低了硬件復雜度,與前面的流水線CORDIC結構相似,使整體結構更加規(guī)則統一,有利于VLSI實現。
4 FFT復乘的FPGA實現
由于軟件和DSP實現的速度較慢,而FPGA資源豐富,組織結構便于采用流水線結構和并行運算,其速度快、擴展能力強,所以CORDIC算法的移位、加減法運算和流水線結構更容易在FPGA上實現。本文在Altera公司的QuartusⅡ7.2軟件環(huán)境下使用VHDL,利用上述各種算法設計了16 bit寬的FFT復乘模塊并在CycloneⅡ EP2C35F672C6芯片上進行驗證。
圖3為改進的16級流水線結構的CORDIC算法實現復乘模塊的頂層結構圖,address為ROM的地址,Xi_re、Xi_im為輸入序列的實部和虛部,Xo_re、Xo_im為旋轉后的實部和虛部。輸入數據為16 bit寬,為提高精度,對所有內部信號及輸出信號都用20 bit的補碼。整個復乘主要由系數ROM、預旋轉、16級流水線CORDIC迭代、系數寄存器和模校正因子K 5個模塊組成。
小,但不能完全消除。
圖5為改進的CORDIC算法實現FFT復乘資源消耗與最高工作速度情況。傳統的復乘要4個乘法器,所以傳統的復乘要實現16 bit位寬復乘需用此芯片中的8個9 bit乘法單元,而從資源消耗情況來看,改進的CORDIC算法實現此復乘沒有用乘法器,整個邏輯單元消耗也只有4%;另外基于改進的CORDIC算法的復乘最高工作頻率達到了190 MHz,與傳統CORDIC算法的復乘速度(約130 MHz)相比有較大提高,在節(jié)約資源的同時提高了工作速度。
本文利用定點FFT復乘運算中旋轉因子的旋轉系數可預先求出的特點,采用改進流水線結構的CORDIC算法,與傳統的CORDIC算法的復乘相比,不僅不需要乘法器實現了FFT運算中序列與旋轉因子的復數乘運算,并且在節(jié)約資源的同時提升了工作速度。這種基于改進的CORDIC算法的復乘運算對提高FFT處理器的速度和減少資源消耗有較大意義。同時,利用VHDL語言,采用模塊化設計思想,使得本設計可移植性強、通用性好,只需作少量改動(如增加位寬,增加迭代次數),便可滿足精度上的更高要求,具有一定的工程實際意義和應用前景。
參考文獻
[1] 李成詩,初建朋.基于CORDIC的一種高速實時定點FFT的FPGA實現[J].微電子學與計算機,2004,21(4).
[2] 吳偉,唐斌.現代雷達中的高速FFT設計[J].空軍工程大學學報(自然科學版),2005(10).
[3] KHARRAT M W,LOULOU M,MASMOUDI N,et al.A new method to implement CORDIC algorithm[C].IEEE International Conference on Electronic,Circuit and Systems,2001(2):715-718.
[4] 楊宇,毛志剛,來逢昌.一種改進的流水線CORDIC算法結構[J].微處理機,2006(8).
[5] 李滔.流水線CORDIC算法及其應用研究[D].北京理工大學,1999.