周謙 江燕 董宜豐
隨著計(jì)算機(jī)技術(shù)的發(fā)展,信號接收設(shè)備大量運(yùn)用于計(jì)算機(jī)進(jìn)行設(shè)備控制、數(shù)據(jù)處理和人機(jī)交互。在接收設(shè)備完成天線信號接收、模數(shù)轉(zhuǎn)換和解調(diào)處理后,人機(jī)交互和后續(xù)數(shù)據(jù)處理顯示工作由計(jì)算機(jī)應(yīng)用軟件來完成。通常設(shè)備要求體積小、功耗低,編寫的軟件需充分發(fā)揮CPU性能,以提升設(shè)備效率。本文結(jié)合多通道接收設(shè)備,討論多線程技術(shù)在利用CPU資源方面的應(yīng)用。
設(shè)備情況
多通道接收設(shè)備用于0.1~30 MHz頻率范圍內(nèi)的短波無線電信號的接收和解調(diào)。接收設(shè)備采用CPCI總線化設(shè)計(jì),可滿足固定臺、站等不同場合下的應(yīng)用。接收設(shè)備可獨(dú)立完成常規(guī)信號的解調(diào),同時將解調(diào)的基帶I/Q和語音數(shù)據(jù)通過總線傳輸?shù)缴衔粰C(jī),實(shí)現(xiàn)上層網(wǎng)控處理。
多通道接收設(shè)備由CPCI主控單元、8塊接收板卡和CPCI機(jī)箱組成,如圖1所示。
接收設(shè)備主控單元采用CPCI主板,該產(chǎn)品是一款基于第三代低壓Intel i7雙核四線程(TDP 25 W、主頻2.5 GHz)的CPCI刀片式計(jì)算機(jī)。接收板卡包括信道電路、本振電路、信號處理電路和音頻功放電路。無線電信號經(jīng)過接收板卡處理后,轉(zhuǎn)換為基帶I/Q和語音數(shù)據(jù),再由驅(qū)動以中斷的形式通知操作系統(tǒng),將數(shù)據(jù)傳至應(yīng)用層軟件。應(yīng)用軟件把收到的數(shù)據(jù)處理后顯示為波形圖、頻譜圖,同時將數(shù)據(jù)以文件形式保存至硬盤,并通過網(wǎng)絡(luò)分發(fā)到后端臺位。
問題現(xiàn)象
由底層上傳的8路音頻數(shù)據(jù)最大采樣率為153.6 kbps,采用拉格朗日插值法實(shí)現(xiàn)任意可變采樣率時,運(yùn)算量非常大,應(yīng)用軟件出現(xiàn)卡頓現(xiàn)象,任務(wù)管理器的CPU使用約為28 %,并且CPU的線程1已接近滿載,如圖2所示。將數(shù)據(jù)存儲后用cooledit軟件打開時,發(fā)現(xiàn)保存在硬盤中的文件數(shù)據(jù)出現(xiàn)不連續(xù),如圖3所示,直接影響到后續(xù)的分析處理結(jié)果。
原因分析
監(jiān)視CPU使用情況,發(fā)現(xiàn)隨著使用路數(shù)的增加,CPU線程1的使用率隨之增加,但其他三路占用率變化不大。理想狀況下,每塊接收板卡的中斷到來后,應(yīng)用軟件立即接收數(shù)據(jù)并及時進(jìn)行處理。但是當(dāng)多路接收板卡同時工作時,由于各個接收板卡的硬件是相互獨(dú)立的,不同板卡產(chǎn)生中斷的時間間隔不確定,有可能非常接近。當(dāng)應(yīng)用軟件正在處理其中一塊接收卡數(shù)據(jù)時,另一塊接收卡產(chǎn)生中斷,造成數(shù)據(jù)阻塞。大量的阻塞發(fā)生后,導(dǎo)致CPU某一路占用度過高,影響系統(tǒng)的整體性能,造成數(shù)據(jù)處理和保存的異常。
解決辦法
由于數(shù)據(jù)處理需要占用部分CPU資源,當(dāng)8路接收卡的數(shù)據(jù)處理都是在主線程中完成時,無法充分利用CPU資源,因此采用多線程技術(shù)的應(yīng)用程序可以更好地利用系統(tǒng)資源。該方法主要優(yōu)勢在于充分利用了CPU的空閑時間片,用盡可能少的時間來對用戶的要求做出響應(yīng),使得進(jìn)程的整體運(yùn)行效率得到較大提高,同時增強(qiáng)了應(yīng)用程序的靈活性。
為此,在軟件中給8路接收卡的數(shù)據(jù)處理部分創(chuàng)建獨(dú)立的線程,并將未處理的數(shù)據(jù)緩存到數(shù)據(jù)池中,在各個線程中進(jìn)行數(shù)據(jù)處理與保存到硬盤的操作。使用AfxBeginThread函數(shù)創(chuàng)建線程,在線程中使用WaitForSingleObject等待事件被觸發(fā),處理完數(shù)據(jù)后調(diào)用ResetEvent復(fù)位事件信號,退出軟件時調(diào)用AfxEndThread函數(shù)結(jié)束線程。經(jīng)過調(diào)整后的軟件運(yùn)行時的CPU使用效率得到提升,資源分配均勻,如圖4所示;未出現(xiàn)卡頓現(xiàn)象,保存在文件中的數(shù)據(jù)連續(xù),如圖5所示。
通過對比增加數(shù)據(jù)處理多線程前后的CPU使用情況,可以明顯看到效率的提高和資源利用更加均衡。應(yīng)用軟件的多線程實(shí)現(xiàn)多路接收信號的并行處理與保存時,可提升CPU的處理效率,避免中斷影響數(shù)據(jù)處理和文件保存,保證了數(shù)據(jù)的連續(xù)性和有效性。