摘 要:將主要用于測控領域的虛擬儀器擴展作為一種通用信號處理平臺。以NI的LabVIEW為框架,以NI的數據采集卡為主要硬件設計了一個完整的信號處理平臺,在該平臺上可以快速構建多種多樣的信號處理系統,實現數據的現場采集與處理。此外,針對LabVIEW的一些不足,平臺提供了多種編程語言的接口,使用者可以根據需要,選用Matlab,C語言等填寫核心算法,從而發揮各種編程語言的優點,增強平臺的通用性且豐富了系統的功能。最后,運用該平臺搭建了2FSK信號解調系統,驗證了該平臺的通用性和有效性。
關鍵詞:虛擬儀器; 數據采集; 信號處理; 混合編程
中圖分類號:TP313 文獻標識碼:A
文章編號:1004-373X(2010)09-0187-04
Quick Construction of Signal Processing Platform with
Virtual Instruments and Hybrid Programming
HUANG Yong-hua1, TANG Zhi-liang1,2, GAO Yong1
(1.College of Electronics and Information Engineering, Sichuan University, Chengdu 610065, China;
2.Chongqing Communication Institute, Chongqing 400035, China)
Abstract: The virtual instrument which is widely used in industrial measurement and control is applied as a common signal processing platform. A perfect signal processing platform which takes LabVIEW as the framework, and a data acquisition card as the main hardware is designed. Various kinds of field signal processing systems can be quickly built on this platform to realize the real-time data acquisition and processing. Considering the deficiency of LabVIEW, various kinds of program languages such as Matlab or C are supported by this platform. The hybrid programming can take advantage of each program language, which enhances the compatibility and the functions of this platform. A 2FSK demodulation system was successfully built to demonstrate the compatibility and effectiveness of this platform.
Keywords: virtual instrument; data acquisition; signal processing; hybrid programming
0 引 言
虛擬儀器技術以通用計算機為基礎,外加少量硬件設備,就可完成信號的分析測量工作。與普通儀器相比,虛擬儀器具有低成本,多功能等優點。近幾年虛擬儀器發展迅速,目前全球已有很多家虛擬儀器供應商,本文選用NI(美國國家儀器)公司的虛擬儀器產品。
在虛擬儀器構建的測量分析系統中,主要硬件設備是數據采集卡。NI公司的數據采集卡種類豐富,簡單易用,能滿足各種應用場合,選用現成的數據采集卡可以省去很多硬件開發工作。NI公司開發的圖形化編程軟件LabVIEW將硬件驅動和一些簡單的信號處理函數編寫成一系列獨立的VI(Visual Instrument)模塊,既能實現與硬件的無縫連接,又能進行簡單的信號運算分析。同嵌入式系統開發相比,LabVIEW環境下的系統開發不必考慮如寄存器配置、存儲空間分配等復雜問題,開發工作變得如同軟件仿真一樣簡單。
MathWorks公司的Matlab是一種公式化編程語言,有十分豐富的庫函數和工具箱、信號處理功能強大、但與硬件結合不夠緊密;C語言使用廣泛,語法嚴謹、程序結構清晰、可移植性好、執行效率較高;LabVIEW的圖形化編程語言(G語言)作為一種較新的編程語言,目前還未被廣泛使用。為了使各種編程語言能優勢互補,本文采用編程接口技術實現LabVIEW環境下多語言混合編程,以充分發揮各種編程語言的長處。
1 平臺結構
圖1列出了平臺結構框圖,數據采集端由傳感器和采集卡組成。傳感器輸出的模擬信號進入數據采集卡。在某些應用場合,傳感器和數據采集卡之間需要加上信號調理設備,以實現多路復用、信號幅度調整、濾波等功能。
在“LabVIEW編程環境”下完成兩項任務,首先是配置數據采集卡并接收數據,配置參數包括輸入接線端配置、物理通道選擇、采樣時鐘設置、緩沖區設置、每通道采樣數設置等;其次是對數據流進行實時分配并處理。為了實現處理的連貫性,采用NI定義的“生產者/消費者設計模式”[1],該結構通過響應事件實現代碼的異步執行,同時不影響用戶界面的響應速度。“生產者/消費者設計模式”是將數據采集和數據處理分別放在兩個循環里單獨執行,數據采集循環每一次采集的若干個樣點定義為一個采樣幀,數據處理循環每執行一次,完成一個采樣幀的分析。采集的數據用隊列緩存。隊列是一種數據存儲結構,遵循FIFO(First In First Out)存取機制,每個采樣幀作為隊列的一個元素由隊列尾部入列,數據處理循環不斷地從隊列頭部取走元素直至取完,取完后等待新采集的數據到來。因此,在“生產者/消費者設計模式”下,只要數據處理循環單次執行時間小于數據采集循環單次執行時間,就可以實現連續的實時分析。“函數模塊”包含供LabVIEW調用的核心算法,通過編程接口技術實現參數的傳遞。函數模塊的編寫較自由,兼容多種編程語言,某些現有的代碼幾乎不用修改就可以直接使用。運算結果可以通過LabVIEW前面板輸出,也可以由“函數模塊”直接輸出。在某些對程序前面板有特殊要求的場合,例如儀表面板等,這時采用LabVIEW前面板作為輸出界面更直觀。
圖1 系統結構框圖
2 LabVIEW與其他編程語言的接口
2.1 動態鏈接庫接口和CIN(Code Interface Node)
動態鏈接庫(DLL)是Windows操作系統的基礎,動態鏈接庫通常都不能直接運行,它們是一些獨立的文件,其中包含能被可執行程序或其他DLL調用來完成某項工作的函數。只有在其他模塊調用動態鏈接庫中的函數時,它才發揮作用。LabVIEW支持動態鏈接庫技術,支持動態加載和隱式鏈接,兼容標準調用約定和C調用約定。
下面以隱式調用為例說明LabVIEW和Visual C++的接口建立過程:首先在Visual C++中創建一個WIN32動態鏈接庫或MFC類庫并將函數導出[2],然后選擇LabVIEW“互聯接口”菜單下的“調用庫函數節點”,指定動態鏈接庫(DLL)文件和引入庫文件的路徑名稱,選擇要調用的函數并配置參數,參數與原函數形參類型要保持一致,如果是數組,則要求長度一致。此時在程序面板里可以看到“調用庫函數節點”模塊上的參數接線端,最后連接需要傳遞的參數,則可建立隱式調用模塊。CIN節點[1]是專門用來調用C/C++代碼的功能節點,可以直接向VI中添加C/C++代碼,十分簡便。
2.2 專用Matlab接口
LabVIEW提供了兩種常用Matlab接口:第一種是MathScript節點[1],在LabVIEW程序框圖面板的編程菜單結構子菜單下可以找到MathScript節點,在MathScript框內直接填寫Matlab代碼便能生成腳本,由于腳本的執行需要調用Matlab軟件腳本服務器,因此必須安裝具有許可證的Matlab 6.5或以上版本才能使用Matlab腳本節點。Matlab腳本節點僅適用于Windows操作系統,目前MathScript還不支持所有的Matlab函數,應用受到一定的限制。
第二種Matlab接口是使用調用節點(ActiveX)技術引用MLApp.DIMLApp對象[3],從LabVIEW“互聯接口”面板選擇“調用節點”模塊,然后為該模塊配置ActiveX類,打開類列表,如果PC上安裝了具有許可證的Matlab 或MCR,則可以看到名為“Matlab Application”的類,對該類進行展開可以看到有幾個對象,選用MLApp.DIMLApp對象,方法列表中的Excute方法是執行函數命令,Quit方法是結束函數命令。由于在Matlab工作區間中的數據是矩陣類型,而在多數編程語言中只有數組類型沒有矩陣類型,數組和矩陣看似十分相似,但傳參時數組并不能代替矩陣。Putfullmatrix方法和Getfullmatrix方法解決了兩者的轉換問題,Putfullmatrix將實參數組變換成矩陣傳入Matlab工作區間,Getfullmatrix將Matlab工作區間內的矩陣轉換為變體(一種變量類型)傳出。
圖2為引用示例,首先在Matlab下編寫函數:function[b]=funtest(a),函數內容任意,函數以m文件存在Matlab默認運行目錄下。然后在LabVIEW中編寫圖2所示程序。程序中三個數組為函數的實參;a,b為Matlab工作區間中的矩陣,是函數的形參。當程序執行時,圖中“數組”和“數組2”分別轉換為矩陣的實部和虛部賦給a,“數組”和“數組2”的長度要一致。返回值是變體類型,經過變體至數據轉換后賦給“數組3”。
2.3 基于COM組件的接口技術
基于COM組件的接口技術適合于所有支持COM技術的編程工具。既然LabVIEW可以調用節點,完全可以自己創建一個注冊類然后在LabVIEW中調用。調用一般遵循這樣一個過程:獲取類引用、執行函數、結束函數、關閉類引用。循環運算時為了提高執行效率,可以把獲取類引用和關閉類引用放到循環外部。Matlab環境下生成可用的COM組件步驟如下[4]:
首先在Matlab中新建一個“Funtest.m”文件,編寫如下測試代碼:
function[b]=Funtest(a)
b=sin(a);
啟動Comtool工具箱(Matlab 7.0版本提供了Comtool工具箱,新版本的comtool已并入deploytool工具箱),新建一個工程,自定義類名為“IFuntestclass”,通過“Project”菜單下的“Addfiles”將Matlab函數文件(funtest.m文件)加入工程,運行Build菜單下的Com Object,此時便生成了一個后綴為.dll動態鏈接庫文件,然后在Windows命令行使用regsvr32命令完成該類的注冊。LabVIEW引用程序如圖3所示。
圖2 引用MLApp.DIMLApp對象示例
圖3 COM組件引用示例
函數模塊有三個輸入接線端一個輸出接線端,“nargout”為輸出參數個數,參數b有左右兩個接線端,依次對應初始值和返回值。注冊類的函數在傳參的時候有一定的局限:不支持數組類型的返回值,例如圖3中的返回值b若是數組,則無法正確傳給顯示控件“輸出”。這種情況下如果要觀察數組b的值,只能使用Matlab繪圖函數將b繪制為曲線,或將b的內容保存為數據文件。
3 系統實現
在該信號處理平臺上可以搭建多種實際系統,此處以二進制頻移鍵控(2FSK)[5-6]信號解調為例進行演示。2FSK是常見的數字調制方式,2FSK信號有兩種載頻(fs和fm)分別對應0符號和1符號。常見的2FSK解調方法有三種:非相干解調、相干解調、PLL-FSK解調[7]。此處采用非相干方式解調。非相干解調分為帶通濾波、包絡檢波和抽樣判決三個步驟[8]。
FSK信號由Agilent 3320A信號發生器產生,fs=10 kHz,fm=30 kHz,信息傳輸速率Rb=1 Kb/s,由于信號發生器直接提供電壓信號,故系統省去了圖1中的傳感器部分,在實際通信系統中,接收機前端的信號要經過適當調理再進行解調。采集卡選用NI公司的NI9215,該采集卡輸入信號峰值電平為±10 V,最多可進行4個通道的同步數據采集,采樣率可達到100 KSPS,量化精度為16 b。同時可通過USB-9162轉接器實現與PC的USB端口互聯。
數據采集卡采樣率設為96 kB/s,為了抑制共模干擾,信號發生器輸出端模擬信號通過差分方式連接到采集卡,同時,代碼中“輸入接線端設置”設為“差分方式”,通道數設為1。在本系統中,運算結果的延時約等于采樣幀的時長,因此,采樣幀越長實時性越差。增加采樣幀的長度,可以減少PC與采集卡的頻繁通信,提高了執行效率。要對運算延時和執行效率進行折衷,必須選擇合適的采樣幀長度,這里將采樣幀長設為4 800點,以采樣幀為單位逐幀進行解調。
限于篇幅,此處僅以2.2節中介紹的第二種Matlab編程接口為例進行演示。主程序圖如圖4所示。
圖4 主程序圖
圖4中程序上半部分為數據采集,其中包括數據采集通道配置、創建隊列和數據采集循環;下半部分為數據處理循環,其中包含 “FskDemod.vi”子VI,即Matlab編寫的核心算法,子VI與Matlab函數模塊接口如2.2所述。帶通濾波器的設計是FSK解調算法的核心,在Matlab中使用“fdatool”工具箱設計兩個30階的FIR帶通濾波器,中心頻率分別為10 kHz和30 kHz,提取濾波器系數,再調用“filter”函數進行濾波,實現過程十分簡單。除了FSK解調,本平臺還適用于多種通信系統。虛擬儀器在通信領域正被越來越多的使用[9-10]。圖5,圖6為某工作時刻LabVIEW前面板的繪圖界面,圖5為2FSK信號波形,圖6為包絡檢波后的波形。為了便于展現,圖5,圖6只畫出了一個采樣幀的前192點的波形。包絡檢波結果再經過抽樣判決便得到二進制數據流。
圖5 2FSK波形
圖6 包絡檢波后波形
4 結 語
借助虛擬儀器穩定的硬件模塊和靈活的軟件環境,為開發者設計了一個實用的信號處理平臺。該平臺上的系統開發硬件調試簡單,軟件編寫也十分自由。該平臺非常適合用來快速搭建現場實驗系統以及演示系統,還可以擔任嵌入式系統開發前期的評估和輔助工作。例如在該平臺下用C語言編寫并調試通過的算法可以快速移植到DSP系統。開發者可以根據實際需要選擇更高端的數據采集卡,快速搭建各種信號處理系統,具有較好的實用價值。
參考文獻
[1]National Instrument Corporation. LabVIEW help[EB/CD]. [S. l.]: National Instruments, 2009.
[2]孫鑫,余安萍.Visual C++深入詳解[M].北京:電子工業出版社,2006.
[3]裴鋒,楊萬生.LabVIEW與Matlab混合編程[J].電子技術應用,2004(3):4-6.
[4]Mathworks Corporation. Matlab Builder for COM. Version 1.1[EB/CD]. [S.l.]: Mathworks Conporation, 2004.
[5]GLOVER I A, GRANT PETER M. Ditital communication[M].2nd ed. 北京:機械工業出版社,2004.
[6]COUCH Jr L W. Digital and analog communication systems[M]. 6th ed. 北京:科學出版社,2003.
[7]TOMASI Wayne. Electronic communications systems, fundamentals through advanced[M]. 4th ed. 北京:電子工業出版社,2002.
[8]SKLAR Bernard.數字通信基礎與應用[M].徐平平,宋鐵成,葉芝慧,譯.2版.北京:電子工業出版社,2007.
[9]DAS P K, KOCH D B. On the use of visual programming languages for communication system simulation[J]. IEEE Proceedings,1991:158-162.
[10]WANG Hua, ZOU Yi. Software instruments based on software radio concept[J]. International Conferences on
Info-tech and Info-net2001, 2001, 29(2): 459-463.
[11]趙麗維.基于LabVIEW 8.5的信號幅值特征值求取系統設計[J].現代電子技術,2009,32(15):119-121.