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