《電子技術(shù)應(yīng)用》
您所在的位置:首頁 > 嵌入式技術(shù) > 業(yè)界動態(tài) > 實序列并行IFFT在Blackfin DSP上的實現(xiàn)

實序列并行IFFT在Blackfin DSP上的實現(xiàn)

2009-06-03
作者:李 剛, 高 峰, 林 凌

  摘 要: 針對DSP上常用的實序列IFFT算法運算速度慢的缺陷,采用兩行實序列合并為一行復(fù)序列進行IFFT運算的方法編制了在Blackfin系列DSP上進行實序列基-2 IFFT運算的程序。實驗表明,結(jié)合DSP指令的并行性及硬件并行結(jié)構(gòu)的軟件設(shè)計提高了運算速度,完成兩行512點實序列的IFFT運算只需要11864個時鐘周期,為原來方法所需時間的一半。該方法應(yīng)用于基于BF561的并行頻域OCT圖像處理系統(tǒng)中,滿足系統(tǒng)實時處理的要求。
  關(guān)鍵詞: 實序列IFFT; Blackfin DSP; 并行

?

  離散傅里葉逆變換(IDFT)是一種將離散信號從頻域轉(zhuǎn)變?yōu)闀r域表示的變換手段,其快速算法——快速傅里葉逆變換(IFFT)在數(shù)字信號處理過程中得到廣泛使用。
  實際應(yīng)用中經(jīng)常遇到實序列的IFFT運算[1-2]。如在如圖1所示的并行頻域OCT(Parallel Spectral-Domain Optical Coherence Tomography,PSDOCT)圖像處理系統(tǒng)中,需要對攝像機輸入的像素為180×512的頻域圖像在DSP內(nèi)進行逐行IFFT運算及幅度譜運算后得到反映樣品深度信息的空域?qū)游鰣D像[3]并輸出顯示。由于系統(tǒng)需要進行25幀/s視頻速度的實時處理,而常用的把實數(shù)數(shù)據(jù)當(dāng)作虛部為0的復(fù)數(shù)數(shù)據(jù)進行IFFT運算的方式浪費了其中一半的運算量和存儲量,不能滿足實時處理的要求。鑒于此,本文介紹了一種將兩行實序列合并為一行復(fù)序列進行IFFT運算的方法[4],并且結(jié)合ADI公司Blackfin系列DSP指令的并行性及硬件的并行結(jié)構(gòu)[5-6],編制了512點實序列IFFT并行運算程序。實驗表明,該方法對兩行實序列運算所需的周期數(shù)約為直接進行復(fù)數(shù)計算周期數(shù)的一半,可以滿足并行頻域OCT圖像處理系統(tǒng)實時處理的要求。

?


1 實序列IFFT并行運算原理
  進行N點實數(shù)X(k)的IFFT 運算時,一般的方法是把實數(shù)數(shù)據(jù)當(dāng)作虛部為0的復(fù)數(shù)數(shù)據(jù)來處理。由于這種函數(shù)的時域呈現(xiàn)如式1所示的復(fù)數(shù)共軛對稱的性質(zhì),所以運算所需的2N個存儲單元中有一半是多余的,并且所耗的運算量與復(fù)數(shù)IFFT相同,沒有達到優(yōu)化設(shè)計的目的。為了節(jié)約DSP 片內(nèi)資源并且加快運算速度,可以將兩行實序列組合為復(fù)序列進行處理。設(shè)有兩個N點的實序列X(k)與Y(k),整合為復(fù)序列Z(k)=X(k)+Y(k)j 。根據(jù)IDFT的線性和對稱性可得X(k)與Y(k)處理結(jié)果x(n)、y(n)與Z(k)的結(jié)果z(n)的關(guān)系式,如式(2)、(3)所示。
 
  這樣就將x(n)、y(n)從z(n)中分離出來。該方法將運算速度提高了近一倍,并且運算需要的存儲量減少了一半。
2 算法在Blackfin DSP上的實現(xiàn)
  Blackfin系列DSP是ADI公司和Intel 公司合作推出的基于微信號體系結(jié)構(gòu)(Micro Signal Architecture)技術(shù)的定點DSP,整合了傳統(tǒng)體系結(jié)構(gòu)DSP和RISC控制器的優(yōu)點。該系列器件具有多級流水線結(jié)構(gòu),含有2個乘加運算(MAC)單元,并集成了大量的外圍設(shè)備和存儲器接口,每秒最高可執(zhí)行1.2億次乘加運算,適用于實時圖像處理。由于在圖像處理過程中經(jīng)常會遇到對實序列進行離散傅里葉逆變換的問題,所以需要設(shè)計一種優(yōu)化的實序列IFFT程序。下面選用Blackfin系列中的BF561進行實序列并行基-2 IFFT程序設(shè)計,該程序適用于Blackfin系列所有的DSP。算法程序采用匯編語言編寫,可以通過C語言調(diào)用,具有良好的接口性能和可擴展性能。
2.1 實序列IFFT并行算法流程
  在BF561上進行N點實序列基-2 IFFT運算流程如圖2所示(N=2m,m≥3),具體功能塊描述如下:
  (1)程序初始化。由于BF561為定點DSP,如果進行浮點運算(如“塊浮點”運算[7])將會影響計算的實時性。所以對輸入輸出數(shù)據(jù)及旋轉(zhuǎn)因子都做了定點處理,規(guī)定數(shù)據(jù)都為如圖3所示的16位有符號小數(shù)格式(即Q15格式)。IFFT運算的旋轉(zhuǎn)因子可由Matlab產(chǎn)生并以cos(2πk/N)、sin(2πk/N)(k=0,1,2……,2m-1)的格式進行實部、虛部交替排列成表,通過“#include”語句填充到BF561上的L1數(shù)據(jù)SRAM中,需要N字節(jié)容量存儲空間。L1數(shù)據(jù)SRAM以內(nèi)核速度訪問,使得查表的速度達到最快。在L1數(shù)據(jù)SRAM中開辟了4N字節(jié)容量的存儲區(qū)進行中間結(jié)果的存放。


  (2)將兩行N點實數(shù)數(shù)據(jù)X(k)、Y(k)合并成為N點復(fù)數(shù)數(shù)據(jù)Z(k),并完成復(fù)數(shù)數(shù)據(jù)的位反轉(zhuǎn)操作。Blackfin DSP有專為IFFT算法設(shè)計的反序間接尋址,可實現(xiàn)增/減1或增/減一個變量的間接尋址方式,可以直接實現(xiàn)各種方式的位反轉(zhuǎn)操作。
  (3)計算N點復(fù)數(shù)數(shù)據(jù)基-2 IFFT運算的蝶形運算結(jié)構(gòu)如圖4所示。IFFT運算過程中需要大量的循環(huán)運算,而BF561支持“零開銷的硬件循環(huán)控制”及“硬件循環(huán)緩存”功能,即利用硬件尋址功能實現(xiàn)循環(huán)構(gòu)造,并且循環(huán)體的指令在每次執(zhí)行后暫時存放在循環(huán)緩存中以備下次使用,極大地加快了循環(huán)運算速度。

?


  (4)分離還原。根據(jù)式(2)、(3)將兩行N點實數(shù)數(shù)據(jù)IFFT運算結(jié)果x(n)、y(n)從z(n)中分離出來。
2.2 利用并行指令進行程序設(shè)計
  Blackfin系列DSP的多級流水線結(jié)構(gòu)可以實現(xiàn)多個乘加及算術(shù)邏輯運算,并且可以實現(xiàn)運算與存儲器讀寫的并行執(zhí)行。充分利用指令的并行性可以加快IFFT的運算速度。
2.2.1 32位數(shù)據(jù)寄存器的并行操作
  Blacfin DSP的數(shù)據(jù)寄存器可以作為一個32位字(Rn)或是2個16位半字(Rn.H與Rn.L)。并且由于Blackfin DSP具有2個MAC,所以在一個指令周期內(nèi)可以進行4個16位半字的操作。利用該并行指令進行如圖4的碟形運算的程序如式(4)、式(5)、式(6)所示,其中寄存器R1與R2的低位、高位分別存放Z1(k)與Z2(k)的實部、虛部,R3的低位、高位分別存放wN-k的實部、虛部。完成一次碟形運算只需要3個指令周期。

  R1=R1+|+R2, R2=R1-|-R2(ASR);
?? ??? /*16位加減并行運算,結(jié)果右移一位*/???????? (4)
?  A1=R2.L*R3.H, A0=R2.L*R3.L;
??????? /*16位乘法并行運算*/?????????????????????? (5)
??? R3.H=(A1+=R2.H*R3.L),R3.L=(A0-=R2.H*R3.H);
??????? /*16位乘法并行運算*/?????????????????????? (6)
2.2.2 運算與存儲器讀寫的并行指令
??? Blackfin DSP支持下列3種并行指令語句:
  (1) A 32-bit ALU/MAC instruction || A 16-bit instruction ||A 16-bit instruction;//
  (2) A 32-bit ALU/MAC instruction || A 16-bit instruction; //
  (3) MNOP || A 16-bit instruction || A 16-bit instruction; //

  其中:(1)表示1個指令周期內(nèi)可以同時執(zhí)行一條32位邏輯/乘加運算及2條16位指令;(2)表示1個指令周期內(nèi)可以同時執(zhí)行1條32位邏輯/乘加運算及1條16位指令;(3)表示1個指令周期內(nèi)可以同時執(zhí)行2條16位指令。其中16位指令包括對數(shù)據(jù)的讀取和存儲指令。
  結(jié)合上述兩種并行指令的蝶形運算程序如式(7)、(8)、(9)所示。由程序可以看出:3個指令周期內(nèi)不僅可以完成一次碟形運算,還可以實現(xiàn)旋轉(zhuǎn)因子的查表讀入、數(shù)據(jù)的讀入和運算結(jié)果的儲存等操作,大大減少了運算周期數(shù)。

2.3 硬件的并行處理
  Blackfin DSP的L1數(shù)據(jù)SRAM采用分塊設(shè)計,如BF561的64 KB容量的L1數(shù)據(jù)SRAM分為16個獨立的存儲塊(每塊容量為4KB),并且內(nèi)核與DMA可以同時訪問不同的存儲塊,所以可以通過“乒乓操作”的方式進行數(shù)據(jù)傳輸和處理的并行執(zhí)行。這種流水線式算法完成了數(shù)據(jù)的無縫緩沖與處理,大大加快了IFFT運算速度。
3 實驗結(jié)果
  在Blackfin集成開發(fā)環(huán)境Visual DSP++4.5上編制512點實序列基-2 IFFT程序。并用該程序在BF561上對兩行512點正弦數(shù)據(jù)進行計算,通過集成開發(fā)環(huán)境中的CYCLES計數(shù)器進行周期計數(shù)表明兩行數(shù)據(jù)IFFT運算需要11 864個周期。而直接計算兩行數(shù)據(jù)需要的周期數(shù)為21 098。前者所用的運算時間約為后者的一半。以MATLAB計算的32位精度結(jié)果作為基準進行比較,該程序計算結(jié)果誤差為0.009%。在如圖1的系統(tǒng)中對一幀頻域圖像(180×512)進行IFFT運算,其中BF561的內(nèi)核時鐘為600MHz,運算需要的時間僅為1.7ms。
  結(jié)合實序列IFFT運算、Blackfin系列DSP指令的并行性及硬件的并行結(jié)構(gòu)設(shè)計了在BF561定點DSP上對實序列進行基-2 IFFT運算的程序。實驗證明,該程序比以往的方法運算周期減少了約一半,并且誤差小于萬分之一,滿足快速精確計算的要求。運用于并行頻域OCT圖像處理系統(tǒng)中,滿足系統(tǒng)實時處理的要求。該程序同樣適用于Blackfin系列中其他的DSP。


參考文獻
[1] 馬振鶴,王瑞康,張帆,等.快速高分辨率的頻譜光學(xué)相干層析成像系統(tǒng)研究[J].納米技術(shù)與精密工程,2005,3
(3):232-235.
[2] 陳燕東,劉景琳,孟志強.新型實時光電混合圖像識別系統(tǒng)設(shè)計[J].電子測量與儀器學(xué)報,2007, 21(3):103-107.
[3] 李剛,任釗,吳開杰,等.Parallel spectral-domain optical?coherence tomography for non-scattering object imaging[J].天津大學(xué)學(xué)報(英), 2007,13(2):107-112.
[4] 胡廣書.數(shù)字信號處理理論-算法與實現(xiàn)[M].北京:清華大學(xué)出版社,2003.
[5] ADSP-BF53x/BF56x Blackfin processor programming?reference[Z]. USA:AD Inc., 2006.
[6]?陳峰. Blackfin系列DSP原理與系統(tǒng)設(shè)計[M].北京:電子工業(yè)出版社,2004.
[7] 楊向萍.提高FFT運算速度的幾項措施[J].中國紡織大學(xué)學(xué)報,1999,25(1):42-62.

本站內(nèi)容除特別聲明的原創(chuàng)文章之外,轉(zhuǎn)載內(nèi)容只為傳遞更多信息,并不代表本網(wǎng)站贊同其觀點。轉(zhuǎn)載的所有的文章、圖片、音/視頻文件等資料的版權(quán)歸版權(quán)所有權(quán)人所有。本站采用的非本站原創(chuàng)文章及圖片等內(nèi)容無法一一聯(lián)系確認版權(quán)者。如涉及作品內(nèi)容、版權(quán)和其它問題,請及時通過電子郵件或電話通知我們,以便迅速采取適當(dāng)措施,避免給雙方造成不必要的經(jīng)濟損失。聯(lián)系電話:010-82306118;郵箱:aet@chinaaet.com。