王 鑫,張?bào)@雷
(天津市復(fù)雜控制理論及應(yīng)用重點(diǎn)實(shí)驗(yàn)室,天津理工大學(xué)自動(dòng)化學(xué)院 天津 300384)
虛擬儀器技術(shù)開創(chuàng)了測(cè)控領(lǐng)域的新時(shí)代,它是在以計(jì)算機(jī)為核心的平臺(tái)上,利用其強(qiáng)大的資源設(shè)計(jì)開發(fā)具有虛擬面板,測(cè)試任務(wù)由軟件算法實(shí)現(xiàn)的一種計(jì)算機(jī)儀器系統(tǒng)。
LabWindows/CVI是一種基于ANSI C的虛擬儀器開發(fā)環(huán)境,它將C語言的強(qiáng)大功能與靈活的使用方法帶入到測(cè)試、測(cè)量和智能儀器等工程領(lǐng)域[1]。由于LabWindows/CVI擁有功能強(qiáng)大的圖形顯示控件、豐富的信號(hào)分析函數(shù)庫和良好的開發(fā)環(huán)境,因此非常適合開發(fā)信號(hào)分析相關(guān)的應(yīng)用系統(tǒng)。設(shè)計(jì)采用LabWindows/CVI多線程技術(shù),主線程用于顯示面板和響應(yīng)用戶各種初始化操作,其他各線程用于數(shù)據(jù)采集、顯示、濾波、幅頻分析、數(shù)據(jù)管理等模塊的操作。實(shí)驗(yàn)證明系統(tǒng)波形刷新速度快、參數(shù)準(zhǔn)確,滿足了對(duì)實(shí)時(shí)性和準(zhǔn)確性要求。
實(shí)時(shí)頻譜分析儀包括傳感器、信號(hào)調(diào)理、PCI-6221數(shù)據(jù)采集卡及裝有LabWindows/CVI的計(jì)算機(jī)。系統(tǒng)方框圖,如圖1所示。傳感器將測(cè)量對(duì)象的非電信號(hào)轉(zhuǎn)換為電信號(hào),經(jīng)過信號(hào)調(diào)理模塊達(dá)到合適的量程以滿足PCI-6221數(shù)據(jù)采集卡的模擬輸入要求。PCI-6221將輸入的模擬電壓經(jīng)多通道A/D采集轉(zhuǎn)換為離散的數(shù)字信號(hào)進(jìn)入計(jì)算機(jī)開始運(yùn)算處理。PCI-6221擁有16路16位AI通道,最高采樣率250 kS/s,2路16位模擬輸出 (833 kS/s),24路數(shù)字I/O線,32位計(jì)數(shù)器,關(guān)聯(lián) (Correlated)DIO (8條時(shí)鐘線,1 MHz)。它是一款低價(jià)位多功能M系列數(shù)據(jù)采集(DAQ)板卡,經(jīng)優(yōu)化適用于該系統(tǒng)的應(yīng)用。
圖1 系統(tǒng)結(jié)構(gòu)圖
2.1多線程機(jī)制采集任務(wù)的實(shí)現(xiàn)
多線程機(jī)制數(shù)據(jù)采集任務(wù)分為用戶界面控制、通道選擇、數(shù)據(jù)采集和實(shí)時(shí)顯示等。任務(wù)線程由基于LabWindows/CVI異步定時(shí)機(jī)制的多線程技術(shù)來實(shí)現(xiàn),能夠精確控制執(zhí)行次線程回調(diào)函數(shù)的執(zhí)行周期。以下將對(duì)其在LabWindows/CVI 2010版平臺(tái)下的關(guān)鍵代碼進(jìn)行說明。
數(shù)據(jù)采集方案流程圖如圖2所示。
圖2 數(shù)據(jù)采集方案流程圖
程序開始之前首先要聲明全局變量和宏定義。
static int timerid;//異步定時(shí)器句柄
static TaskHandlegTaskHandle=0;//采集任務(wù)句柄
static uInt32gNumChannels;//采集通道數(shù)
float64 *gData=NULL;//開辟數(shù)據(jù)存儲(chǔ)空間
……//其他定義
然后開始執(zhí)行通道設(shè)置程序。
NIDAQmx_NewPhysChanAICtrl(panelHandle,ChannelNum[i],1//獲取通道信息
利用DAQmx提供的驅(qū)動(dòng)庫函數(shù),創(chuàng)建模擬量采集任務(wù)。
DAQmxCreateTask("",&gTaskHandle);
DAQmxCreateAIVoltageChan(gTaskHandle,ChanV-alue[i],"",DAQmx_Val_Cfg_Default,-ampvalue,ampvalu-e,DAQmx_Val_Volts,NULL);
}//輸入設(shè)置
DAQmxCfgSampClkTiming(gTaskHandle,"",rata,DAQmx_Val_Rising,DAQmx_Val_ContSamps,sampsPe-rChan);//采樣率rata=10k Hz
DAQmxGetTaskAttribute(gTaskHandle,DAQmx_T-ask_NumChans,&gNumChannels);//獲取通道數(shù)
DAQmxStartTask(gTaskHandle);//開始采集任務(wù)
DAQmxReadAnalogF64(gTaskHandle,sampsPerCh-an,1.0,DAQmx_Val_GroupByChannel,gData,sampsPerC-han,&numRead,0);//讀取數(shù)據(jù)儲(chǔ)存到數(shù)組gData.
2.2三步法巴特沃斯濾波器的軟件實(shí)現(xiàn)
采用軟件實(shí)現(xiàn)的數(shù)字濾波器主要有兩種,無限沖擊響應(yīng)濾波器(IIR濾波器)和有限沖擊響應(yīng)濾波器(FIR濾波器)。IIR濾波器能更好的保留幅頻特性,而FIR濾波器可以實(shí)現(xiàn)相位的不失真。根據(jù)以上特點(diǎn)比較,設(shè)計(jì)采用屬于IIR濾波器的三步法巴特沃斯濾波器[2]。
在LabWindows/CVI中實(shí)現(xiàn)三步法巴特沃斯濾波器的代碼如下:
IIRFilterPtr filterinformation;//定義濾波器系數(shù)結(jié)構(gòu)體指針
filterinformation =AllocIIRFilterPtr (BANDPASS,order);//定義帶通濾波器結(jié)構(gòu)
然后在界面里通過設(shè)置濾波相關(guān)項(xiàng)目來定義濾波器具體參數(shù),如圖3左半部分中間位置所示。
圖3 實(shí)時(shí)頻譜分析儀界面
lowercutoff用于設(shè)置下限截止頻率,highercutoff用于設(shè)置上限截止頻率。filterinformation用于設(shè)置四種濾波器類型:
filterinformation =AllocIIRFilterPtr (Type,order);
Type里可以選擇:LOWPASS低通濾波、HIGHPASS高通濾波、BANDPASS帶通濾波、 BANDSTOP帶阻濾波。濾波器階數(shù)通過設(shè)置order來獲得:
GetCtrlVal(panelHandle,PANEL_NUMERIC_ORDER,&order);
然后產(chǎn)生巴特沃斯濾波器系數(shù):
Bw_CascadeCoef(wavepoint,lowercutoff,highercutoff,filterinformation);
然后對(duì)采集的gData數(shù)據(jù)進(jìn)行濾波:
IIRCascadeFiltering(gData,wavepoint,filterinformation,gData);
最后釋放濾波器結(jié)構(gòu),任務(wù)結(jié)束:
FreeIIRFilterPtr (filterinformation);
2.3基于離散傅里葉變換的頻譜分析方法
信號(hào)的幅頻分析[3]是用FFT將信號(hào)從時(shí)域波形轉(zhuǎn)化到以頻率f或ω頻域波形為橫坐標(biāo)變量來描述信號(hào)的幅值、相位變化規(guī)律[4-5]。離散傅里葉變換(Discrete Fourier Transform,DFT)計(jì)算公式是
獲得時(shí)域信號(hào)后,在LabWindows/CVI的信號(hào)分析庫中可以用AutoPowerSpectrum函數(shù)獲得信號(hào)的頻譜圖。計(jì)算公式是
頻譜顯示代碼如下:
AutoPowerSpectrum(gData,wavepoint,(1/samprate),magnitude,&freqspace);
DeleteGraphPlot(panelHandle,PANEL_GRAPH,-1,VAL_IMMEDIATE_DRAW);
SetAxisRange(panelHandle,PANEL_GRAPH,VAL_NO_CHANGE,0.0,1.0,VAL_AUTOSCALE,0,5);//設(shè)置圖譜顯示類型
PlotWaveform (panelHandle,PANEL_GRAPH,magnitude,wavepoint/2,VAL_DOUBLE,1.0,0.0,0.0,freqspace,VAL_THIN_LINE,VAL_EMPTY_SQUARE,VAL_SOLID,1,VAL_RED);//顯示圖譜
圖3為頻譜分析儀實(shí)時(shí)工作時(shí)的用戶界面,左側(cè)為參數(shù)設(shè)置,右側(cè)對(duì)應(yīng)實(shí)時(shí)顯示在參數(shù)設(shè)定后的信號(hào)波形。
2.4數(shù)據(jù)儲(chǔ)存與回放
在對(duì)原始信號(hào)進(jìn)行實(shí)時(shí)分析時(shí),為了將來完整、詳盡的分析,需要對(duì)數(shù)據(jù)進(jìn)行儲(chǔ)存與回放,代碼如下。
數(shù)據(jù)存儲(chǔ)程序:
ArrayToFile("data.xls",wavesignal,VAL_DOUBLE,numRead*gNumChannels,gNumChannels,VAL_GROUPS_TOGETHER,VAL_GROUPS_AS_COLUMNS,VAL_SEP_BY_TAB,10,VAL_ASCII,VAL_APPEND);
ProcessSystemEvents();
free (wavesignal);
MessagePopup ("保存"," OK");
數(shù)據(jù)回放:
FileToArray("data.xls",savesignal,VAL_DOUBLE,numRead*gNumChannels,gNumChannels,VAL_GROUPS_TOGETHER,VAL_GROUPS_AS_COLUMNS,VAL_ASCII);
DeleteGraphPlot(panelHandle,PANEL_GRAPH,-1,VAL_IMMEDIATE_DRAW);//刷新
PlotY(panelHandle,PANEL_GRAPH,savesignal,wavepoint,VAL_DOUBLE,VAL_THIN_LINE,VAL_EMPTY_SQUARE,VAL_SOLID,1,VAL_BLUE);//顯示
free (savesignal);//釋放內(nèi)存,任務(wù)結(jié)束
文中在LabWindows/CVI 2010虛擬儀器軟件平臺(tái)下,利用專用信號(hào)分析函數(shù)庫,開發(fā)了一種基于虛擬儀器的實(shí)時(shí)頻譜分析儀。由于涉及硬件底層驅(qū)動(dòng)開發(fā),運(yùn)用基于C語言的LabWindows/CVI要比其他開發(fā)平臺(tái)執(zhí)行效率更高、功能開發(fā)更靈活。該設(shè)計(jì)經(jīng)過實(shí)驗(yàn)驗(yàn)證,數(shù)據(jù)更新速度快,頻譜數(shù)據(jù)顯示穩(wěn)定準(zhǔn)確,在測(cè)控領(lǐng)域具有顯著的實(shí)際意義。
參考文獻(xiàn):
[1]譚秀萍,吳曉輝,范蟠果,等.LabWindows/CVI多線程技術(shù)在電負(fù)載系統(tǒng)中的應(yīng)用.測(cè)控技術(shù),2011(8):79-82.
[2]程乃平,席有猷,趙陽.基于Labwindows/CVI的虛擬頻譜分析儀設(shè)計(jì).電子測(cè)量技術(shù),2009(7):109-111.
[3]邢志彩,王靈莉,王旭柱.基于LabWindows/CVI的傅里葉變換光譜測(cè)量的數(shù)據(jù)采集系統(tǒng).微型機(jī)與應(yīng)用,2011(10):1-4.
[4]馬青亮,周倫彬,李振娜.基于LabWindows/CVI的信號(hào)分析儀的設(shè)計(jì).中國測(cè)試,2009(6):50-53.
[5]胡寧,徐兵.基于LabVIEW的頻譜分析儀的設(shè)計(jì).計(jì)算機(jī)測(cè)量與控制,2013(5):1404-1407.