Design of the Virtual Signal Analyzer on LabWindows/CVI Platform
張 揚(yáng) 肖世德
(西南交通大學(xué)機(jī)械工程學(xué)院,四川 成都 610031)
?
LabWindows/CVI平臺(tái)下虛擬信號(hào)分析儀的設(shè)計(jì)
Design of the Virtual Signal Analyzer on LabWindows/CVI Platform
張揚(yáng)肖世德
(西南交通大學(xué)機(jī)械工程學(xué)院,四川 成都610031)
摘要:針對(duì)目前傳統(tǒng)信號(hào)分析儀功能單一、修改不易、使用不便等缺點(diǎn),以LabWindows/CVI為平臺(tái),研究開發(fā)了一種多功能虛擬信號(hào)分析儀。設(shè)計(jì)時(shí)把人機(jī)交互界面的響應(yīng)處理和信號(hào)采集與顯示分開成兩個(gè)線程運(yùn)行,大大縮短用戶操作的等待時(shí)間,提高了系統(tǒng)運(yùn)行效率。該信號(hào)分析儀具備偽隨機(jī)信號(hào)產(chǎn)生、雙通道信號(hào)采集、時(shí)域分析、頻譜分析、互相關(guān)函數(shù)計(jì)算等功能。實(shí)驗(yàn)測(cè)試表明,該虛擬信號(hào)分析儀基本功能完全實(shí)現(xiàn),信號(hào)分析結(jié)果正確,說明了推廣發(fā)展虛擬儀器的可行性和必要性。
關(guān)鍵詞:虛擬儀器集成電路通信C語言信號(hào)處理時(shí)域頻域測(cè)量?jī)x器濾波干擾傅里葉變換
Abstract:Aiming at the disadvantages of traditional single analyzers, e.g., unitary function, uneasy to revise, and inconvenient to use, with LabWindows/CVI as the platform, the multi-function virtual signal analyzer has been researched and developed. In the design, the response processing of man machine interactive interface and signal acquisition and display are separated into two threads for running, thus the waiting time of user operation is shortened, and the system operating efficiency is enhanced. The signal analyzer offers multiple functions, including random signal generation, dual-channel signal acquisition, time domain analysis, spectral analysis, correlation function calculation, etc. The experimental tests show that the virtual signal analyzer fully realizes the basic functions, the results of signal analysis are correct, thus the feasibility and necessity of developing virtual instruments are illustrated.
Keywords:Virtual instrumentIntegrated circuitCommunicationC languageSignal processingTime domainFrequency domain
Measuring instrumentFilteringInterferenceFourier transform
0引言
虛擬儀器技術(shù)是伴隨著集成電路、計(jì)算機(jī)技術(shù)和通信技術(shù)的迅速發(fā)展而產(chǎn)生的。它通過軟件將儀器與計(jì)算機(jī)有機(jī)地融合為一體,從而把計(jì)算機(jī)強(qiáng)大的數(shù)據(jù)計(jì)算處理能力和儀器硬件的測(cè)量、控制能力結(jié)合在一起,大大減少了儀器硬件成本,并且顯著縮小了儀器體積[1]。與傳統(tǒng)的固定儀器相比,用戶可以根據(jù)需求,靈活地對(duì)虛擬儀器進(jìn)行功能設(shè)計(jì)、維護(hù)和系統(tǒng)升級(jí)。
目前能夠用于虛擬儀器系統(tǒng)開發(fā)且比較成熟的開發(fā)工具可以分為兩類:第一類是通用的可視化編程軟件,主要有Microsoft公司的Visual C++和Visual Basic等;第二類是專用于虛擬儀器開發(fā)的編程軟件,主要有NI公司圖形化的編程環(huán)境LabVIEW和文本語言的編程環(huán)境LabWindows/CVI,以及NI公司和Microsoft合作開發(fā)的Measurement Studio等[2-8]。
多功能虛擬信號(hào)分析儀設(shè)計(jì)所采用的LabWindows/CVI是以ANSIC為核心的交互式C語言開發(fā)平臺(tái),它將功能強(qiáng)大、使用靈活的C語言平臺(tái)與用于數(shù)據(jù)采集分析和顯示的測(cè)控專業(yè)工具有機(jī)地結(jié)合起來。利用集成化開發(fā)環(huán)境、交互式編程方法、函數(shù)面板和豐富的庫函數(shù)大大增強(qiáng)C語言的功能,為C語言的開發(fā)設(shè)計(jì)人員編寫檢測(cè)系統(tǒng)、自動(dòng)測(cè)試環(huán)境、數(shù)據(jù)采集系統(tǒng)、過程監(jiān)控系統(tǒng)等應(yīng)用軟件提供了一個(gè)理想的軟件開發(fā)環(huán)境。
1信號(hào)采集與處理的關(guān)鍵技術(shù)
信號(hào)處理是指對(duì)信號(hào)進(jìn)行某種加工變換或運(yùn)算(如濾波、變換、估計(jì)、識(shí)別等)。廣義的信號(hào)處理可把信號(hào)分析也包括在內(nèi)。信號(hào)處理包括時(shí)域和頻域處理。時(shí)域處理中最典型的是波形分析,例如示波器就是一種最通用的波形分析和測(cè)量?jī)x器。把信號(hào)從時(shí)域變換到頻域進(jìn)行分析和處理,可以獲得更多的信息。
因此頻域處理更為重要。信號(hào)處理主要是濾波,把信號(hào)中感興趣的部分(有效信號(hào))提取出來,抑制(削弱或?yàn)V除)不感興趣的部分(干擾或噪聲)[5-6]。
1.1信號(hào)時(shí)域處理的關(guān)鍵技術(shù)
時(shí)域分析是對(duì)信號(hào)的時(shí)域波形的分析,從記錄的信號(hào)中提取各種有用的信息或?qū)⒂涗浀男盘?hào)轉(zhuǎn)換成所需要的形式。通過不同的時(shí)域處理方法,可以確定實(shí)測(cè)波形的幅值和時(shí)間歷程。通常時(shí)域分析包括信號(hào)參數(shù)測(cè)試(峰值、有效值、均值等)、自相關(guān)、微積分、抽取等分析算法。
1.1.1自相關(guān)分析
在測(cè)試結(jié)果的分析中,相關(guān)是一個(gè)非常重要的概念[3]。相關(guān)是指變量之間的線性關(guān)系。變量x、y之間相關(guān)程度可以用相關(guān)系數(shù)ρxy來表示:
(1)
式中:E為數(shù)學(xué)期望;μx、μy分別為x、y的均值;σx、σy分別為x、y的標(biāo)準(zhǔn)差。
設(shè)x(t)是某各態(tài)歷經(jīng)過程的一個(gè)記錄樣本(所謂各態(tài)歷經(jīng)過程是指樣本的集合平均等于時(shí)間平均),x(t+τ)是x(t)時(shí)移τ后的樣本。x(t)的自相關(guān)函數(shù)定義為:
(2)
設(shè)x(t)、x(t+τ)的相關(guān)系數(shù)為ρx(t)x(t+τ),簡(jiǎn)寫作ρx(τ)。因?yàn)閤(t+τ)、x(t)具有相同的均差和標(biāo)準(zhǔn)差,所以:
(3)
將式(3)的分母移項(xiàng)到等式的左邊,就可以得到:
(4)
在實(shí)際測(cè)量中,只能得到信號(hào)x(t)的N個(gè)采樣值x(n),所以必須通過這N個(gè)點(diǎn)采樣值來估計(jì)信號(hào)的自相關(guān)函數(shù)r(m),計(jì)算:
(5)
由于只有N個(gè)值,因此對(duì)于每一個(gè)固定的延遲,可以利用的數(shù)據(jù)只有N-1-|m|個(gè)。根據(jù)式(5)則可得到實(shí)際計(jì)算中使用的算法為:
(6)
LabWindows/CVI所使用的計(jì)算公式與式(6)略有不同,LabWindows/CVI中自相關(guān)函數(shù)的計(jì)算公式為:
(7)
1.1.2互相關(guān)分析
兩個(gè)隨機(jī)信號(hào)x(t)和y(t)的互相關(guān)函數(shù)Rxy(τ)定義為:
(8)
由于:
(9)
因?yàn)閨ρxy|≤1,故有μxμy-σxσy≤Rxy(τ)≤μxμy+σxσy。對(duì)于多數(shù)隨機(jī)過程,若x(t)和y(t)之間沒有同頻率的周期成分,那么當(dāng)時(shí)移τ很大時(shí)彼此無關(guān),即ρxy(τ→∞)→0,Rxy(τ→∞)→μxμy。
互相關(guān)函數(shù)有重要的應(yīng)用,它是在噪聲背景下提取有用信息的一個(gè)非常有效的手段。設(shè)噪聲信號(hào)的N個(gè)采樣序列為x(n)、y(n),LabWindows/CVI中使用的互相關(guān)函數(shù)算法為:
(10)
1.2信號(hào)頻域處理的關(guān)鍵技術(shù)
1.2.1 快速傅里葉變換(FFT)
對(duì)于離散時(shí)間周期信號(hào),其傅里葉級(jí)數(shù)形式如下:
(11)
(12)
(13)
(14)
式(13)、(14)為離散傅里葉變換對(duì),在時(shí)頻域均為有限長(zhǎng)且都是離散的。
由上述可知,X(k)將是x(n)的傅里葉變換或是對(duì)其傅里葉變換的某種程度上的近似。
分裂基算法是最好的快速傅里葉變換算法,該算法的基本思路是對(duì)偶序號(hào)輸出使用基2算法,對(duì)奇序號(hào)輸出使用基4算法。算法推導(dǎo)如下。
對(duì)于N=2M點(diǎn)DFT,對(duì)k的偶序號(hào)項(xiàng)用頻率抽取(DIF)基2的FFT算法,即:
(15)
對(duì)k的奇序號(hào)項(xiàng)用基4的算法,即:
(16)
(17)
式中:r=0,1,2,…,N/4-1。式(15)、(16)、(17)構(gòu)成了分裂基算法的L型算法結(jié)構(gòu)。
1.2.2自功率譜密度分析
一個(gè)信號(hào)可以從時(shí)域描述,也可以從頻域來描述,這兩種描述是存在一個(gè)對(duì)應(yīng)關(guān)系的。功率譜分析能夠提供信號(hào)的頻域信息,是研究平穩(wěn)隨機(jī)過程的重要方法。對(duì)于遍歷隨機(jī)過程的一個(gè)樣本序列,這個(gè)序列只是無窮多個(gè)可能的隨機(jī)序列中的一個(gè),因此這個(gè)序列實(shí)際上不能真正代表整個(gè)隨機(jī)過程。但是不管選取哪個(gè)序列,通過該序列計(jì)算得到的自相關(guān)函數(shù)總是相同的,即由某一個(gè)序列計(jì)算得到的自相關(guān)函數(shù)能夠作為對(duì)過程本質(zhì)的描述。因此,可從自相關(guān)函數(shù)出發(fā)考慮信號(hào)的功率譜問題。
信號(hào)x(t)的自功率譜密度定義為其自相關(guān)函數(shù)的傅里葉變換。設(shè)x(t)的自相關(guān)函數(shù)為Rx(τ),則x(t)的自功率譜密度為:
(18)
同時(shí)有:
(19)
自功率譜密度簡(jiǎn)稱自功率譜或自譜。
若τ=0,根據(jù)式(2)自相關(guān)函數(shù)Rx(τ)和式(18)自功率譜Px(f)的定義,可以得到:
(20)
(21)
Px(f)表示了信號(hào)的功率沿頻率軸的分布,故稱Px(f)為自功率譜密度函數(shù)。
經(jīng)典譜估計(jì)的基本方法:在實(shí)際應(yīng)用中,由于只能獲得測(cè)量信號(hào)的有限長(zhǎng)觀察序列,因此只能用所得的有限長(zhǎng)序列來估計(jì)信號(hào)的功率譜,這就產(chǎn)生了譜估計(jì)。經(jīng)典譜估計(jì)的方法有直接法和間接法兩種。直接法又稱周期圖法。設(shè)x(n)為時(shí)域信號(hào)的N點(diǎn)采樣序列,x(k)是采樣序列的傅里葉變換,則用周期圖法估計(jì)的信號(hào)功率譜為:
(22)
(23)
1.2.3互功率譜密度分析
互功率譜密度分析類似于自功率譜密度,如果信號(hào)x(t)和y(t)的互相關(guān)函數(shù)Rxy(τ)滿足傅里葉變換的條件:
(24)
則信號(hào)x(t)和y(t)的互功率譜密度函數(shù)定義為:
(25)
對(duì)于一個(gè)單輸入單輸出的線性系統(tǒng),設(shè)系統(tǒng)的頻率響應(yīng)為H(f),若其輸入為x(t),輸出為y(t),則有:
Pxy(f)=H(f)Px(f)
(26)
故由輸入信號(hào)的自功率譜和輸入輸出的互功率譜就可以直接得到系統(tǒng)的頻率響應(yīng)函數(shù)。所得到的H(f)不僅含有幅頻特性,而且含有相頻特性。
對(duì)于N點(diǎn)離散序列x(n)、y(n),設(shè)其傅里葉變換為X(k)、Y(k),LabWindows/CVI使用的互譜計(jì)算公式為:
(27)
2虛擬信號(hào)分析儀的設(shè)計(jì)
本文設(shè)計(jì)的雙通道多功能虛擬信號(hào)分析儀共由兩大部分組成:硬件部分和軟件部分。
2.1硬件部分
系統(tǒng)硬件采用某公司的STM32F4開發(fā)板。使用STM32F407ZGT6內(nèi)部ADC對(duì)信號(hào)進(jìn)行采樣。由于外部輸入信號(hào)可能有負(fù)壓部分,因此需要對(duì)信號(hào)進(jìn)行平移。輸入級(jí)采用1 MΩ下拉電阻接同相放大器的結(jié)構(gòu)(下拉電阻在原理圖上未畫出),使輸入阻抗約為1 MΩ。經(jīng)過緩沖結(jié)構(gòu)后,將信號(hào)與參考源產(chǎn)生的1.5 V直流電壓相加,結(jié)構(gòu)采用同相加法器,如圖1所示。
圖1 輸入緩沖和信號(hào)平移電路圖
為了在緩沖級(jí)能夠處理直流信號(hào)和負(fù)壓信號(hào),運(yùn)放部分需要采用雙電源供電,而開發(fā)板提供的電壓只有+5 V和+3.3 V兩種。由于這里需要的電流較小、噪聲小,所以采用反向電荷泵來產(chǎn)生-3.3 V的電壓,采用的芯片為TPS60400,僅需3個(gè)外部1 F電容即可以產(chǎn)生-3.3 V,使得整體電路簡(jiǎn)單方便。具體電路如圖2所示。
圖2 電荷泵電路圖
參考源采用TL431產(chǎn)生2.495 V的電壓,通過兩個(gè)電阻分壓產(chǎn)生1.5 V的參考電壓,經(jīng)過運(yùn)放緩沖給加法器提供參考。具體電路如圖3所示。
圖3 參考源電路圖
2.2 軟件部分
軟件部分按功能劃分為上位機(jī)和下位機(jī)。上位機(jī)負(fù)責(zé)數(shù)據(jù)處理與人機(jī)交互,下位機(jī)負(fù)責(zé)信號(hào)采樣。上位機(jī)和下位機(jī)之間采用開發(fā)板自帶的USB串口通信。
2.2.1上位機(jī)部分
上位機(jī)共有兩個(gè)線程。第一線程利用中斷的方法,主要對(duì)面板的按鍵和文本輸入框等控件進(jìn)行響應(yīng),以獲取用戶的設(shè)置信息。第二線程的軟件流程圖如圖4所示,主要負(fù)責(zé)數(shù)據(jù)的采集和信號(hào)的顯示[7,9]。
圖4 第二線程流程圖
2.2.2串口通信
波特率設(shè)置為115 200 bit/s,信號(hào)位8位,1位終止位,無校驗(yàn)。上位機(jī)的串口設(shè)置為1~15,檢測(cè)不到串口時(shí)會(huì)有提示,此時(shí)檢查連線,若連線正常,打開控制面板→設(shè)備管理器,查看開發(fā)板的端口號(hào)是否在1~15內(nèi),若不在,修改端口號(hào)。
2.2.3下位機(jī)部分
(1)下位機(jī)的主函數(shù)流程圖如圖5所示,主函數(shù)主要執(zhí)行兩個(gè)任務(wù),一是各模塊的初始化(系統(tǒng)時(shí)鐘、ADC、定時(shí)器、串口),二是循環(huán)檢測(cè)串口是否接收到數(shù)據(jù)。為了防止誤收數(shù)據(jù),設(shè)定采樣率必須以“SR”(SampleRate)開頭,后跟兩個(gè)8位數(shù)據(jù)有效,并且為了防止設(shè)置的采樣率過高,與0x1fff按位與,使設(shè)定的采樣率不大于4 096個(gè)/s。
圖5 主函數(shù)流程圖
(2)ADC采用PB0(ADC1通道8)PC4(ADC1通道14),具體設(shè)定如下。
//先初始化PB0(ADC1通道8)
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
//PB0 通道8
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AN;
//模擬輸入
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
//不帶上下拉
GPIO_Init(GPIOB, &GPIO_InitStructure);
//初始化
//再初始化PC4(ADC1通道14)
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4;
//PC4 通道14
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AN;
//模擬輸入
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
//不帶上下拉
GPIO_Init(GPIOC, &GPIO_InitStructure);
//初始化
(3)串口的端口配置和初始化設(shè)置如下。
//USART1端口配置
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9 | GPIO_Pin_10;
//GPIOA9與GPIOA10
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
//復(fù)用功能
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
//速度50 MHz
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
//推挽復(fù)用輸出
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
//上拉
GPIO_Init(GPIOA,&GPIO_InitStructure);
//初始化PA9,PA10
//USART1初始化設(shè)置
USART_InitStructure.USART_BaudRate = bound;
//波特率設(shè)置
USART_InitStructure.USART_WordLength = USART_WordLength_8b;
//字長(zhǎng)為8位數(shù)據(jù)格式
USART_InitStructure.USART_StopBits = USART_StopBits_1;
//一個(gè)停止位
USART_InitStructure.USART_Parity = USART_Parity_No;
//無奇偶校驗(yàn)位
USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
//無硬件數(shù)據(jù)流控制
USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
//收發(fā)模式
USART_Init(USART1, &USART_InitStructure);
//初始化串口1
(4)系統(tǒng)時(shí)鐘采用168 MHz即可滿足要求,定時(shí)器的設(shè)定時(shí)間公式為:
Tout=[(arr+1)×(psc+1)]/Tclk
式中:Tclk為TIM3的輸入時(shí)鐘頻率,MHz;Tout為TIM3溢出時(shí)間,μs。
為了使采樣率從1~4 096之間步進(jìn)1時(shí),有采樣間隔時(shí)間的改變,設(shè)置分頻系數(shù)(psc)為839,這樣采樣率與定時(shí)器計(jì)數(shù)個(gè)數(shù)(arr)之間的關(guān)系為arr=100 000/SR-1。因此需要改變采樣率時(shí),只需要根據(jù)公式計(jì)算出arr的值并修改定時(shí)器中斷時(shí)間即可。這里為了分辨X通道和Y通道的數(shù)據(jù),在兩組數(shù)據(jù)發(fā)送前,發(fā)送“X”和“Y”以作區(qū)分。ADC采樣為12位數(shù)據(jù),因此傳遞數(shù)據(jù)時(shí)需要先發(fā)高8位再發(fā)低8位。定時(shí)器中斷流程圖如圖6所示。
圖6 定時(shí)器中斷流程圖
3系統(tǒng)功能測(cè)試
將溫度傳感器LM35輸出端接入X通道,此時(shí)信號(hào)分析儀經(jīng)測(cè)試得到該信號(hào)平均值為0.252 V,有效值也為0.252 V,萬用表測(cè)得傳感器LM35輸出電壓為219 mV。
將兩個(gè)溫度傳感器LM35輸出端分別接入X和Y通道,信號(hào)分析儀經(jīng)測(cè)試得到X通道信號(hào)平均值為0.249 V,有效值為0.250 V,萬用表測(cè)得連接X通道的傳感器LM35輸出電壓為221 mV;Y通道信號(hào)平均值為0.232 V,有效值為0.233 V,萬用表測(cè)得連接Y通道的傳感器LM35輸出電壓為228 mV。
使用函數(shù)發(fā)生器產(chǎn)生一個(gè)該信號(hào)分析儀量程內(nèi)的正弦波,分別連接到示波器和本信號(hào)分析儀輸入端,兩者顯示效果相近,測(cè)試結(jié)果符合預(yù)期要求。
4結(jié)束語
傳統(tǒng)儀器功能相對(duì)單一,并且不容易進(jìn)行擴(kuò)展。為順應(yīng)儀器發(fā)展的趨勢(shì),需要進(jìn)行虛擬儀器的研究設(shè)計(jì)。在LabWindows/CVI環(huán)境下,通過硬件電路設(shè)計(jì)及上位機(jī)和下位機(jī)軟件的編寫,開發(fā)完成了虛擬信號(hào)分析儀,尤其是采用多線程數(shù)據(jù)采集技術(shù),在響應(yīng)用戶操作方面取得了比較明顯的效果。通過測(cè)試,該儀器能夠完成數(shù)據(jù)采集、實(shí)現(xiàn)信號(hào)時(shí)域波形顯示、相關(guān)性計(jì)算以及統(tǒng)計(jì)信息實(shí)時(shí)顯示線性振幅譜等功能,結(jié)果正確可靠,表明了推廣發(fā)展虛擬儀器的可行之性。
參考文獻(xiàn)
[1] 馬青亮,周倫彬,李振娜. 基于LabWindows/CVI的信號(hào)分析儀的設(shè)計(jì)[J]. 中國測(cè)試, 2009,35(6):50-53.
[2] 馬青亮. 基于LabWindows/CVI的信號(hào)分析儀的研究[D]. 廣州:廣東工業(yè)大學(xué),2008.
[3] 周林,栗秋華,張鳳.基于虛擬儀器的信號(hào)頻域分析與處理系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[J].現(xiàn)代科學(xué)儀器,2006(6):44-47.
[4] 周浩敏. 信號(hào)處理技術(shù)基礎(chǔ)[M]. 北京:北京航空航天大學(xué)出版社,2004:35-37.
[5] 詹惠琴,古軍,袁亮. 虛擬儀器設(shè)計(jì)[M]. 北京:高等教育出版社,2008:163-167.
[6] 奧本海姆. 信號(hào)與系統(tǒng)[M].西安:西安交通大學(xué)出版社,1997:371-374.
[7] 陳莉,林圳杰.基于LabWindows/CVL多線程研究與工程應(yīng)用[J].工業(yè)控制技術(shù),2006(10):92-94.
[8] 崔紅梅,麻碩士,裴喜春,等.基于LabWindows/CVI平臺(tái)的虛擬數(shù)字信號(hào)分析儀的研究與開發(fā)[J].計(jì)量技術(shù),2005(11): 24-26.
[9] 李改利,王紅軍,趙建輝. LabWindows/CVI平臺(tái)下數(shù)據(jù)共享技術(shù)研究[J]. 機(jī)械工業(yè)學(xué)院學(xué)報(bào), 2007(3):20-22.
中圖分類號(hào):TH7;TP311
文獻(xiàn)標(biāo)志碼:A
DOI:10.16086/j.cnki.issn1000-0380.201602023
修改稿收到日期:2015-05-18。
第一作者張揚(yáng)(1987-),男,現(xiàn)為西南交通大學(xué)機(jī)械工程專業(yè)在讀碩士研究生;主要從事信號(hào)分析與虛擬儀器的研究。