王野
摘 要:Matlab是功能強大的工程計算和數據分析軟件,VC++是面向對象的快速開發工具,PCAuto組態軟件是面向監控與數據采集(Supervisory Control and Data Acquisition, SCADA)的軟件平臺工具。三者結合,可以取長補短,能開發出處理復雜矩陣運算且界面友好、滿足工程領域需要的應用軟件。本文探討了三者混合編程的詳細實現過程,通過一個Kalman濾波實例,說明了實現混合編程方法的過程和實用性。
關鍵詞:Kalman濾波;VC++;Matlab;PCAuto;混合編程
1 引言
濾波問題是如何從被噪聲污染的觀測信號中過濾噪聲,盡可能消除或減小噪聲影響,求未知真實信號或系統狀態的最優估計。由于信號和噪聲往往是多維非平穩隨機過程,因此1960年初Kalman[1,2]用時域上的狀態空間方法提出了Kalman濾波理論,提出了便于計算機上遞推實現的Kalman濾波算法,解決了多維非平穩隨機信號的濾波問題。我們基于Kalman濾波算法用Matlab實現仿真,通過VC將Matlab與組態軟件進行互聯,最終通過組態軟件來實現Kalman濾波器。
2 理論依據
考慮用如下狀態空間模型描寫的動態系統
其中t為離散時間,系統在時刻t的狀態為x(t)∈Rn,y(t)∈Rm為對狀態的觀測信號,方差為Q的輸入白噪聲w(t)∈Rr,方差為R的觀測白噪聲v(t)∈Rm,且w(t)和v(t)不相關。?椎,,H分別為已知的適當維矩陣。由[1,2]我們易知該系統的最優狀態濾波方程組為:
3 用Matlab實現Kalman濾波器仿真
在系統(1)和(2)中取?椎= 0.9 0-0.5 0.2,?祝=12,H=[1 1],Q=0.81, R=1。基于Kalman濾波原理(3)-(8), 通過Matlab在計算機上實現Kalman濾波器的仿真。
具體m文件源代碼如下:
for i=1:bushu
[x1(:,i+1)]=mult(fai,x(:,i));
[wa]=mult(tao,w(i));
[x(:,i+1)]=add(x1(:,i+1),wa);
[hx]=mult(H,x(:,i+1));
[y(i)]=add(hx,v(i));
[xjian(:,i+1),p]=kkmm(n,fai,tao,H,Q,R,p,xjian(:,i),y(i));
End
其中,調用了mult(),add(),kkmm()這三個函數,這些都是預先編寫好的。kkmm.m是整個程序的主要部分,即Kalman濾波算法。運行結果如圖1和圖2所示,其中實現表示真實狀態,虛線表示估計狀態。
4 VC++與Matlab混合編程的應用
VC++[3]具有很多的優點,但對于一些比較復雜的工程計算程序,編寫起來比較困難。Matlab語言是一種高級矩陣語言,對于一些復雜的運算有直接的函數可以調用,提高了編程的效率。
4.1 應用實例(Kalman濾波器)
建立一個基于對話框的MFC應用程序Kalman,通過制作一個曲線控件[3],可以清楚地看到xi(t)和 i(t|t)走勢。
其中,使用了WM_TIMER響應函數。運行結果如圖3所示,其中黃線表示真實狀態x(t)紅線表示估計狀態 (t|t)。
5 實現VC++與組態軟件的數據通訊
建立一個基于對話框的MFC程序VMP,按照本文4.2節提到的方法,將Kalman濾波器添加到當
前工程中。其中響應函數CVMPDlg::OnTimer(UINT nIDEvent)的主要源代碼如下:
for(int i = 0;i { CString strTagPar,strVal; XEstrTagPars.GetSubStr(i,strTagPar); pTagPars[i].vt = VT_BSTR; pTagPars[i].bstrVal = strTagPar.AllocSysString(); XEstrVals.GetSubStr(i,strVal); pVals[i].vt = VT_BSTR; pVals[i].bstrVal = strVal.AllocSysString();} m_pDbCom->SetStringData(iTagParCount,pTagPars,pVals); for (i = 0; i < iTagParCount; i++) { SysFreeString(pTagPars[i].bstrVal); SysFreeString(pVals[i].bstrVal);} delete pTagPars; delete pVals; 然后(t|t)可以通過上述源代碼進行數據傳遞,將數據從Matlab通過VC++傳到組態軟件當中去。 6 結論 通過上述方法,可以將Kalman濾波器應用到現場中,廣泛應用在信號處理、通信、目標跟蹤和控制等領域。VC++是Matlab與組態軟件結合的橋梁,從而擴大了Matlab的應用范圍。因此如何在特定的情況下使用最好的實現方法非常重要,隨著數據接口的進一步改善,混合編程將在工程應用中發揮其越來越重大的作用。 參考文獻 [1]Kalman R E. A New Approach to Linear Filtering and Predictioning Problems.Trans.ASME,J.Basic Eng.,1960,82D:34-45. [2]鄧自立,王欣,高媛.建模與估計(第二版)[M].北京:科學出版社,2016. [3]王東華,李櫻.VisualC++6.0從入門到精通[M].北京:人民郵電出版社,2016. [4]江澤林,劉維.實戰MATLAB文件與數據接口技術[M].北京:北京航空航天大學出版社,2014. [5]張瓊瓊,馬躍,王志成.組態式人機界面編輯與仿真技術[J].計算機系統應用,2015(04),26-31. [6]鄧云偉,杜衛星,楊光玲.基于組態軟件和FP23智能儀表的溫度監控系統設計[J].價值工程.2013(20),208-210.