基于Python的虛擬儀器技術(shù)研究及實(shí)現
先用QtDesigner生成整體GUI框架,保存為Form.ui文件。Windows下運行cmd,在C根目錄調用pyuic4命令:pyuic4 Form.ui>Form.py,將PYQT生成的UI文件轉成py文件,然后自定義start.py直接調用生成的py文件,運行start.py就可以顯示創(chuàng )建的GUI界面。然后對GUI的每一個(gè)控件編輯其對應的信號與槽,比如在文中實(shí)例中的“關(guān)閉”按鈕,調用connect()方法綁定點(diǎn)擊按鈕的“clicked()”信號與槽函數close()”,這樣當我們鼠標點(diǎn)擊“關(guān)閉”按鈕的時(shí)候程序就會(huì )退出。與此類(lèi)似,綁定其余按鈕的功能。這里還可以調用:
PyQt4.QtCore.pyqtSignal(types[,name])
創(chuàng )建一個(gè)或多個(gè)重載綁定信號作為類(lèi)屬性。其中type確定信號的C++識別標志,類(lèi)型可以是Python類(lèi)型或C++類(lèi)型名稱(chēng)的字符串,也可以是類(lèi)型的一組列表,在列表情況下,每一項定義了不同重載方法,第一項為默認值。Name是信號的名稱(chēng),如果省略則使用屬性的類(lèi)的名稱(chēng),這只能作為一個(gè)關(guān)鍵字參數。
槽函數(slots)的設置是整個(gè)GUI的核心,基于Python面向對象的優(yōu)勢,我們可以調用各種父類(lèi),父類(lèi)方法,自定義類(lèi),自定義方法等等作為槽函數與相應的信號相綁定,實(shí)現程序的重復利用,并且可以在后期較容易的擴展程序的功能,通過(guò)這種代碼復用可以大大縮短虛擬儀器開(kāi)發(fā)周期。
1.3 NumPy的數據處理
虛擬儀器一般都會(huì )帶有顯示屏幕,有的儀表顯示數字,有的儀表則顯示圖形。通過(guò)軟件的形式顯示測量結果,一般需要對采集數據進(jìn)行大量的數學(xué)運算,比如信號調幅、調頻、濾波、數字信號處理等等,數據處理是虛擬儀器不可或缺的一部分,而且數據處理一般要求高效準確。NumPy相當于Matlab的Python版本,繼承了Matlab的強大數據處理能力。NumPy提供兩種基本的對象ndarray (N-dimensional arrayobie ct)和ufunc(universal function object)。ndarray是存儲單一數據類(lèi)型的多維數組,而ufunc則是能夠對數組進(jìn)行處理的函數。NumPy的核心是ndarray對象,它是一個(gè)封裝好的,只能存儲同個(gè)類(lèi)型數據的多維數組。NumPy里,數組元素對數組元素的操作是用C寫(xiě)的,并預先編譯好了以提高操作速度。NumPy不僅能保證足夠快速的計算處理,還繼承了Python語(yǔ)言代碼簡(jiǎn)潔的特性。比如需要對一個(gè)給定的多維數組x進(jìn)行FFT變換,只需調用np.fft.fft(x)就可以得到變換的結果。
2 方案設計與驗證
基于上述的討論,設計完成了一個(gè)虛擬頻譜分析儀,該儀器的工作原理是通過(guò)設置儀器相關(guān)的參數對采集信號進(jìn)行實(shí)時(shí)顯示,而后通過(guò)濾波加窗等處理進(jìn)行頻域分析,得到幅值譜、相位譜、自相關(guān)函數、相干函數等的過(guò)程。儀器系統的處理流程如圖2所示。本文引用地址:http://dyxdggzs.com/article/193036.htm
在儀器的波形顯示部分,這里調用了Tabwidget控件,通過(guò)控制Tabchange()信號實(shí)現時(shí)域波形和頻域波形的顯示及切換。Tabwidget本身無(wú)法充當畫(huà)布功能,也就是說(shuō)不能直接在上面顯示波形。因此,在Tabwidget的2個(gè)tab標簽中分別嵌入一個(gè)QwtPlot控件,它可以提供一個(gè)二維的坐標圖,讓我們在上面繪制曲線(xiàn)、刻度值等我們想要表達的圖形數據信息。調用setAxisTitlle(xBottom,String)方法和setAxisTitlle(vLeft,Str4ng)方法可以改變坐標軸橫坐標及縱坐標的名稱(chēng)。同時(shí)還需要創(chuàng )建一個(gè)QwtPlotCurve用來(lái)控制QwtPlot上的曲線(xiàn)類(lèi)型,它可以設定線(xiàn)的樣式(實(shí)線(xiàn)或虛線(xiàn))、線(xiàn)寬、顏色等。取得需要顯示的波形數據后,通過(guò)setData()方法,先將數據給予QwtPlotCurve,然后由QwtPlot Curve通過(guò)調用attach()方法將波形繪制到QwtPlot上,最后通過(guò)QwtPlot類(lèi)的repoh()方法將波形顯示在GUI界面的Tabwidget控件中。
輸入信號后,調用combobox控件的GetWindowText()方法取得采樣頻率,采樣點(diǎn)數等參數信息,通過(guò)綁定“開(kāi)始采樣”的“clicked()”信號觸發(fā)相關(guān)槽函數將波形顯示在窗口上。這里放置了3個(gè)RadioButton,并把他們嵌入到Gmup Box里作為一個(gè)整體,通過(guò)他們的Checked屬性,獲取相應窗函數信息對信號進(jìn)行加窗處理,分析。
儀器界面的效果圖如圖3所示。
3 結束語(yǔ)
Python是一門(mén)年輕、開(kāi)源、充滿(mǎn)活力的腳本編程語(yǔ)言。文中以Python為核心,結合PYQT把面向對象思想應用于虛擬儀器開(kāi)發(fā),使用戶(hù)可以根據自身需求方便地修改程序以增減儀器的系統功能或規模,而且可以充分實(shí)現程序的重復利用。用Python開(kāi)發(fā)虛擬儀器層次清晰,周期短,代碼易修改。在一定程度上比LabvIEW具有更大的優(yōu)勢,具有廣泛的研究前景。
c++相關(guān)文章:c++教程
評論