摘要:LabWindows/CVI是測(cè)控領(lǐng)域最為流行的虛擬儀器軟件開(kāi)發(fā)平臺(tái)之一。在概括分析了LabWindows/CVI語(yǔ)言的特點(diǎn)的基礎(chǔ)上,介紹了一種基于CVI的虛擬數(shù)字濾波器的設(shè)計(jì)思路和基本方法,并給出了仿真運(yùn)行結(jié)果,驗(yàn)證了其可行性和有效性。
關(guān)鍵詞:LabWindows/CVI;虛擬儀器;數(shù)字濾波器;巴特沃思濾波器
中圖分類(lèi)號(hào):TN713文獻(xiàn)標(biāo)識(shí)碼:A文章編號(hào):1009-3044(2008)29-0501-02
Design and Realization of Virtual Digital Filter Based LabWindows/CVI
ZHU Xiao-tao1,HONG Hai-li2
(1.Department of Postgraduate Management,The Academy of Equipment Command Technology,Beijing 101416,China;2.Department of Optical and Electronic Equipment,The Academy of Equipment Command Technology,Beijing 101416,China)
Abstract: LabWindows/CVI is the most popular software development platform of virtual instrument in test and control field.With the brief description of the CVI languge's characteristic,a virtual digital filter and its design method based CVI is introduced.In the end,the computer simulation is shown to test the feasibility and effectiveness.
Key words: LabWindows/CVI; virtual instrument; digital filter; Butterworth filter
數(shù)字濾波器是一種重要的數(shù)字信號(hào)處理方法,能夠?qū)崿F(xiàn)對(duì)信號(hào)的濾波、提取、增強(qiáng)有用分量、削弱無(wú)用分量的功能。而LabWindows/CVI中提供了大量的濾波器設(shè)計(jì)函數(shù),適于虛擬數(shù)字濾波器的設(shè)計(jì)與實(shí)現(xiàn)。
1 LabWindows/CVI概述
虛擬儀器編程語(yǔ)言LabWindows/CVI是美國(guó)國(guó)家儀器(National Instruments,NI)公司開(kāi)發(fā)的32位面向計(jì)算機(jī)測(cè)控領(lǐng)域的交互式C語(yǔ)言軟件,它以ANSI C為核心,將功能強(qiáng)大、使用靈活的C語(yǔ)言與數(shù)據(jù)采集、分析和表達(dá)等測(cè)控專業(yè)工具有機(jī)地結(jié)合起來(lái)[1]。LabWindows/CVI具有以下突出特點(diǎn):
1) 集成開(kāi)發(fā)平臺(tái)。CVI將源代碼編輯、ANSI C編譯、鏈接、調(diào)試以及標(biāo)準(zhǔn)ANSI C庫(kù)集成在一個(gè)交互式開(kāi)發(fā)環(huán)境中。有戶可以快速方便地編寫(xiě)、調(diào)試和修改虛擬儀器應(yīng)用程序,形成可執(zhí)行文件。
2) 交互式編程方法。CVI的編程技術(shù)主要采用事件驅(qū)動(dòng)與回調(diào)函數(shù)方式,并對(duì)每一個(gè)函數(shù)提供了一個(gè)函數(shù)面板,用戶可以通過(guò)函數(shù)面板交互式地輸入函數(shù)的每個(gè)參數(shù)。這種交互式編程技術(shù)大大減少了源代碼編程量,降低了程序語(yǔ)法錯(cuò)誤率,提高了工程設(shè)計(jì)的效率和可靠性。
3) 圖形用戶界面(GUI)設(shè)計(jì)。CVI具有人機(jī)交互界面編輯器,使人機(jī)界面的實(shí)現(xiàn)直觀簡(jiǎn)便。
4) 功能強(qiáng)大的函數(shù)庫(kù)。針對(duì)儀器測(cè)控專業(yè)領(lǐng)域來(lái)講,CVI擁有功能強(qiáng)大且更為完善的函數(shù)庫(kù)。用戶可直接調(diào)用的有,基本函數(shù)包括數(shù)字函數(shù)、數(shù)據(jù)運(yùn)算函數(shù)、文件I/O函數(shù)等;高級(jí)數(shù)據(jù)分析庫(kù)函數(shù)包括信號(hào)處理函數(shù)、濾波器設(shè)計(jì)、線性代數(shù)、概率論及數(shù)理統(tǒng)計(jì)、曲線擬合等,涵蓋了幾乎所有儀器設(shè)計(jì)中所用的函數(shù);各種驅(qū)動(dòng)函數(shù)庫(kù),如VXI、GPIB、串口、RS-232、數(shù)據(jù)采集板等硬件控制用子程序,600多個(gè)源碼儀器驅(qū)動(dòng)程序,動(dòng)態(tài)數(shù)據(jù)交換(DEE)協(xié)議和TCP/IP網(wǎng)絡(luò)函數(shù)庫(kù)等[2]。
5) 網(wǎng)絡(luò)功能。CVI具有強(qiáng)大的網(wǎng)絡(luò)功能,支持常用網(wǎng)絡(luò)協(xié)議,方便于網(wǎng)絡(luò)儀器、遠(yuǎn)程測(cè)控儀器的開(kāi)發(fā)。
2 虛擬數(shù)字濾波器的設(shè)計(jì)與實(shí)現(xiàn)
LabWindows/CVI中提供了大量的濾波器設(shè)計(jì)函數(shù),IIR濾波器函數(shù)類(lèi)中包含常用的巴特沃思濾波器、切比雪夫?yàn)V波器等。FIR濾波器函數(shù)類(lèi)主要以窗口法構(gòu)造的FIR濾波器和切比雪夫逼近理論構(gòu)造的FIR濾波器。本文將以巴特沃思濾波器為例,根據(jù)LabWindows/CVI軟件編程的主要步驟,介紹一種開(kāi)發(fā)虛擬數(shù)字濾波器的設(shè)計(jì)思路與基本方法[2]。
2.1 創(chuàng)建用戶界面
首先創(chuàng)建用戶界面文件,并在用戶界面中添加若干控件;其次設(shè)置各個(gè)控件的屬性。如圖1所示。在濾波器設(shè)計(jì)面板中主要包含三類(lèi)顯示控件:
1) Graph控件:創(chuàng)建一個(gè)圖形化顯示一組靜態(tài)數(shù)據(jù)的控件,如控件1(原始信號(hào)):用來(lái)顯示原始正弦信號(hào)的波形,Constant Name為GRAPH,Label為“原始信號(hào)”;
2) Numeric控件:創(chuàng)建一個(gè)數(shù)字滾動(dòng)框的控件,如控件4(增益):用來(lái)設(shè)置增益幅值,Constant Name為AMP,Data Type為double,Label為“增益”,Callback Function為signal1;
3) Ring控件:創(chuàng)建一個(gè)下拉菜單選項(xiàng)循環(huán)的控件,如控件12(濾波步驟):用來(lái)設(shè)置濾波方法步驟,Constant Name為FILTERMETHOD,Label為“濾波步驟”,Callback Function為filter,其中,一步法對(duì)應(yīng)Value為0,二步法對(duì)應(yīng)Value為1,三步法對(duì)應(yīng)Value為2。
2.2 編寫(xiě)程序源代碼文件
創(chuàng)建完成用戶界面文件后,分步生成主函數(shù)框架及回調(diào)函數(shù)源代碼框架,完成主函數(shù)和回調(diào)事件的屬性設(shè)置,下一步就是向源代碼框架中添加回調(diào)函數(shù),即完成程序源代碼的編寫(xiě),這是軟件開(kāi)發(fā)的重點(diǎn)。
1) 仿真信號(hào)的產(chǎn)生(如圖1):
虛擬儀器所處理的信號(hào)大部分來(lái)自數(shù)據(jù)采集卡,當(dāng)無(wú)數(shù)據(jù)采集輸人信號(hào)時(shí),可以應(yīng)用數(shù)學(xué)函數(shù)計(jì)算得出一組仿真信號(hào)。CVI可以直接調(diào)用高級(jí)分析函數(shù)庫(kù)中的信號(hào)產(chǎn)生類(lèi)庫(kù)函數(shù)來(lái)仿真信號(hào),例如SinePattern函數(shù),產(chǎn)生一個(gè)正弦信號(hào)波形數(shù)組。
//以下為獲得信號(hào)的增益、周期、每周期采樣點(diǎn)數(shù)及相位
GetCtrlVal (panelHandle, PANEL_NUMERIC_AMP, amp);
GetCtrlVal (panelHandle, PANEL_NUMERIC_CYCLE, cycle);
GetCtrlVal (panelHandle, PANEL_NUMERIC_SAMPLEPOINT, samplepoint);
GetCtrlVal (panelHandle, PANEL_NUMERIC_PHASE, phase);
//獲得總采樣點(diǎn)數(shù)
wavepoint = samplepoint * cycle;
//為信號(hào)波形數(shù)組動(dòng)態(tài)分配內(nèi)存
sinewave = malloc (wavepoint * sizeof (double));
//產(chǎn)生正弦信號(hào)
SinePattern (wavepoint, amp, phase, cycle, sinewave);
2) 疊加噪聲信號(hào):
在原始信號(hào)的基礎(chǔ)上疊加已知噪聲信號(hào),用以檢驗(yàn)所設(shè)計(jì)濾波器的濾波效果。
//在正弦信號(hào)基礎(chǔ)上疊加均勻白噪聲信號(hào)
noisewave = malloc (wavepoint * sizeof (double));
Uniform (wavepoint, 1, noisewave);
//在正弦信號(hào)基礎(chǔ)上疊加高斯噪聲信號(hào)
noisewave = malloc (wavepoint * sizeof (double));
GaussNoise (wavepoint, 1.0, 1, noisewave);
3) 信號(hào)濾波處理:
LabWindows/CVI中,IIR濾波器的設(shè)計(jì)有三種實(shí)現(xiàn)方式,即單步伐或一步濾波法、二步法或傳統(tǒng)濾波法、三步法或逐步濾波法,三種方式分別調(diào)用不同子函數(shù)以實(shí)現(xiàn)濾波處理[4]。以三步法為例:首先,用函數(shù)AllocIIRFilterPtr()選定濾波器類(lèi)型(低通、高通、帶通、帶阻等)和階次,然后選擇某種濾波器的函數(shù)實(shí)現(xiàn)設(shè)計(jì),如巴特沃思濾波器函數(shù) Bw_CascadeCoef()得到濾波器的系數(shù),最后用IIRCascadeFiltering()實(shí)現(xiàn)對(duì)信號(hào)濾波。
//定義低通濾波器結(jié)構(gòu)
filterinformation = AllocIIRFilterPtr (LOWPASS, order);
//產(chǎn)生巴特沃思濾波器系數(shù)
Bw_CascadeCoef (wavepoint, lowercutoff, highercutoff, filterinfor-mation);
//信號(hào)濾波
IIRCascadeFiltering (noisewave, wavepoint, filterinformation, noisewave);
//釋放濾波器結(jié)構(gòu)
FreeIIRFilterPtr (filterinformation);
2.3 仿真實(shí)現(xiàn)
程序編寫(xiě)完成并調(diào)試成功后,生成可執(zhí)行文件,即可仿真應(yīng)用了,虛擬濾波器仿真運(yùn)行結(jié)果如圖2所示。高頻噪聲信號(hào)分量經(jīng)濾波器低通濾波處理后已基本完全除去,濾波效果比較理想。
3 結(jié)束語(yǔ)
本文介紹了使用LabWindows/CVI設(shè)計(jì)虛擬數(shù)字濾波器的一種思路和方法,并實(shí)現(xiàn)了仿真運(yùn)行,驗(yàn)證了其可行性和有效性??梢钥吹?,利用LabWindows/CVI開(kāi)發(fā)虛擬儀器編程簡(jiǎn)單,效率高,用戶界面友好,相信在虛擬儀器設(shè)計(jì)領(lǐng)域?qū)?huì)得到更為廣泛的應(yīng)用。
參考文獻(xiàn):
[1] 王建新,楊世風(fēng),隋美麗.LabWindows/CVI測(cè)試技術(shù)及工程應(yīng)用[M].北京:化學(xué)工業(yè)出版社,2006:12-76.
[2] 史君成,張淑偉,律淑珍.LabWindows/CVI虛擬儀器設(shè)計(jì)[M].北京:國(guó)防工業(yè)出版社,2007:58-145.
[3] 胡廣書(shū).數(shù)字信號(hào)處理—理論、算法與實(shí)現(xiàn)[M].北京:清華大學(xué)出版社,2003:259-289.
[4] 高鴻斌,王國(guó)勝,薛立新.基于LabWindows/CVI的虛擬數(shù)字濾波器的設(shè)計(jì)[J].航空計(jì)算技術(shù),2006(7).