基于MATLAB的聲音信號頻譜分析儀設計_收藏_第1頁
基于MATLAB的聲音信號頻譜分析儀設計_收藏_第2頁
基于MATLAB的聲音信號頻譜分析儀設計_收藏_第3頁
基于MATLAB的聲音信號頻譜分析儀設計_收藏_第4頁
基于MATLAB的聲音信號頻譜分析儀設計_收藏_第5頁
已閱讀5頁,還剩13頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

1、2009級學生信號與系統(tǒng)課程設計信號與系統(tǒng)課程設計報告書課題名稱基于MATLAB的聲音信號頻譜分析儀設計姓 名杜慶玉學 號2009010578院、系、部物理與電子科學系專 業(yè)物理學指導教師王樹斌2012年 9 月 25日 一、設計任務及要求:設計任務:本文將給出基于聲卡與MATLAB的聲音信號頻譜分析儀的設計原理與實現(xiàn)方法。要 求: (1) 音頻信號信號輸入,從聲卡輸入、從WAV文件輸入、從標準信號發(fā)生器輸入;(2) 信號波形分析,包括幅值、頻率、周期、相位的估計,以及統(tǒng)計量峰值、均值、均方值和方差的計算;(3) 信號頻譜分析,頻率、周期的估計,圖形顯示幅值譜、相位譜、實頻譜、虛頻譜和功率譜的

2、曲線。 指導教師簽名: 2012年10月 日 二、指導教師評語:指導教師簽名: 2012 年 月 日 三、成績 指導教師簽名: 2012年 月 日 基于MATLAB的聲音信號頻譜分析儀設計1設計目的(1)了解計算機軟硬件平臺的虛擬儀器可代替?zhèn)鹘y(tǒng)的測量儀器,如示波器、邏輯分析儀、信號發(fā)生器、頻譜分析儀等 REF _Ref180295933 r h * MERGEFORMAT * MERGEFORMAT 2。(2)知道目前已經(jīng)較成熟的頻譜分析軟件,如SpectraLAB、RSAVu、dBFA等。(3)聲卡是多媒體計算機最基本的配置硬件之一,價格便宜,使用方便。(4)熟悉MATLAB,MATLAB是

3、一個數(shù)據(jù)分析和處理功能十分強大的工程實用軟件,他的數(shù)據(jù)采集工具箱為實現(xiàn)數(shù)據(jù)的輸入和輸出提供了十分方便的函數(shù)和命令 REF _Ref180299500 r h * MERGEFORMAT * MERGEFORMAT 3。2設計原理波形分析原理 信號頻率、幅值和相位估計(1)頻率(周期)檢測對周期信號來說,可以用時域波形分析來確定信號的周期,也就是計算相鄰的兩個信號波峰的時間差、或過零點的時間差。這里采用過零點(ti)的時間差T(周期)。頻率即為f = 1/T,由于能夠求得多個T值(ti有多個),故采用它們的平均值作為周期的估計值。(2)幅值檢測在一個周期內(nèi),求出信號最大值ymax與最小值ymin

4、的差的一半,即A = (ymax - ymin)/2,同樣,也會求出多個A值,但第1個A值對應的ymax和ymin不是在一個周期內(nèi)搜索得到的,故以除第1個以外的A值的平均作為幅值的估計值。(3)相位檢測采用過零法,即通過判斷與同頻零相位信號過零點時刻,計算其時間差,然后換成相應的相位差。=2(1-ti/T),x表示x的小數(shù)部分,同樣,以的平均值作為相位的估計值。頻率、幅值和相位估計的流程如圖 1所示。圖 1頻率、幅值和相位估計的流程圖其中tin表示第n個過零點,yi為第i個采樣點的值,F(xiàn)s為采樣頻率。 數(shù)字信號統(tǒng)計量估計(1) 峰值P的估計在樣本數(shù)據(jù)x中找出最大值與最小值,其差值為雙峰值,雙峰

5、值的一半即為峰值。P=0.5max(yi)-min(yi)(2)均值估計式中,N為樣本容量,下同。(3) 均方值估計(4) 方差估計時域分析只能反映信號的幅值隨時間的變化情況,除單頻率分量的簡單波形外,很難明確提示信號的頻率組成和各頻率分量大小,而頻譜分析能很好的解決此問題。由于從頻域能獲得的主要是頻率信息,所以本節(jié)主要介紹頻率(周期)的估計與頻譜圖的生成。 DFT與FFT對于給定的時域信號y,可以通過Fourier變換得到頻域信息Y。Y可按下式計算式中,N為樣本容量,t = 1/Fs為采樣間隔。采樣信號的頻譜是一個連續(xù)的頻譜,不可能計算出所有的點的值,故采用離散Fourier變換(DFT),

6、即式中,f = Fs/N。但上式的計算效率很低,因為有大量的指數(shù)(等價于三角函數(shù))運算,故實際中多采用快速Fourier變換(FFT)。其原理即是將重復的三角函數(shù)算計的中間結果保存起來,以減少重復三角函數(shù)計算帶來的時間浪費。由于三角函數(shù)計算的重復量相當大,故FFT能極大地提高運算效率。 頻率、周期的估計對于Y(kf),如果當kf = 時,Y(kf)取最大值,則為頻率的估計值,由于采樣間隔的誤差,也存在誤差,其誤差最大為f / 2。周期T=1/f。從原理上可以看出,如果在標準信號中混有噪聲,用上述方法仍能夠精確地估計出原標準信號的頻率和周期,這個將在下一章做出驗證 頻譜圖為了直觀地表示信號的頻率

7、特性,工程上常常將Fourier變換的結果用圖形的方式表示,即頻譜圖。以頻率f為橫坐標,|Y(f)|為縱坐標,可以得到幅值譜;以頻率f為橫坐標,arg Y(f)為縱坐標,可以得到相位譜;以頻率f為橫坐標,Re Y(f)為縱坐標,可以得到實頻譜;以頻率f為橫坐標,Im Y(f)為縱坐標,可以得到虛頻譜。根據(jù)采樣定理,只有頻率不超過Fs/2的信號才能被正確采集,即Fourier變換的結果中頻率大于Fs/2的部分是不正確的部分,故不在頻譜圖中顯示。即橫坐標f 0, Fs/22.3. 模塊劃分模塊化就是把程序劃分成獨立命名且可獨立訪問的模塊,每個模塊完成一個子功能,把這些模塊集成起來構成一個整體,可以

8、完成指定的功能滿足用戶需求。根據(jù)人類解決一般問題的經(jīng)驗,如果一個問題由兩個問題組合而成,那么它的復雜程度大于分別考慮每個問題時的復雜程度之和,也就是說把復雜的問題分解成許多容易解決的小問題,原來的問題也就容易解決了。這就是模塊化的根據(jù)。在模塊劃分時應遵循如下規(guī)則 REF _Ref178666412 r h * MERGEFORMAT * MERGEFORMAT 4:改進軟件結構提高模塊獨立性;模塊規(guī)模應該適中;深度、寬度、扇出和扇入都應適當;模塊的作用域應該在控制域之內(nèi);力爭降低模塊接口的復雜程度;設計單入口單出口的模塊;模塊功能應該可以預測。本著上述的啟發(fā)式規(guī)則,對軟件進行如圖 2所示的模塊

9、劃分。圖 2頻譜分析儀的模塊劃分3軟件實現(xiàn)界面設計MATLAB是Mathworks公司推出的數(shù)學軟件,它將數(shù)值分析、矩陣計算、信號處理和圖形顯示結合在一起,為眾多學科領域提供了一種簡潔、高效的編程工具。它提供的GUIDE工具為可視化編程工具,使得軟件的界面設計像VB一樣方便。故本文采用MATLAB作為編程語言實現(xiàn)聲音信號頻譜分析儀,以下所講的都是在環(huán)境中。為了實現(xiàn)預期的功能,設計如圖 3所示的界面。圖 3頻譜分析儀的界面設計最上面的部分為標題區(qū),用于顯示軟件標題等信息,不具人機交互功能。再往下是信號輸入?yún)^(qū),包含3種輸入方式,考慮到WAV文件可能是多聲道,故提供了聲道選擇的界面,因為每次只能對單

10、個聲道進行分析。在信號發(fā)生器中加入了混迭選項,從而可以將產(chǎn)生的信號與原有的信號進行混迭。界面應該具有:只有當每個單選框被選中時才允許使用對應的輸入框、按鈕等;采樣點數(shù)輸入框在聲卡與WAV文件的輸入方式下作為輸出,在信號發(fā)生器的輸入方式下作為輸入。再往下是分析區(qū)。對于WAV文件及錄音的信號,有時只對其中一部分信號進行分析,故提供了分析對象范圍設定的界面。另外就是時域分析與頻域分析的按鈕,該軟件的核心代碼都在這兩個按鈕的回調(diào)函數(shù)中。分析區(qū)下面是分析結果區(qū),用于顯示波形基本參數(shù)與統(tǒng)計量的計算結果。分析結果區(qū)的下面是波形顯示區(qū),用于顯示時域波形,在錄音結束、打開WAV文件成功或者信號發(fā)生器生成波形時會

11、更新顯示。右邊為頻譜圖顯示區(qū),用于顯示各種頻譜的譜線,在點擊頻域分析后會更新顯示。輸入模塊的實現(xiàn)采樣頻率Fs與采樣點數(shù)N是聲音信號輸入時共同需要作用的參數(shù),故將其獨立出來。下面為別介紹三種輸入方式的實現(xiàn)。 聲卡輸入這里聲卡輸入是指由麥克風錄音得到的聲音信號的輸入,MATLAB提供了wavrecord函數(shù),該函數(shù)能夠?qū)崿F(xiàn)讀取麥克風錄音信號。以下是“開始錄音”按鈕的回調(diào)函數(shù)內(nèi)容。%首先獲得設定的Fs值Fs=str2double(get(findobj(Tag,samplerate),String);%根據(jù)設定的錄音時長進行錄音,將其存入中handles.y=wavrecord(str2double

12、(get(handles.recordtime,String)*Fs, Fs,int16);%保存handles結構體,使得在別的函數(shù)中也能使用guidata(hObject,handles);%在波形顯示區(qū)繪出波形plot(handles.time,handles.y);title(WAVE);%將所采到的點的數(shù)量輸出在“采樣點數(shù)”中ysize=size(handles.y)set(handles.samplenum,String,num2str(ysize(1); WAV文件輸入MATLAB提供了wavread函數(shù),該函數(shù)能夠方便的打開并讀取WAV文件中的聲音信息,并且同時讀取所有聲道。下

13、面是“打開文件”按鈕回調(diào)函數(shù)的部分代碼。其它代碼與聲卡輸入的類似。%從WAV文件中讀取的聲音信息并臨時存放到temp變量中temp = wavread(get(findobj(Tag,filename),String); %獲得所選擇的聲道channel=str2double(get(handles.channel,String);%將指定聲道的信息存放到中handles.y=temp(:,channel); 信號發(fā)生器MATLAB有產(chǎn)生標準信號的函數(shù),如sawtooth能夠產(chǎn)生三角波或鉅齒波,首先利用get函數(shù)獲得波形soundtype,頻率frequency,幅值amp和相位phase,然

14、后是以下代碼。switch soundtype case 1%標準正弦波 y=amp*sin(2*pi*x*frequency+phase); case 2%方波 y=amp*sign(sin(2*pi*x*frequency+phase); case 3%三角波 y=amp*sawtooth(2*pi*x*frequency+phase,0.5); case 4%鉅齒波 y=amp*sawtooth(2*pi*x*frequency+phase); case 5%白噪聲 y=amp*(2*rand(size(x)-1); otherwise errordlg(Illegal wave typ

15、e,Choose errer);end handles.y=y;%若沒有勾選上“混迭”,則將生成的波形賦給else%否則將生成的波形與原有波形疊加 handles.y=handles.y+y;end分析模塊由于MATLAB的繪圖功能很強大,所以圖形顯示模塊不用單獨開發(fā),可直接調(diào)用plot、axis等函數(shù)實現(xiàn)圖形顯示功能,故圖形顯示也將在分析模塊中給出。 時域分析節(jié)給出時域分析中的過零檢測算法流程,故這里不給出過零檢測的代碼。MATLAB提供了mean,std函數(shù),能夠方便地計算均值、標準差。下面是過零檢測之后的代碼,其中T為過零檢測得到的周期(向量),amp為過零檢測得到的幅值(向量),n為過

16、零點數(shù)。freq=Fs/mean(T);%計算頻率set(handles.outt,String,1/freq);%輸出周期估計值set(handles.outfreq,String,num2str(freq);%輸出頻繁估計值%計算并輸出幅值,以幅值均值作為其估計set(handles.outamp,String,num2str(mean(amp(2:n-1);%將待分析信號的過零點與標準信號的過零點相比較,從而得出相位phase=2*pi*(1-(ti(1:n-1)-1)./T+floor(ti(1:n-1)-1)./T);set(handles.outphase,String,num2s

17、tr(mean(phase);%最大值與最小值的一半即為峰值set(handles.outpeak,String,(max(handles.y(from:to)-min(handles.y(from:to)/2);%from,to即是界面中的“從第from點到第to點”%計算并輸出均值set(handles.outmean,String,mean(handles.y(from:to);%計算并輸出均方值set(handles.outmeansquare,String,mean(handles.y(from:to).2);%計算半輸出方差set(handles.outs,String,std(h

18、andles.y(from:to)2); 頻域分析頻域分析需要作Fourier變換,MATLAB提供了fft函數(shù),能夠方便地實現(xiàn)快速Fourier變換算法。以下代碼省去了從界面中獲得from、to、Fs的部分,也省去了繪圖后設置橫、縱坐標軸的名稱的部分。%首先提取出待分析的樣本,將其存入sample中sample=handles.y(from:to);%生成離散化的頻率點,以采樣頻率作為離散化的間隔f=linspace(0,Fs/2,(to-from+1)/2);%對樣本作快速Fourier變換,變換結果存入Y中Y=fft(sample,to-from+1);C,I=max(abs(Y);%獲

19、得幅值最大的點及其所對應的下標值I%則f(I)為最大的幅值所對應的頻率,即信號頻率的估計值set(handles.foutt,String,1/f(I);%計算并輸出周期的估計值set(handles.foutfreq,String,f(I);%輸出頻率的估計值Y=Y(1:(to-from+1)/2);%為與f對應,只取Y的前半部分plot(handles.plot1,f,2*sqrt(Y.*conj(Y);%繪制幅值譜曲線plot(handles.plot2,f,angle(Y);%繪制相位譜曲線plot(handles.plot3,f,real(Y);%繪制實頻譜曲線plot(handle

20、s.plot4,f,imag(Y);%繪制虛頻譜曲線plot(handles.plot5,f,abs(Y).2);%繪制功率譜曲4運行實例與誤差分析為了分析軟件的性能并比較時域分析與頻域分析各自的優(yōu)勢,本章給出了兩種分析方法的頻率估計的比較,分析軟件的在時域和頻域的計算精度問題。頻率估計 標準正弦信號的頻率估計用信號發(fā)生器生成標準正弦信號,然后分別進行時域分析與頻域分析,得到的結果如圖 4所示。從圖中可以看出,時域分析的結果為,頻域分析的結果為,而標準信號的頻率為400Hz,從而對于標準信號時域分析的精度遠高于頻域分析的精度。圖 4 標準正弦信號的頻率估計 帶噪聲的正弦信號的頻率估計先成生幅值

21、100的標準正弦信號,再將幅值50的白噪聲信號與其混迭,對最終得到的信號進行時域分析與頻域分析,結果如圖 5所示,可以看出,時域分析的結果為,頻域分析的結果為,而標準信號的頻率為200Hz,從而對于帶噪聲的正弦信號頻域分析的精度遠高于時域分析的精度。圖 5 帶噪聲的正弦信號的頻率估計4.2 結果分析與結論在時域,頻率估計是使用過零檢測的方式計算出,從而對于帶噪聲的信號既容易造成“誤判”,也容易造成“漏判”,且噪聲信號越明顯,“誤判”與“漏判”的可能性越大。但在沒有噪聲或噪聲很小時,時域分析對每個周期長度的檢測是沒有累積誤差的,故隨著樣本容量的增大,估計的精度大大提高。在頻域,頻率估計是通過找出幅值譜峰值點對應的頻率求出。故不會有時域分析的問題。但頻率離散化的誤差及柵欄效應卻是不可避免地帶來誤差,僅頻率離散化的誤差就大于Fs/2。由實驗結果及以上的分析可以得出結論:在作頻率估計時,如果信號的噪聲很

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論