張聰慧,鄭正奇
(華東師范大學(xué) 信息科學(xué)與技術(shù)學(xué)院,上海200241)
以多通道測距雷達信號的處理為研究背景,要求對USB數(shù)據(jù)采集卡傳輸?shù)缴衔粰C的數(shù)據(jù)進行數(shù)字信號處理,得到多路測距雷達差頻信號的頻率與電壓幅度。為此以Matlab為平臺,接收USB傳輸?shù)臄?shù)據(jù),然后進行處理,并使用Matlab GUI設(shè)計用戶操作界面,完成了一個完整的基于Matlab的USB數(shù)據(jù)采集卡上位機程序。
本上位機系統(tǒng)對應(yīng)的USB數(shù)據(jù)采集卡與上位機的接口基于Cypress公司的CY7C68013A,它支持USB 2.0協(xié)議,且自帶增強型8051單片機。利用Mex文件作為Matlab與C語言的程序接口,實現(xiàn)了Matlab對USB接口數(shù)據(jù)的讀寫操作,并利用Matlab進行進一步的數(shù)據(jù)處理和界面顯示。系統(tǒng)框圖如圖1所示。
圖1 系統(tǒng)框圖Fig.1 System block diagram
Matlab不能直接對USB數(shù)據(jù)進行操作,但可通過API與外部程序接口,即Mex文件,來調(diào)用C語言程序加以實現(xiàn)。
Mex文件是個動態(tài)鏈接子程序,它可在Matlab中被直接調(diào)用來控制多種硬件接口。Mex文件分為兩部分:控制實現(xiàn)部分以及入口程序部分,它們分別負責(zé)程序的功能實現(xiàn)和與Matlab的數(shù)據(jù)連接。
本設(shè)計中,Mex文件使用VC2008進行編寫,新建工程類型為MFC DLL,Cypress公司提供適用于CY7C68013A的API函數(shù)庫,可以通過將CyAPI.h和CyAPI.lib添加到VC工程中直接加以調(diào)用,從而實現(xiàn)各種USB接口操作[1-2]。
程序中,Mex控制實現(xiàn)部分的具體功能依次為:調(diào)用USB驅(qū)動模塊,打開USB設(shè)備,讀取USB數(shù)據(jù),將讀取的數(shù)據(jù)寫到緩沖區(qū)中。它由入口程序調(diào)用,部分程序代碼[3]如下:
Mex入口程序是Matlab與Mex控制實現(xiàn)部分的接口,其參數(shù)prhs、nrhs、plhs、nlhs分別為輸入?yún)?shù)數(shù)列、輸入?yún)?shù)的個數(shù)、輸出參數(shù)數(shù)列以及輸出參數(shù)的個數(shù)。
本段代碼只負責(zé)接收USB數(shù)據(jù),所以Mex接口程序中沒有輸入?yún)?shù),輸入?yún)?shù)數(shù)列為空,程序?qū)⒆x取的USB數(shù)據(jù)直接通過plhs指針傳輸給主程序,實現(xiàn)與主程序的數(shù)據(jù)傳遞功能。相關(guān)程序代碼如下:
在Mex文件編寫完之后,通過VC生成.DLL文件,將此文件復(fù)制到Matlab的當(dāng)前目錄(current path)下,在Matlab的命令窗口或者.M文件中輸入.DLL文件的文件名即可實現(xiàn)Matlab對其的調(diào)用,從而實現(xiàn)了Matlab對USB數(shù)據(jù)的讀寫操作。
在通過Mex文件完成了對USB數(shù)據(jù)的讀取和存儲后,在Matlab環(huán)境中利用數(shù)字信號處理函數(shù)對數(shù)據(jù)進行濾波、FFT等處理,從而實時地處理6個通道的數(shù)據(jù),并將各自的頻率、電壓幅度等值顯示在GUI界面上。
使用Matlab進行數(shù)字信號處理的步驟如下[4-6]:
1)在.M文件調(diào)用Mex文件生成的.DLL得到USB接口傳輸?shù)缴衔粰C的數(shù)據(jù),并將每個通道的數(shù)據(jù)分別放入各自數(shù)組中。
2)因為雷達差頻信號經(jīng)采集卡的信號調(diào)理電路后,原本的交流信號疊加在1 V的直流電平之上,因此在進行FFT之前需要通過數(shù)字信號處理去掉直流分量,以保證直流分量不會對頻率和幅度測量結(jié)果產(chǎn)生影響。利用detrend函數(shù)去掉信號中疊加的直流成分。
3)因為該雷達差頻信號夾雜有低頻干擾信號,所以在FFT之前需要進行高通濾波。
本程序利用[B,A]=ellip(N,Rp,Rs,wn,‘high’)函數(shù)設(shè)計數(shù)字橢圓高通濾波器,再利用filter函數(shù)對各通道數(shù)據(jù)進行濾波。其中,橢圓濾波器參數(shù)N,Rp,Rs,wn在本程序中設(shè)有默認值,用戶也可以在GUI界面中根據(jù)需要對任意參數(shù)的值進行修改。
4)利用FFT函數(shù)對濾波后的數(shù)據(jù)進行快速傅里葉變換。因為FFT程序中所用數(shù)據(jù)點數(shù)與原含有信號數(shù)據(jù)點數(shù)相同時,頻譜圖具有較高的質(zhì)量,可以減少因補零或截斷而產(chǎn)生的影響,本程序中每個通道數(shù)據(jù)緩存區(qū)數(shù)組大小為1 024,所以對每個通道進行1 024點FFT,通過進一步地運算,便可得到信號的瞬時頻率和電壓幅度。
MATLAB GUI是一種新型的圖形用戶界面開發(fā)方式,用戶可以通過GUI界面與Matlab程序進行交互。本程序的GUI操作界面如圖2所示,該界面應(yīng)用的控件包括控制按鈕、參數(shù)設(shè)置編輯框和結(jié)果顯示文本框[7]。
圖2 GUI操作界面Fig.2 GUI operating interface
Matlab擁有強大的數(shù)據(jù)處理和分析功能,但不能直接對USB接口數(shù)據(jù)進行實時讀寫操作。文中將Mex文件作為Matlab與C語言程序的軟件接口,使Matlab能夠調(diào)用VC函數(shù)來接收USB數(shù)據(jù)采集卡傳遞的數(shù)據(jù),然后進一步對采集到的多通道數(shù)據(jù)分別進行數(shù)字信號處理,得到每個通道的信號頻率和電壓幅度,并顯示在Matlab GUI界面上,從而實現(xiàn)了基于Matlab的USB數(shù)據(jù)接收與處理軟件系統(tǒng)。
[1]石波,陳淑珍,沈海鷗.VC與Matlab接口方法的剖析[J].計算機工程,2000,26(3):98-100.SHI Bo, CHEN Shu-zhen,SHEN Hai-ou.The analyze of interface method between Matlab and visual C++[J].Computer Engineering, 2000, 26(3):98-100.
[2]許大好,李詢,謝倩.用Matlab控制NI數(shù)據(jù)采集卡實現(xiàn)實時數(shù)據(jù)采集[J].常州工學(xué)院學(xué)報,2006,19(5):35-38.XU Da-hao, LI Xun, XIE Qian.Data acquisition system based on NI card and Matlab environment[J].Journal of Changzhou Institute of Technology, 2006, 19(5):35-38.
[3]王世香.精通MATLAB接口與編程[M].1版.北京:電子工業(yè)出版社,2007.
[4]胡廣書.數(shù)字信號處理理論算法與實現(xiàn)[M].2版.北京:清華大學(xué)出版社,2003.
[5]萬永革.數(shù)字信號處理的 MATLAB實現(xiàn)[M].北京:科學(xué)出版社,2007.
[6]方勇.數(shù)字信號處理——原理與實踐[M].北京:清華大學(xué)出版社,2005.
[7]蘇金明.MATLAB7.0實用指南[M].北京:電子工業(yè)出版社,2006.