張蕾 徐杰 唐甜
摘 要:采用硬件板卡在對(duì)振動(dòng)信號(hào)進(jìn)行實(shí)時(shí)處理時(shí),需要對(duì)信號(hào)處理過(guò)程的運(yùn)算量進(jìn)行估計(jì),進(jìn)而作為選擇處理器和相關(guān)硬件配置的依據(jù)。本文從Cache使能、傅里葉變換、位翻轉(zhuǎn)和讀寫片外SRAM等四個(gè)方面,精確估計(jì)了一種振動(dòng)信號(hào)進(jìn)行FFT運(yùn)算時(shí)的數(shù)據(jù)量和時(shí)間。該方法的估計(jì)結(jié)果與實(shí)測(cè)數(shù)據(jù)一致,可作為相關(guān)算法運(yùn)算量估計(jì)的參考。
關(guān)鍵字:振動(dòng)信號(hào);數(shù)據(jù)量估計(jì);快速傅里葉變換
引言
安裝在飛機(jī)或臺(tái)架上的航空發(fā)動(dòng)機(jī),是一個(gè)無(wú)限多自由度的振動(dòng)系統(tǒng),發(fā)動(dòng)機(jī)的整機(jī)振動(dòng)就是這一系統(tǒng)在各種激振里作用下的響應(yīng)[1]。整機(jī)振動(dòng)是影響發(fā)動(dòng)機(jī)壽命和飛行安全的決定性因素[2],對(duì)發(fā)動(dòng)機(jī)整機(jī)振動(dòng)進(jìn)行監(jiān)控,可以為發(fā)動(dòng)機(jī)正常且安全使用提供有力保障。
通常對(duì)振動(dòng)信號(hào)處理的方法有:時(shí)域分析法、頻域分析法及時(shí)頻分析法。時(shí)域分析是采用相關(guān)分析法和特征值分析法,根據(jù)信號(hào)隨時(shí)間變化的波形來(lái)分析信號(hào),從而得出信號(hào)的特征量和組成。頻域分析法是采用頻譜分析法和倒譜分析法,將信號(hào)從時(shí)域轉(zhuǎn)換到頻域,分析頻譜的組成,得到信號(hào)的本質(zhì)特性,頻域分析法雖能反映信號(hào)的本質(zhì),但不能體現(xiàn)出信號(hào)頻率局部瞬間的變化,具有局限性。時(shí)頻分析法通過(guò)短時(shí)傅里葉變換、小波變換等方法,是針對(duì)非線性非平穩(wěn)信號(hào)提出的處理方法。
傅里葉變換是時(shí)域轉(zhuǎn)換到頻域的基本工具,是目前頻譜分析的主要方法,而快速傅里葉變換(FFT)則是巧妙利用W因子的周期性和對(duì)稱性推導(dǎo)得到的一個(gè)高效的離散傅里葉變換的快速算法[3],在振動(dòng)信號(hào)處理中被普遍使用。本文對(duì)振動(dòng)信號(hào)從時(shí)域轉(zhuǎn)換到頻域使用的FFT運(yùn)算,給出了該運(yùn)算所需的數(shù)據(jù)量和時(shí)間估計(jì)方法,對(duì)系統(tǒng)使用的運(yùn)算量進(jìn)行了精確估計(jì),為選擇處理器或者硬件設(shè)計(jì)提供了依據(jù)。
2 振動(dòng)信號(hào)的快速傅里葉變換原理
有限長(zhǎng)離散信號(hào)x(n)(n=1,2,…,N-1)的離散傅里葉變換定義為:
(1)
可以看出,離散傅里葉變換需要計(jì)算大約N2次乘法和N2次加法。利用的WN對(duì)稱性和周期性,將點(diǎn)離散傅里葉變換分解為兩個(gè)N/2點(diǎn)離散傅里葉變換,總的計(jì)算量只是原來(lái)的一半,即
b.產(chǎn)生傅里葉變換所需要的系數(shù),存儲(chǔ)在內(nèi)存中;
c.從片外RAM中提取16384個(gè)數(shù)據(jù),進(jìn)行快速傅里葉變換;
d.將快速傅里葉變換的結(jié)果,通過(guò)DPRAM傳送出去。
振動(dòng)信號(hào)處理流程參見(jiàn)圖3。
圖3 振動(dòng)數(shù)據(jù)處理流程圖
4 信號(hào)處理中的運(yùn)算量分析
4.1 理論運(yùn)算量分析
根據(jù)圖3的處理流程可知,第2、3和4個(gè)步驟構(gòu)成單路數(shù)據(jù)快速傅里葉變換。根據(jù)流程分析,可從Cache使能的影響、傅里葉變換所需執(zhí)行時(shí)間、讀寫片外SRAM需要的時(shí)間及結(jié)果位翻轉(zhuǎn)的時(shí)間等幾個(gè)方面,對(duì)所需要理論時(shí)間進(jìn)行估計(jì)。
4.1.1 Cache使能的影響
DSP6713內(nèi)部有兩級(jí)的程序和數(shù)據(jù)存儲(chǔ)器,L1P為一級(jí)高速程序緩沖存儲(chǔ)器、L1D為一級(jí)高速數(shù)據(jù)緩沖存儲(chǔ)器。L2為二級(jí)存儲(chǔ)器,二級(jí)的程序和數(shù)據(jù)存儲(chǔ)器可共用。
對(duì)于數(shù)據(jù)的訪問(wèn)策略:
當(dāng)CPU訪問(wèn)的數(shù)據(jù)未命中時(shí),L1D會(huì)將請(qǐng)求的數(shù)據(jù)替換一個(gè)新的行,若L1D未命中但命中了L2 SRAM或L2,高速緩存器會(huì)給CPU帶來(lái)4個(gè)周期的延遲(假設(shè)沒(méi)有其他的L2訪問(wèn)延遲L1D的數(shù)據(jù)訪問(wèn));若L1D未命中并且沒(méi)有命中L2時(shí),會(huì)從外部存儲(chǔ)器中讀取數(shù)據(jù),一旦這些數(shù)據(jù)讀回,它將被存儲(chǔ)在L2中并傳輸?shù)絃1D,外部訪問(wèn)未命中帶來(lái)的不利因素根據(jù)外存寬度的不同和其他系統(tǒng)負(fù)載的不同而不同。
對(duì)于程序的訪問(wèn)策略:
命中L1P的程序取指,在一個(gè)周期內(nèi)完成,不會(huì)給CPU帶來(lái)延遲。在沒(méi)有其他存儲(chǔ)器操作對(duì)L2訪問(wèn)產(chǎn)生延遲的情況下,不管相關(guān)代碼是否并行,L1P未命中而L2命中會(huì)給CPU帶來(lái)5個(gè)周期延遲。在L1P和L2都未命中的情況下,產(chǎn)生的延遲會(huì)持續(xù)到L2從外部存儲(chǔ)器讀回程序并傳送到L1P。產(chǎn)生的延遲依賴于外部程序存儲(chǔ)器的不同和系統(tǒng)負(fù)載的不同而不同。
Cache使能的狀態(tài)下,當(dāng)CPU發(fā)出訪存請(qǐng)求后,存儲(chǔ)器地址先被送到Cache控制器以確定所需數(shù)據(jù)是否已在Cache中,若命中則直接對(duì)Cache進(jìn)行訪問(wèn)。
本課題Cache設(shè)置為:
*CCFG=0x07;
*MAR0=0x01;
CCFG被配置為0x07,即使能64K大小的L2Cache,MAR0被配置成0x1,即相應(yīng)的存儲(chǔ)器范圍可Cache。
4.1.2 傅里葉變換所需執(zhí)行時(shí)間
快速傅里葉變換所需的時(shí)間為復(fù)數(shù)乘法和復(fù)數(shù)加法所耗費(fèi)時(shí)間之和,根據(jù)第二章的分析可知,對(duì)于N個(gè)點(diǎn)的傅里葉變換所需的復(fù)數(shù)乘法數(shù)為(N/2)log2N,復(fù)數(shù)加法數(shù)為Nlog2N。
對(duì)于N=16384,傅里葉變換完全在內(nèi)存中進(jìn)行,根據(jù)計(jì)算可知,需要復(fù)數(shù)乘法運(yùn)算114688次,復(fù)數(shù)加法運(yùn)算229376次。
在《DSP算法與體系結(jié)構(gòu)實(shí)現(xiàn)技術(shù)》書中提到,為實(shí)現(xiàn)流水線的正常工作,乘法累加運(yùn)算往往需要在一個(gè)時(shí)鐘周期內(nèi)完成,一次復(fù)數(shù)乘法需要4次乘累加,故針對(duì)N為16384個(gè)點(diǎn)的傅里葉變換,所需要的時(shí)間T的計(jì)算公式如下:
T=乘累加次數(shù)*執(zhí)行時(shí)間=Mc*4*1fs (7)
式中:Mc為復(fù)數(shù)乘法數(shù),fs為采樣頻率。
由公式(7)可得到,若內(nèi)存足夠大,16384個(gè)點(diǎn)的傅里葉變換需要耗時(shí)2.29376ms。
4.1.3 讀寫片外SRAM需要的時(shí)間
對(duì)于DSP6713,片外SRAM的訪問(wèn),是通過(guò)外部的存儲(chǔ)器接口(EMIF)完成,因此EMIF的速率決定了,片外SRAM的訪問(wèn)速率。因此,首先要配置鎖相環(huán)PLL,來(lái)產(chǎn)生供EMIF使用的時(shí)鐘;其次,配置EMIF,設(shè)定讀寫SRAM的時(shí)間;最后根據(jù)程序的調(diào)用,計(jì)算讀寫SRAM的時(shí)間。
a.設(shè)置PLL控制器
本課題PLL設(shè)置為:
st_Pll.pllm = 0xa;
st_Pll.plldiv0 = 0x8001;
st_Pll.plldiv3 = 0x8003;
st_Pll.pllcsr = 0x0;
系統(tǒng)輸入頻率為40MHz,通過(guò)PLL設(shè)置后,產(chǎn)生過(guò)程如下:首先,經(jīng)過(guò)D0分頻器,分頻系數(shù)為2,分成20MHz;其次,經(jīng)過(guò)PLLM倍頻器,倍頻系數(shù)為0xa,倍頻為200MHz;最后,經(jīng)過(guò)D3分頻器,分頻系數(shù)為4,分成50MHz,供EMIF使用。
b.配置EMIF
在本課題中,EMIF的配置如下:
*(int *)EMIF_GCTL = 0x00003078;
*(int *)EMIF_CE0 = 0x0081C521;
*(int *)EMIF_CE1 = 0x1151c511;
*(int *)EMIF_CE2 = 0x10914611;
*(int *)EMIF_CE3 = 0x10914521;
*(int *)EMIF_SDRAMCTL = 0x5748F000;
*(int *)EMIF_SDRAMTIMING = 0x005DC5DC;
*(int *)EMIF_SDRAMEXT = 0x0017DF3F;
根據(jù)以上的配置可得到:寫建立寬度為1個(gè)時(shí)鐘周期;片外SRAM為32位寬的異步接口;選擇32位寬的異步接口;讀選通寬度為5個(gè)時(shí)鐘周期;最小轉(zhuǎn)換時(shí)間為3個(gè)時(shí)鐘周期;讀建立寬度為1個(gè)時(shí)鐘周期;寫保持寬度為0個(gè)時(shí)鐘周期;寫選通寬度為2個(gè)時(shí)鐘周期;寫建立寬度為0個(gè)時(shí)鐘周期。
c.計(jì)算讀寫SRAM的時(shí)間
如圖4所示,調(diào)用DSPF_sp_cfftr2_dit函數(shù)執(zhí)行快速傅里葉變換過(guò)程需執(zhí)行循環(huán)14次,將16384*2個(gè)點(diǎn)原始點(diǎn)(實(shí)部為原始點(diǎn),虛部為0)和對(duì)應(yīng)的系數(shù)16384*2(復(fù)數(shù)),送入DSPF_sp_cfftr2_dit函數(shù)進(jìn)行運(yùn)算,并將計(jì)算的結(jié)果16384*2(實(shí)部+虛部)存入片外SRAM中。讀選通需要5個(gè)EMIF時(shí)鐘,寫選通需要2個(gè)EMIF時(shí)鐘,因此需要時(shí)間如下:
原始點(diǎn)讀入時(shí)間:
16384*2*14*5/50MHz = 45.8752ms
旋轉(zhuǎn)因子讀入時(shí)間:
16384*2*14*5/50MHz= 45.8752ms
FFT結(jié)果讀出時(shí)間:
16384*2*14*2/50MHz = 18.3501ms
圖4 FFT庫(kù)函數(shù)的C實(shí)現(xiàn)
4.1.4 結(jié)果位翻轉(zhuǎn)需要的時(shí)間
圖5為位翻轉(zhuǎn)函數(shù),在整個(gè)快速傅里葉變換過(guò)程中,需要包含兩次位翻轉(zhuǎn):
a.在產(chǎn)生了系數(shù)之后,按照蝶形運(yùn)算,需要將系數(shù)進(jìn)行位翻轉(zhuǎn);
b.在調(diào)用庫(kù)函數(shù),完成FFT變換之后,需要將逆序的結(jié)果變?yōu)檎颉?/p>