基于VC++的動態(tài)信號分析系統(tǒng)的設(shè)計方案
隨著科技水平的不斷提高,機械工程振動測試技術(shù)也隨之進入了一個嶄新的階段。動態(tài)信號分析作為一門以捕捉和處理各種動態(tài)信息為目的的綜合技術(shù)在當(dāng)代科學(xué)技術(shù)中占有相當(dāng)重要的地位。近年來,多通道、高性能動態(tài)信號分析系統(tǒng)推出并已廣泛應(yīng)用于各個領(lǐng)域。并且隨著使用者對動態(tài)信號的分析需求越來越多樣化,使得柔性化設(shè)計成為動態(tài)信號分析系統(tǒng)研制的主流方向。國外的動態(tài)信號儀器采樣精度高、功能強大,但產(chǎn)品的價格相對很高。而目前國內(nèi)的測試分析系統(tǒng)與國外的相比,還有一定的差距。因此,研制擁有自主知識產(chǎn)權(quán)的實時的動態(tài)信號分析系統(tǒng)有著非?,F(xiàn)實的科學(xué)意義和工程實用價值。
基于此,本文以Windows XP系統(tǒng)為開發(fā)平臺,采用面向?qū)ο蟮木幊碳夹g(shù)和VC++為開發(fā)工具,研制一套基于VC++的動態(tài)信號分析系統(tǒng)。軟件開發(fā)采用模塊化的設(shè)計細想,把各種功能對象化并進行封裝,提高了各模塊的可移植性和重復(fù)使用性。系統(tǒng)可實現(xiàn)對單個和多個信號的實時同步采集,并能對信號進行分析處理,還能實現(xiàn)數(shù)據(jù)分段存儲和波形回放查看。
1 系統(tǒng)總體設(shè)計
系統(tǒng)總體設(shè)計的好壞直接關(guān)系到整個測試分析任務(wù)的成敗以及完成質(zhì)量的好壞。從硬件上看,系統(tǒng)總體上由計算機、USB 接口、數(shù)據(jù)采集硬件、傳感器等組成。
從軟件上看,該系統(tǒng)包括固件程序、驅(qū)動程序及應(yīng)用軟件。
固件程序是采集卡商家以寫好燒進采集卡硬件的程序,負責(zé)采集卡的采集工作。
驅(qū)動程序和應(yīng)用軟件則裝在計算機中,驅(qū)動程序是遵循USB協(xié)議編寫的負責(zé)應(yīng)用軟件與采集卡正常通信的程序。
應(yīng)用軟件是人機交互接口,是實現(xiàn)信號分析處理各項功能的關(guān)鍵部分。
軟件系統(tǒng)設(shè)計與開發(fā)是本項目開發(fā)的重點和難點。利用VC++為開發(fā)平臺,進行系統(tǒng)軟件設(shè)計。本項目的軟件系統(tǒng)設(shè)計主要包括:軟件系統(tǒng)總體框架設(shè)計、數(shù)據(jù)采集模塊設(shè)計、信號分析與處理模塊設(shè)計、數(shù)據(jù)存儲模塊設(shè)計等。
動態(tài)信號分析系統(tǒng)總體設(shè)計框圖如圖1所示。
2 系統(tǒng)統(tǒng)一架構(gòu)
軟件設(shè)計以Windows XP 系統(tǒng)為開發(fā)平臺,采用面向?qū)ο蟮木幊碳夹g(shù)和VC++ 6.0為開發(fā)工具實現(xiàn)。軟件開發(fā)采用模塊化的設(shè)計細想,把各種功能對象化并進行封裝,提高了各模塊的可移植性和重復(fù)使用性。采用統(tǒng)一的軟件體系和總體模塊組成結(jié)構(gòu),即每個模塊都包含程序控制、參數(shù)設(shè)置、數(shù)據(jù)分析和數(shù)據(jù)顯示四個子模塊。
其中參數(shù)設(shè)置模塊、數(shù)據(jù)分析模塊和數(shù)據(jù)顯示模塊為功能模塊,程序控制模塊是系統(tǒng)的中樞部分,它負責(zé)協(xié)調(diào)各個模塊有效的配合和工作,接受操作者給出的各種指令,調(diào)用相應(yīng)的分析模塊算法,并把分析結(jié)果通過數(shù)據(jù)可視化接口顯示給用戶。子模塊的菜單、工具條及快捷鍵是程序控制模塊的外在表現(xiàn),并通過這些外在的表現(xiàn)與操作者交互,轉(zhuǎn)化為各個功能模塊能夠理解的內(nèi)部指令,統(tǒng)一調(diào)用功能模塊,實現(xiàn)用戶預(yù)期的指令目標。
數(shù)據(jù)分析模塊采用動態(tài)鏈接庫技術(shù),集成和封裝了系統(tǒng)所需的算法,并提供接口供程序控制模塊調(diào)用,是每個子模塊的核心部分。
數(shù)據(jù)顯示模塊負責(zé)將數(shù)據(jù)處理的結(jié)果以豐富的方式呈現(xiàn)給用戶,供用戶對處理結(jié)果進行評判或進一步的處理。
四個子模塊的組成關(guān)系如圖2所示。
3 系統(tǒng)的軟件設(shè)計
軟件系統(tǒng)設(shè)計與開發(fā)是整個分析系統(tǒng)開發(fā)的重點和難點。采用VC++為開發(fā)平臺,進行系統(tǒng)軟件設(shè)計。
軟件系統(tǒng)設(shè)計主要包括:軟件系統(tǒng)總體架構(gòu)設(shè)計、數(shù)據(jù)采集模塊設(shè)計、信號分析與處理模塊設(shè)計、數(shù)據(jù)存儲模塊設(shè)計等。
軟件系統(tǒng)總體架構(gòu)設(shè)計見第2部分,不再贅述。數(shù)據(jù)采集模塊、數(shù)據(jù)分析與處理模塊和數(shù)據(jù)存儲模塊。三個模塊之間,相互聯(lián)系,其功能分別如下:
數(shù)據(jù)采集模塊:采集卡參數(shù)設(shè)置、采集設(shè)備的啟停控制和復(fù)位,實現(xiàn)數(shù)據(jù)采集功能(連續(xù)采集或單次采集);數(shù)據(jù)分析和處理模塊:通過從數(shù)據(jù)采集模塊或存儲模塊的獲得數(shù)據(jù),結(jié)合分析參數(shù)的設(shè)置,實現(xiàn)信號實時波形顯示、頻譜分析、相關(guān)分析、包絡(luò)譜分析、統(tǒng)計特征分析等;數(shù)據(jù)存儲模塊:實現(xiàn)數(shù)據(jù)的存儲和讀取,并回放顯示、分析處理的功能。
3.1 系統(tǒng)界面設(shè)計
程序設(shè)計中,選用單文檔結(jié)構(gòu)來編制應(yīng)用程序。
基本布局設(shè)計如下:窗口頂部為菜單工具條區(qū)域,左下部分為數(shù)據(jù)顯示區(qū)域,右下部為數(shù)據(jù)信息瀏覽和控制區(qū)域。系統(tǒng)主界面如圖3所示。
首先將客戶區(qū)分割為1行2列兩個部分:左側(cè)為電壓值數(shù)字顯示窗口,關(guān)聯(lián)的類為CADDigitView(派生自CScrollView);右側(cè)為圖形顯示窗口,關(guān)聯(lián)的類為CAD-WaveView(派生自CScrollView)。參數(shù)設(shè)置及分析控制采用2個對話欄,派生自CDialogBar,用戶可以通過其進行采集卡參數(shù)設(shè)置和信號采集、分析控制。由于程序功能較為簡單,故在界面上幾乎就可以進行全部的操作,使用上極其方便。
3.2 主要處理算法
3.2.1 FFT
頻譜分析是數(shù)字信號處理技術(shù)的一個非常重要的手段,以便能清楚的看到某波形的頻譜分布情況.而要對一個輸入信號源作頻譜分析,將其由時域信號轉(zhuǎn)變?yōu)轭l域信號,就必然要用到傅里葉分析??焖俑道锶~變換(Fast Fourier Transform,FFT)的迅速發(fā)展,使數(shù)字頻譜分析取得了突破性的進展。FFT的算法種類較多,而且選擇使用的方式也各不一樣,本文選用時間抽選奇偶分解快速離散傅里葉變換。
基2型FFT算法的步驟如下:
(1)將原始序列按下標的奇、偶性質(zhì)不斷分解,一直由一個N 項序列分解為N 個單項重排序列;
(2)計算N 個單項序列的DFT.此時,N = 1,而0 n N - 1,所以,n = k = 0,于是:
即單項序列的DFT就是其自身,這樣就求得了N 個單項重排序列的DFT;
(3)對N 個單項重排子序列的DFT兩兩合成,最終得到一個N 項序列的DFT,這就是原始序列的DFT.
根據(jù)上面的指導(dǎo)思想,就可編制FFT計算程序。
在進行FFT時,按照“蝴蝶圖”所描述的計算方法對輸入的時域序列按奇偶分解后的序列排序而輸出的頻域序列仍是按自然順序排列的。此方法無須中間存儲單元,但需要倒一次序.
下面代碼用于完成對原始采樣時域序列的快速傅里葉變換,A,M 分別表示指向原始采樣數(shù)據(jù)數(shù)組的指針和序列長度的2的整數(shù)次冪:
1 kHz 矩形波頻譜圖,包括實譜、虛譜、幅值譜、相位譜如圖4所示。
3.2.2 相關(guān)性分析
在信號分析中,相關(guān)性是一個非常重要的概念,它表達了兩個信號(或一個信號不同時刻)之間的線性相關(guān)程度。
相關(guān)函數(shù)及其離散化數(shù)據(jù)計算公式為:
式中:N 為采樣點數(shù);Δt 為采樣間隔;n 為時間序列;r為時延序列(時間位移數(shù))。
自相關(guān)分析算法:
(1)標準方法
根據(jù)式(3)直接計算采樣數(shù)據(jù)之間的平均乘積,然后以此作為自相關(guān)函數(shù)估計。本次即采用該方法設(shè)計算法;
(2)間接方法
該方法得到的不是通常的自相關(guān)函數(shù),是“循環(huán)”相關(guān)函數(shù)。該方法通過在原數(shù)據(jù)補0后經(jīng)FFT,計算其自功率譜后做IFFT,取前半部分而得到其自相關(guān)函數(shù)。
互相關(guān)函數(shù)及其離散化數(shù)據(jù)計算公式為:
互相關(guān)分析算法:
(1)標準方法
根據(jù)式(5)直接計算采樣數(shù)據(jù)之間的平均乘積,然后以此作為互相關(guān)函數(shù)估計。本次即采用該方法設(shè)計算法;
(2)間接方法
該方法同F(xiàn)FT,計算其互功率譜后做IFFT,取前半部分而得到其互相關(guān)函數(shù)。
兩個不同頻率的正弦波信號的相關(guān)信號如圖5 所示,因為頻率不同,所以不相關(guān),其波形接近值恒為零的直線。
3.2.3 包絡(luò)線分析
信號的包絡(luò)通常有3種提取方法:Hilbert幅值解調(diào)法、檢波-濾波法和高通絕對值解調(diào)法。
Hilbert法解調(diào)出的包絡(luò)是對信號絕對值的包絡(luò),其解調(diào)幅值代表真實包絡(luò),且在ARM系統(tǒng)中,Hilbert變換可以方便地借助FFT來實現(xiàn),所以,本文采用Hilbert變換法提取信號的包絡(luò)。
具體的步驟如下:
(1)對x(t) 做FFT,得X(k),k = 0,1,2,-,N - 1,注意k = N 2,-,N - 1 對應(yīng)負頻率;
(2)Z(k) 的取值:
(3)對Z(k) 做逆FFT,即得到x(n) 的解析信號z(n) ;
(4)| z(n)|即為 x(n)的包絡(luò)。
通過以上分析編程實現(xiàn)了對信號的包絡(luò)解調(diào)。
圖6 所示為一調(diào)制波波形,對其進行包絡(luò)分析,結(jié)果如圖7所示。
4 閃屏現(xiàn)象及其解決方案
VC 中基于MFC 編寫的程序中,窗口的移動縮放、鼠標點擊等操作都會引起窗口重繪.本應(yīng)用程序中使用繪圖方式輸出采集數(shù)據(jù)、信號波形圖、頻譜圖等,繪制比較復(fù)雜,也比較消耗CPU時間,因此頻繁的重繪會引起畫面閃爍,影響信號動態(tài)顯示分析效果,為此這里采用了雙緩存技術(shù),解決閃屏問題。
雙緩存技術(shù)就是先在內(nèi)存中準備一塊區(qū)域,把要顯示的位圖都加載到內(nèi)存中,然后調(diào)用BitBlt函數(shù),把內(nèi)存設(shè)備復(fù)制到顯示設(shè)備上,這個過程比較簡單,就是將圖面的每個像素一次復(fù)制到輸出設(shè)備,不需消耗太多的時間,這樣就可以防止閃屏,改善顯示效果。
雙緩沖繪圖主要代碼如下:
5 系統(tǒng)測試分析
為驗證系統(tǒng)的正確性和可靠性,產(chǎn)生如下信號:
取分析長度(時間塊)T = 10 s,從式中可以看出有4種頻率
評論