一種基于FPGA的并行結(jié)構(gòu)Sinc插值方法
【技術(shù)領(lǐng)域】
[0001] 本發(fā)明涉及一種插值電路結(jié)構(gòu)設(shè)計(jì),特別是涉及一種基于FPGA的并行結(jié)構(gòu)Sinc 插值的電路結(jié)構(gòu)設(shè)計(jì)。
【背景技術(shù)】
[0002] 插值(Interpolation)是一種利用已知采樣點(diǎn)去預(yù)測(cè)或估計(jì)未采樣點(diǎn)數(shù)值的運(yùn) 算,能夠起到樣本重采樣、平滑等作用,在通信、信號(hào)處理、圖像處理領(lǐng)域有著廣泛的應(yīng)用。 插值種類主要有線性插值、多項(xiàng)式插值、Sinc插值等。在數(shù)字信號(hào)處理領(lǐng)域,特別是合成孔 徑雷達(dá)(Synthetic Aperture Radar,SAR)成像領(lǐng)域,Sinc插值以其實(shí)現(xiàn)算法簡(jiǎn)單、精度較 好的優(yōu)點(diǎn)被廣泛的使用。采樣定理表明,只要函數(shù)滿足以下兩個(gè)條件就可以從函數(shù)的等間 隔離散樣本中無(wú)失真恢復(fù)原始信號(hào):
[0003] (1)信號(hào)是帶限的;
[0004] (2)采樣頻率滿足奈奎斯特采樣率。實(shí)信號(hào)的采樣率必須大于最高頻率的兩倍,復(fù) 信號(hào)的采樣率必須大于信號(hào)帶寬。
[0005] 時(shí)域信號(hào)的離散化對(duì)應(yīng)其頻域的周期延拓。在滿足以上條件時(shí),只需要理想矩形 低通濾波器在頻域提取基帶頻譜。時(shí)域重建方程為:
[0007] fd(i)是f(x)在X = i的采樣值。為了得到加矩形窗濾波的效果,理論上需要無(wú) 數(shù)個(gè)采樣點(diǎn)系數(shù)進(jìn)行加權(quán)求和,這種濾波器在工程實(shí)踐中是無(wú)法實(shí)現(xiàn)的。如圖1所示,觀察 Sinc插值核的時(shí)域波形可以發(fā)現(xiàn),Sinc函數(shù)關(guān)于原點(diǎn)對(duì)稱,原點(diǎn)對(duì)應(yīng)函數(shù)值最高,越遠(yuǎn)離 中心點(diǎn)函數(shù)值漸漸變小。所以工程實(shí)踐中一般在不過(guò)度損失精度的同時(shí)對(duì)Sinc卷積核進(jìn) 行截?cái)?。?dāng)使用截?cái)郤inc函數(shù)對(duì)陡峭邊緣的函數(shù)進(jìn)行插值時(shí),會(huì)出現(xiàn)吉布斯振鈴效應(yīng)。為 減小這種影響,可以對(duì)Sinc函數(shù)進(jìn)行加窗處理使得系統(tǒng)的沖擊響應(yīng)在邊界平緩地衰減到 零。
[0008] 以往,SAR成像里Sinc插值運(yùn)算主要用軟件方式或者數(shù)字信號(hào)處理器(Digital Dignal Processor,DSP)實(shí)現(xiàn)。隨著技術(shù)的發(fā)展,工作者需要處理的數(shù)據(jù)量越來(lái)越大,軟件 或DSP實(shí)現(xiàn)插值的速度遠(yuǎn)達(dá)不到要求。隨著現(xiàn)場(chǎng)可編程門陣列(Field Programmable Gate Array,F(xiàn)PGA)的集成度不斷提高,工作者開始采用FPGA來(lái)實(shí)現(xiàn)插值運(yùn)算。目前基于FPGA的 Sinc插值,如文獻(xiàn)(何斌,張志敏.基于FPGA的sine插值算法的研究和實(shí)現(xiàn)[J].電子器 件,Vol. 33, No. 3, 2010, pp. 340-343.),其實(shí)現(xiàn)的Sinc插值的基本思想都是把采樣點(diǎn)數(shù)據(jù) (N點(diǎn))緩存在一個(gè)深度為N的RAM里,然后按照時(shí)鐘節(jié)拍順序選擇L (L為插值核長(zhǎng)度,典型 為8或16)個(gè)數(shù)據(jù)出來(lái)與L個(gè)Sinc插值核系數(shù)進(jìn)行累乘加。這種串行結(jié)構(gòu)插值每L個(gè)時(shí) 鐘節(jié)拍只能計(jì)算一個(gè)待插值點(diǎn),效率較低。另外其插值運(yùn)算采用了定點(diǎn)數(shù),難以適用于如雷 達(dá)信號(hào)這種具有大動(dòng)態(tài)范圍的數(shù)據(jù)。
【發(fā)明內(nèi)容】
[0009] 本發(fā)明的目的在于克服現(xiàn)有技術(shù)的不足,提供一種基于FPGA的并行結(jié)構(gòu)Sinc插 值方法。
[0010] 本發(fā)明采用的技術(shù)方案為:一種基于FPGA的并行結(jié)構(gòu)Sinc插值方法,包括以下步 驟:
[0011] 步驟一:將一個(gè)緩存采樣點(diǎn)數(shù)據(jù)的RAM分割成L個(gè)獨(dú)立的子塊RAM,按順序把采樣 點(diǎn)數(shù)據(jù)每L個(gè)數(shù)據(jù)分為一組,每一組存儲(chǔ)到L個(gè)子塊RAM的相同地址位置。
[0012] 步驟二:對(duì)截?cái)郤inc函數(shù)加窗以降低吉布斯振鈴效應(yīng),同時(shí)將具有相同偏移量的 一組Sinc插值核系數(shù)存放在L個(gè)ROM的相同地址位置。
[0013] 步驟三:把輸入浮點(diǎn)格式待插值點(diǎn)坐標(biāo)轉(zhuǎn)換成定點(diǎn)數(shù),其整數(shù)部分為定位坐標(biāo),小 數(shù)部分指定了 Sinc系數(shù)偏移量。定位坐標(biāo)的前3個(gè)和后4個(gè)樣本的分別落在L個(gè)子塊RAM 上,可在同一個(gè)時(shí)鐘節(jié)拍里取出這L個(gè)采樣點(diǎn)與L個(gè)Sinc系數(shù)進(jìn)行相乘,再經(jīng)過(guò)log2 (L) 級(jí)并行加法樹就能得到待插值點(diǎn)的插值結(jié)果。
[0014] 步驟四:對(duì)于待插值點(diǎn)坐標(biāo)超出采樣樣本的范圍,或者待插值點(diǎn)位于樣本邊界導(dǎo) 致數(shù)據(jù)取不到L個(gè)點(diǎn)這兩種特殊情況,本發(fā)明提供一種基于標(biāo)識(shí)置零的解決方法。使用了 兩個(gè)標(biāo)識(shí)信號(hào)指示超出范圍和邊界點(diǎn)的特殊情況,只要這兩個(gè)標(biāo)識(shí)其一有效,則把數(shù)據(jù)RAM 的輸出置零,并讓其進(jìn)入后續(xù)的乘法和加法模塊。
[0015] 步驟五:采樣點(diǎn)數(shù)據(jù)和輸入待插值點(diǎn)坐標(biāo)均為浮點(diǎn)數(shù)格式。待插值點(diǎn)可以連續(xù)不 斷地輸入,即每個(gè)時(shí)鐘周期就能輸入一個(gè)待插值點(diǎn)。經(jīng)一定的流水線延遲后,插值結(jié)果連續(xù) 不斷地輸出。
[0016] 本發(fā)明的有益效果:(1)將緩存采樣點(diǎn)數(shù)據(jù)的RAM分成多個(gè)子塊,設(shè)置采樣點(diǎn)數(shù)據(jù) 在子塊RAM中的排列方式,不需要增加 FPGA額外的Block RAM資源,這樣能在一個(gè)時(shí)鐘節(jié) 拍內(nèi)讀出待插值點(diǎn)所需的L個(gè)采樣點(diǎn)數(shù)據(jù)的和Sinc系數(shù),這意味著每個(gè)時(shí)鐘節(jié)拍都能插值 出一個(gè)點(diǎn),相比原來(lái)的串行結(jié)構(gòu),這種并行架構(gòu)插值的效率是原來(lái)的L倍。
[0017] (2)本發(fā)明并行結(jié)構(gòu)插值輸入輸出是浮點(diǎn)數(shù),支持的數(shù)據(jù)動(dòng)態(tài)范圍更廣,同時(shí)也支 持浮點(diǎn)復(fù)數(shù)輸入輸出,適用范圍更廣。
[0018] (3)本發(fā)明對(duì)采樣點(diǎn)范圍外和邊界點(diǎn)采用了標(biāo)識(shí)置零方法,使得特殊點(diǎn)和正常點(diǎn) 的處理一體化,模塊結(jié)構(gòu)更加簡(jiǎn)單、穩(wěn)定。
【附圖說(shuō)明】
[0019] 圖1為Kaiser窗加權(quán)后的Sinc函數(shù),β = 2. 5 ;
[0020] 圖2為采樣點(diǎn)數(shù)據(jù)在子塊RAM中的存儲(chǔ);
[0021] 圖3為Sinc插值核系數(shù)在ROM中存儲(chǔ);
[0022] 圖4為分塊RAM式并行Sinc插值結(jié)構(gòu)框圖。
【具體實(shí)施方式】
[0023] 下面結(jié)合附圖和【具體實(shí)施方式】對(duì)本發(fā)明做進(jìn)一步詳細(xì)的解釋。為使說(shuō)明簡(jiǎn)單明 確,我們令插值核長(zhǎng)度為L(zhǎng) = 8,采樣點(diǎn)數(shù)N = 8192為例進(jìn)行說(shuō)明。
[0024] (1)步驟一:如圖2所示,當(dāng)采樣點(diǎn)數(shù)據(jù)輸入時(shí),按每8個(gè)數(shù)據(jù)寫一列,逐列緩存所 有采樣點(diǎn)。這樣的好處就是待插值點(diǎn)周圍的8個(gè)采樣點(diǎn)會(huì)落在這8個(gè)不同的子塊RAM上, 這樣就能夠在同一個(gè)時(shí)鐘周期內(nèi)取出這8個(gè)采樣點(diǎn)出來(lái),經(jīng)過(guò)多路選擇器選擇合適的輸出 接到乘法器的輸入端,保證與對(duì)應(yīng)的Sinc系數(shù)相乘。
[0025] (2)步驟二:如圖3所示,將偏移量相同的一組截?cái)嗉哟昂骃inc插值核系數(shù)存儲(chǔ) 在8個(gè)ROM的相同地址位置,系數(shù)值以單精度浮點(diǎn)數(shù)表示。Sinc系數(shù)量化位移為采樣間隔 的1/16,即每個(gè)ROM的深度為16。偏移量為0的一組系數(shù)放在地址0,偏移量大的系數(shù)存儲(chǔ) 在ROM的高地址位置。
[0026] (3)步驟三:如圖4所示,原始采樣一般為等間隔采樣,先將輸入浮點(diǎn)格式的待插 值點(diǎn)坐標(biāo)歸一化,再通過(guò)一個(gè)浮點(diǎn)轉(zhuǎn)定點(diǎn)模塊,得到該坐標(biāo)的整數(shù)和小數(shù)部分:整數(shù)部分為 中心定位坐標(biāo),設(shè)為l〇cated_index,其前3個(gè)和后4個(gè)為所需的一組采樣點(diǎn)數(shù)據(jù);小數(shù)部 分量化為〇, 1/16,…,15/16,指定了 8個(gè)ROM上同一地址上的一組Sinc系數(shù)。設(shè)IocatecL index/8 = m,located_index% 8 = n,則子塊RAM的讀取地址如表1所示。例如當(dāng)η = 2 時(shí),相鄰8個(gè)采樣點(diǎn)按順序依次落在Sub_RAM7~Sub_RAM6,如圖2的陰影所示,且Sub_RAM7 的地址為m-l,Sub_RAM0~Sub_RAM6的地址為m。在同一個(gè)時(shí)鐘周期取出的一組樣本數(shù)據(jù), 經(jīng)過(guò)數(shù)據(jù)選擇器后與對(duì)應(yīng)的一組Sinc系數(shù)進(jìn)行相乘,并行乘法器個(gè)數(shù)為8。隨后進(jìn)入后續(xù) 的三級(jí)并行加法樹(總共4+2+1 = 7個(gè)加法器)后輸出插值結(jié)果。
[0028] 表 1
[0029] (4)步驟四:對(duì)于待插值點(diǎn)坐標(biāo)超出采樣樣本的范圍,或者待插值點(diǎn)位于樣本邊 界導(dǎo)致數(shù)據(jù)取不到8個(gè)點(diǎn)這兩種特殊情況,本發(fā)明提供一種基于標(biāo)識(shí)置零的解決方法。當(dāng) 待插值點(diǎn)溢出范圍,〇ut_of_range標(biāo)識(shí)有效。為了判斷邊界情況,我們把子塊RAM的地址 增加了額外的一位,當(dāng)?shù)刂返淖罡呶粸?時(shí),代表當(dāng)前點(diǎn)已上溢或下溢了,把相應(yīng)border cond標(biāo)識(shí)置為1。只要這兩個(gè)標(biāo)識(shí)其一有效,則把數(shù)據(jù)RAM的輸出置為0,讓其繼續(xù)進(jìn)入乘 法和加法模塊。這樣帶來(lái)一個(gè)好處,特殊點(diǎn)和正常點(diǎn)的處理一體化,使得模塊設(shè)計(jì)簡(jiǎn)單、穩(wěn) 定。
[0030] (5)步驟五:輸入和輸出。N個(gè)待插值點(diǎn)可以連續(xù)不斷輸入,即每個(gè)時(shí)鐘周期就能 輸入一個(gè)待插值點(diǎn)。經(jīng)一定的流水線延遲后,插值結(jié)果連續(xù)不斷地輸出。
[0031] 應(yīng)當(dāng)指出,對(duì)于本技術(shù)領(lǐng)域的普通技術(shù)人員來(lái)說(shuō),在不脫離本發(fā)明原理的前提下, 還可以做出若干改進(jìn)和潤(rùn)飾,這些改進(jìn)和潤(rùn)飾也應(yīng)視為本發(fā)明的保護(hù)范圍。本實(shí)施例中未 明確的各組成部分均可用現(xiàn)有技術(shù)加以實(shí)現(xiàn)。
【主權(quán)項(xiàng)】
1. 一種基于FPGA的并行結(jié)構(gòu)Sinc插值方法,其特征在于:包括以下步驟: 步驟一:將緩存采樣點(diǎn)數(shù)據(jù)的RAM分割成獨(dú)立的子塊RAM,然后把采樣點(diǎn)數(shù)據(jù)按一定順 序存儲(chǔ)到子塊RAM里; 步驟二:對(duì)截?cái)郤inc函數(shù)加窗以降低吉布斯振鈴效應(yīng),同時(shí)將Sinc插值核系數(shù)存放在 麗里; 步驟三:把輸入浮點(diǎn)格式待插值點(diǎn)坐標(biāo)轉(zhuǎn)換成定點(diǎn)數(shù),其整數(shù)部分為定位坐標(biāo),小數(shù)部 分指定了 Sinc系數(shù)偏移量,在同一個(gè)時(shí)鐘節(jié)拍里取出一組樣本數(shù)據(jù)和Sinc系數(shù)進(jìn)行相乘 后進(jìn)入后續(xù)并行加法樹得到插值結(jié)果; 步驟四:對(duì)于待插值點(diǎn)坐標(biāo)超出采樣樣本的范圍,或者待插值點(diǎn)位于樣本邊界,使用了 兩個(gè)標(biāo)識(shí)信號(hào)指示這兩種特殊情況,只要這兩個(gè)標(biāo)識(shí)其一有效,則把數(shù)據(jù)RAM的輸出置零, 并讓其進(jìn)入后續(xù)的乘法和加法模塊; 步驟五:采樣點(diǎn)數(shù)據(jù)和輸入待插值點(diǎn)坐標(biāo)均為浮點(diǎn)數(shù)格式;待插值點(diǎn)可以連續(xù)不斷地 輸入,插值結(jié)果連續(xù)不斷地輸出。2. 根據(jù)權(quán)利要求1所述的一種基于FPGA的并行結(jié)構(gòu)Sinc插值方法,其特征在于:所 述步驟一中:緩存采樣點(diǎn)數(shù)據(jù)的RAM分割成L個(gè)獨(dú)立的子塊RAM,L為插值核長(zhǎng)度,按順序把 采樣點(diǎn)數(shù)據(jù)每L個(gè)數(shù)據(jù)分為一組,每一組存儲(chǔ)到L個(gè)子塊RAM的相同地址位置; 所述步驟二中:將具有相同偏移量的一組Sinc插值核系數(shù)存放在L個(gè)ROM的相同地址 位置; 所述步驟三中:定位坐標(biāo)的前3個(gè)和后4個(gè)樣本的分別落在L個(gè)子塊RAM上,在同一個(gè) 時(shí)鐘節(jié)拍里取出這L個(gè)采樣點(diǎn)與L個(gè)Sinc系數(shù)進(jìn)行相乘,再經(jīng)過(guò)log2 (L)級(jí)并行加法樹就 能得到待插值點(diǎn)的插值結(jié)果。
【專利摘要】本發(fā)明公開了一種基于FPGA的并行結(jié)構(gòu)Sinc插值方法,主要解決串行插值效率低的問(wèn)題,該方法主要步驟包括:將緩存采樣點(diǎn)數(shù)據(jù)的RAM進(jìn)行分塊,將截?cái)嗉哟昂蟛逯岛讼禂?shù)存儲(chǔ)在ROM里;待插值點(diǎn)坐標(biāo)通過(guò)浮點(diǎn)轉(zhuǎn)定點(diǎn),通過(guò)整數(shù)部分尋址樣本數(shù)據(jù)、小數(shù)部分尋址插值核系數(shù),在同一個(gè)時(shí)鐘周期取出一組樣本數(shù)據(jù)和系數(shù)進(jìn)行相乘后進(jìn)入后續(xù)并行加法樹得到插值結(jié)果;對(duì)超出范圍和邊界點(diǎn)的特殊情況,利用標(biāo)識(shí)置零方法使其進(jìn)入后續(xù)流水線。本發(fā)明的結(jié)構(gòu)并行、簡(jiǎn)單,能夠?qū)崿F(xiàn)流水輸入和輸出,一個(gè)時(shí)鐘周期就插值出一個(gè)數(shù)據(jù),插值效率大大提高;并且支持浮點(diǎn)數(shù)復(fù)數(shù),適用范圍廣。
【IPC分類】G06F7/499, G06F7/48
【公開號(hào)】CN105117196
【申請(qǐng)?zhí)枴緾N201510450583
【發(fā)明人】朱岱寅, 郭江哲, 丁勇, 韋北余, 楊鳴冬
【申請(qǐng)人】南京航空航天大學(xué)
【公開日】2015年12月2日
【申請(qǐng)日】2015年7月28日