基于VC6.0的遙測幀數、時(shí)間和特征參數的截取方法
(6)是否需要剔除無(wú)效幀。本文引用地址:http://dyxdggzs.com/article/154472.htm
最終確定的軟件界面如圖4所示。

2 軟件實(shí)現
按特征參數分割涉及到遙測參數解算。程序運行時(shí)首先加載動(dòng)態(tài)鏈接庫dbreader.dll,postpro.dll和eu.dll。在OnInitDialog中調用函數GetTMFrame FormatInfo來(lái)獲取遙測幀格式,包括遙測幀的長(cháng)度,碼率,同步碼位置等信息。然后調用函數GetTM ParaAllReeord來(lái)獲取所有參數在遙測幀中的位置信息,解算方法等。
當用戶(hù)從程序界面的參數下拉列表框中選擇一個(gè)參數時(shí),觸發(fā)CBN_SELCHANGE事件并調用消息函數。在消息函數中根據參數是幀同步數據還是幀異步數據分別調用GetASyncParaValue函數或EUConvert函數解算出數據,同時(shí)從數據中找出跳變點(diǎn),然后在圖形控件上繪出曲線(xiàn)。
2.2 按B碼時(shí)間分割
要想根據時(shí)間信息來(lái)查找對應的遙測幀就需要將該時(shí)間和文件中各遙測幀頭的B碼代表的時(shí)間進(jìn)行比較。如果采用遍歷查找的方法,對于總幀數為N的文件,理論上需要比較(N+1)/2次,要找到起、止兩個(gè)時(shí)間對應的幀就要比較N+1次。這對于較大的文件來(lái)說(shuō)消耗的時(shí)間會(huì )很長(cháng)。
在遙測文件中,每幀數據都是按接收到的先后順序從前往后依次存放。也就是說(shuō),搜索的目的序列是有序的。對于這種情況,可以采用折半查找法進(jìn)行搜索。理論證明,采用折半查找最多需要的比較次數為[log2(n+1)],搜索起、止兩個(gè)時(shí)間共需比較2*[log2(n+1)]次。
2.3 按幀序數分割
三種分割方式最后都歸結到按幀分割。按幀分割惟一復雜的地方就是剔除無(wú)效幀。要剔除無(wú)效幀需要將每一幀數據的同步碼取出來(lái)和標準的同步碼進(jìn)行比較。如果差異位數超過(guò)容許值就丟棄該幀,否則保留。很多程序都采用依次右移一位,看二者最低位是否相同,如果不同則計數加1,循環(huán)直到兩個(gè)數都為零的方法。
這種方法效率非常低。本文采用了如圖5所示的計算方法。

這種算法的關(guān)鍵在兩處:首先對兩個(gè)被比較數a和b按位異或,結果c的二進(jìn)制數中為1的位置就是a和b不一致的位置。然后c不停地與c-1按位與并將結果賦給c,直到c為O。通過(guò)歸納法可以證明c與c-1按位與可以消掉c的從低位往高位數的第一個(gè)1,所以c的二進(jìn)制值有幾個(gè)1就循環(huán)幾次。
3 結語(yǔ)
本遙測軟件采用模塊化設計,便于實(shí)現和測試。同時(shí)結合遙測文件的結構,實(shí)現了按幀序數、按時(shí)間和按特征參數三種分割方法,較好地滿(mǎn)足了型號遙測數據處理的需求。從軟件的設計可以看出,對于較復雜的軟件采用自頂向下,逐漸細化的分析方法,分模塊設計;對于影響程序性能的處理過(guò)程有針對性地進(jìn)行優(yōu)化,可以有效地提高程序的可靠性和性能并簡(jiǎn)化設計過(guò)程。
評論