周宏強
[摘 要]:本文采用虛擬儀器軟件NI Measurement Studio實現(xiàn)了典型的信號處理系統(tǒng)。該程序在VC++.NET環(huán)境中調(diào)試通過,通過引入Measurement Studio用戶界面控件和分析函數(shù)庫,該設計可以將混有高斯白噪聲的正弦信號通過濾波提取出,并且分別計算得到其頻譜。該方法開發(fā)效率高,試驗結(jié)果準確可靠。
[關(guān)鍵詞]:Measurement StudioVisual C++ 頻譜 濾波
一、引言
本文實現(xiàn)了一個采用虛擬儀器軟件Measurement Studio的信號處理系統(tǒng)。Measurement Studio是美國國家儀器公司(National Instruments)針對測控工程、高級科學分析、數(shù)據(jù)采集(DAQ)等領(lǐng)域而開發(fā)的最優(yōu)化儀器控制助手。Measurement Studio集成到Visual Studio的開發(fā)環(huán)境中,提供包括各種類別和測試、測量與自動化應用的控件,極大地縮短了應用開發(fā)時間。典型的信號處理系統(tǒng)包括信號的濾波,頻譜變換等。本文使用Visual C++與Measurement Studio設計實現(xiàn)了信號的濾波及頻譜變換。
二、構(gòu)建一個Measurement Studio應用程序
以Visual Studio .NET 2003為例,介紹使用Visual C++開發(fā)Measurement Studio程序的方法。在安裝Measurement Studio成功后,打開菜單,選擇新建項目,在彈出的對話框中左側(cè)項目一欄中選擇“Measurement Studio Projects/Visual C++ Projects”,模板一欄中選擇“MFC Application”,填上項目名稱點擊確定按鈕。然后,會彈出Measurement Studio MFC Application向?qū)АH缓?根據(jù)自己的開發(fā)需求進行選擇,以確定應用程序的特性。
在生成的對話框模板上放置四個CWGraph控件,一個CWSlide控件,兩個Button以及四個Static Text控件。其布局如圖1示:
三、信號濾波
在為“產(chǎn)生信號”按鈕添加響應函數(shù),主要功能是產(chǎn)生正弦信號和高斯白噪聲,通過濾波得到原始的正弦信號。源代碼如下:
double NoiseAmp=0.5;//噪聲幅度
double SineAmp=1.0;/正弦信號幅度
double Cycles=5.0;//正弦信號周期
double phase=0.0;//正弦信號相位
CNiReal64Vector vNoise(1000);//噪聲數(shù)據(jù)
CNiReal64Vector vFNoise(1000);//濾波后噪聲數(shù)據(jù)
CNiReal64Vector vData(1000);//原始數(shù)據(jù)
CNiReal64Vector vFilter(1000);//濾波后數(shù)據(jù)
double fs=1000;/1000個采樣點
double FreqLowCut=24;//低通濾波器截止頻率24 Hz
double FreqHighCut=150;//高通濾波器截止頻率150 Hz
CNiMath::WhiteNoiseWave(vNoise, NoiseAmp, -1); //產(chǎn)生高斯白噪聲
//濾除噪聲信號的低頻部分
CNiMath::ButterworthHighPass(vNoise, vFNoise, fs, FreqHighCut);
//產(chǎn)生正弦波
CNiMath::SineWave(vData, phase, SineAmp, (Cycles/vData.GetSize()));
vData=vData+vFNoise; //噪聲加入到正弦波中
//將信號通過低通濾波器
CNiMath::ButterworthLowPass(vData, vFilter, fs, FreqLowCut);
m_Graph1.PlotY(vData); //在”有噪信號”圖表控件上繪制數(shù)據(jù)曲線
m_Graph3.PlotY(vFilter); //在”去噪信號”圖表控件上繪制數(shù)據(jù)曲線
四、計算信號頻譜
信號處理中往往需要計算信號的頻譜,可以通過Measurement Studio提供的庫函數(shù)直接計算信號的雙邊譜,下面的源代碼是以有噪信號為例計算信號的單邊譜:
CNiReal64Vector realData1,imagData1;//數(shù)據(jù)實部、虛部
realData1.SetSize(vData.GetSize());
imagData1.SetSize(vData.GetSize());
realData1=vData;
CNiMath::FFT(realData1,imagData1);//FFT變換
UINT numPts = vData.GetSize()/2;
double scalingFactor = 1.0/fs;
double deltaFreq = fs*scalingFactor;
CNiReal64Vector frequencyData1(numPts);
CNiReal64Vector zaosheng1(numPts);
for(unsigned long i = 0;i< numPts;i++)
{
double a=abs(realData1[i]);
double b=abs(imagData1[i]);
zaosheng1[i]=sqrt((a*a+b*b));
}
for(UINT i=1;i { frequencyData1[i]=zaosheng1[i]*scalingFactor*sqrt(2.0); } frequencyData1[0] = zaosheng1[0]*scalingFactor; m_Graph2.PlotY(frequencyData1,0.0,deltaFreq);//繪制第一幅圖的頻譜 五、結(jié)束語 通過使用Measurement Studio提供的用戶界面控件和分析函數(shù)庫,在Visual C++環(huán)境中實現(xiàn)了典型的信號處理系統(tǒng),降低了開發(fā)此類程序的復雜性,縮短了程序開發(fā)周期。實踐證明,本方法具有準確性高、可靠穩(wěn)定性好等特點。 參考文獻: [1]陳后金.數(shù)字信號處理[M].北京:高等教育出版社,2005. [2]孫沉芳.基于MeasurementStudio的數(shù)字濾波器設計與實現(xiàn)[J].蘭州交通大學學報,2006,(12):33-35. [3]岳瑋.基于MeasurementStudio的數(shù)據(jù)采集系統(tǒng)的設計與實現(xiàn)[J].北京機械工業(yè)學院學報,2006,(9):1-3.