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