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