??? 摘? 要:? Windows環境下Matlab與TDS系列數字示波器的通信過程,給出了相關的通信程序,并在Matlab中對示波器讀取的波形數據進行了頻域處理。從而表明它們之間的通信在數字信號處理方面具有重要的實際意義。?
??? 關鍵詞:? Matlab 串行通信 示波器 數字信號處理
?
??? Tektronix公司的TDS系列數字實時示波器在國內已經得到廣泛的應用,與其配套的擴展模塊TDS2CM和TDS2MM模塊具有與外部設備雙向通訊的能力,可直接與打印機、微機連接,使波形的存儲和打印等工作變得十分方便,其中TDS2MM還具有FFT功能,可以對波形進行實時的頻譜分析。同機配送的Wavestar軟件提供了PC機與示波器雙向通訊的功能,具有良好的用戶界面,但其數據處理功能卻是很少,僅能對波形的幅值、頻率、周期、上升和下降時間等進行測量,并且大多數用戶出于價格考慮而配置TDS2CM模塊,它不具備TDS2MM模塊的頻譜分析功能,這就限制了示波器的進一步開發利用。Mathworks公司的著名數值計算軟件Matlab具有強大的數值計算功能,它的Instrument Control Toolbox提供了強大的外設控制功能,可以對GPIB、RS-232、VXI、Centronics端口進行控制。用Matlab與TDS2CM模塊配合可以實現示波器與微機之間的數據通訊,利用Matlab強大的數值處理、矩陣運算功能可對示波器記錄的波形數據進行分析和處理。?
1 通信原理?
??? Matlab中的Instrument Control Toolbox包括兩大部件:M文件函數和接口驅動適配器。這兩部件提供了Matlab與外設的通訊功能,其與串行通訊端口的通訊原理如圖1所示。
?

?
??? 由圖1可見,Matlab的兩大部件提供了一條外設與Matlab之間的交互通道,使用戶與外設之間進行信息獲取和傳送。同許多高級語言一樣,Matlab通過調用M文件函數來創建設備對象,得到設備的文件句柄,而設備驅動程序作為操作系統中直接控制硬件的模塊,是鏈接操作系統內核與系統外部設備I/O操作的關鍵模塊。它將具體的硬件細節隱藏實現對外設操作的透明,因此Matlab可以象操作文件一樣實現對外設的讀、寫操作。讀寫時的數據傳輸格式、輸入輸出緩沖區大小以及讀寫溢出時間等由圖1中的屬性值定義,其根據為具體的通訊端口和通訊方式以及數據大小。示波器所產生的事件和狀態被示波器保存在標準事件狀態寄存器(SESR)、狀態字節寄存器(SBR)和事件隊列中,供Matlab回調函數讀取。同時用戶可以通過設置設備事件狀態使能寄存器(DESER)以及事件狀態使能寄存器(ESER)、服務請求使能寄存器(SRER)這三個使能寄存器來控制何種事件或狀態被保存在狀態寄存器和事件隊列中。Matlab對示波器的設置和詢問命令由fprintf函數以字符串的形式輸出。設置和詢問命令由具體的示波器廠商定義,其格式為:Header Arguments,多個參數之間由逗號相隔。當以二進制格式對示波器的波形進行數據讀寫時,讀寫數據與示波器實際數據換算由下式給出:?
??? Xn=Xzero+Xincr·n?
??? Yn=Yzero+Ymult(yn-Yoff)??????????????????? ?? (1)?
??? 其中,yn為輸入、輸出緩沖區中的數據,n為數據個數,Xn、Yn為示波器中實際采樣時間與信號幅值。?
2 數據傳輸?
??? RS-232串行通信接口被廣泛應用于近距離的計算機和終端之間的相互通信當中,TDS210示波器也配接有DB9型插件的RS-232接口。當采用硬件握手方式進行通信控制時,示波器使用CD(Carrier Detect)、CTS(Clear To Send)、RI(Ring Indicator)三個控制信號表明其當前狀態,而Matlab使用RTS(Request To Send)信號請求數據發送。由于采用異步通信協議對通信雙方的時鐘同步要求不太嚴格,由數據的起始位作為雙方通信的同步信號,因此Matlab與示波器之間采用異步通信,編制的從示波器讀取數據的部分程序如下:?
??? %創造設備對象?
??? g=serial(‘com1’);?
??? %通信初始化g.InputBufferSize=10000;?
??? g.timeout=10;?
??? %設定傳輸波特率為9600b/s,字符格式為:8位數據位,1位停止位,終止符為LF,沒有奇偶校驗位,使用硬件握手方式。?
??? g.BaudRate=9600;?
??? g.Parity=‘none’;?
??? g.StopBits=1;?
??? g.Terminator=‘LF’;?
??? g.FlowControl=‘hardware';?
?
??? %連接到設備對象?
??? fopen(g) ?
?
??? %數據傳輸?
??? fprintf(g,'select: refa on');?
??? fprintf(g,'data:source refa');?
??? fprintf(g,'data:encdg srib');?
??? fprintf(g,'data:start 1');?
??? fprintf(g,'data:stop 2500');?
??? fprintf(g,'data:width 2');?
??? fprintf(g,'wfmpre:xzero?');?
??? xzero=fscanf(g,'%f');?
??? fprintf(g,'wfmpre:xincr?');?
??? xincr=fscanf(g,'%f');?
??? fprintf(g,'wfmpre:yzero?');?
??? yzero=fscanf(g,'%f');?
??? fprintf(g,'wfmpre:ymult?');?
??? ymult=fscanf(g,'%f');?
??? fprintf(g,'wfmpre:yoff?');?
??? yoff=fscanf(g,'%f');?
??? fprintf(g,'curve?');?
??? out=fread(g,2500,'int16');?
??? ????????? ┆?
??? %釋放設備對象與端口?
??? fclose(g);?
??? delete(g);?
??? freeserial('com1');?
??? 用上述程序對示波器進行讀取的方波信號如圖2所示。?
?

?
3 數據分析實例?
??? 從示波器讀取的數據按(1)式轉換后就是實際測量所得的波形數據值,相應的采樣頻率為
L1空間的信號滿足絕對可積條件,可以用快速傅立葉變換算法直接進行頻譜分析。圖3為對讀取的方波所做的FFT結果。由于對采樣信號的截取相當于對信號加矩形窗,不可避免地引起頻譜泄漏和混疊,在滿足采樣定理和保證示波器波形周期完整的條件下,所做的頻譜分析結果與示波器所得的波形周期數無關。對于噪聲信號可作功率譜估計,上述采樣信號的功率譜估計如圖4所示。?
?

?

?
??? 從上面的數據通信過程和對采樣信號頻譜分析及功率譜估計實例可以看出:Matlab與示波器組成了一個信號采集及分析系統,示波器在其間起數據采集和存儲作用,而Matlab則實現對采樣得到的信號進行分析和處理。?
參考文獻?
1 于英民,莫 瑋,于佳.計算機接口技術.北京:電子工業出版社,1999.10?
2 王炳武, 胥 谞. MATLAB5.3實用教程.北京:中國水利水電出版社, 2000.7?
3 Programmer Manual.TDS 200-Serial Digital Real-Time Oscilloscope. Tektronix, Inc.
