基于MATlab GUI信號與系統(tǒng)-聲音信號頻譜分析_第1頁
基于MATlab GUI信號與系統(tǒng)-聲音信號頻譜分析_第2頁
基于MATlab GUI信號與系統(tǒng)-聲音信號頻譜分析_第3頁
基于MATlab GUI信號與系統(tǒng)-聲音信號頻譜分析_第4頁
基于MATlab GUI信號與系統(tǒng)-聲音信號頻譜分析_第5頁
已閱讀5頁,還剩23頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、目 錄第1章 緒論11.1聲音信號頻譜分析儀概述11.2聲音信號頻譜分析儀功能11.3聲音信號頻譜分析儀的發(fā)展1第2章 MATLAB相關(guān)知識32.1 MATLAB軟件知識32.1.1 MATLAB 語言簡介32.1.2 Matlab的優(yōu)勢和特點(diǎn)32.2 圖形用戶界面(GUI)知識62.2.1 GUI簡介62.2.2 GUI的特點(diǎn)62.2.3 GUI的組成部分7第3章 設(shè)計(jì)原理93.1波形分析原理93.1.1 信號頻率、幅值和相位估計(jì)93.1.2 數(shù)字信號統(tǒng)計(jì)量估計(jì)93.2頻譜分析原理113.2.1 DFT與FFT113.2.2 頻率、周期的估計(jì)123.2.3 頻譜圖123.3. 模塊劃分12第

2、4章 系統(tǒng)程序設(shè)計(jì)144.1界面設(shè)計(jì)144.2輸入模塊的實(shí)現(xiàn)164.3分析模塊19第5章 軟件運(yùn)行及結(jié)果分析22第6章 總結(jié)24參 考 文 獻(xiàn)25致 謝26第1章 緒論1.1聲音信號頻譜分析儀概述信號處理幾乎涉及到所有的工程技術(shù)領(lǐng)域,而頻譜分析又是信號分析儀處理中一個非常重要的分析手段。一般的頻譜分析都依靠傳統(tǒng)頻譜分析儀來完成,價格昂貴,體積龐大,不便于工程技術(shù)人員的攜帶。聲音信號頻譜分析儀改變了原有頻譜分析儀的整體設(shè)計(jì)思路,用軟件代替了硬件,使工程技術(shù)人員可以用一部筆記本電腦到現(xiàn)場就可輕松完成信號的采集、處理及頻譜分析。在工程領(lǐng)域中, MATLAB是一種倍受程序開發(fā)人員青睞的語言,對于一些需

3、要做大量數(shù)據(jù)運(yùn)算處理的復(fù)雜應(yīng)用以及某些復(fù)雜的頻譜分析算法MATLAB顯得游刃有余。本文將重點(diǎn)介紹基于MATLAB的聲音信號頻譜分析儀的設(shè)計(jì)。1.2聲音信號頻譜分析儀功能(1) 音頻信號輸入,輸入的途徑包括從聲卡輸入、從WAV文件輸入、從信號發(fā)生器輸入;(2) 信號波形分析,包括幅值、頻率、周期、相位的估計(jì),并計(jì)算統(tǒng)計(jì)量的峰值、均值、均方值和方差等信息;(3) 信號頻譜分析,頻率、周期的估計(jì),圖形顯示幅值譜、相位譜等信息的曲線。1.3聲音信號頻譜分析儀的發(fā)展基于快速傅里葉變換(FFT)的現(xiàn)代聲音信號頻譜分析儀,通過傅里葉運(yùn)算將聲音信號分解成分立的頻率分量,達(dá)到與傳統(tǒng)

4、頻譜分析儀同樣的結(jié)果,。這種新型的頻譜分析儀采用數(shù)字方法直接由模擬/數(shù)字轉(zhuǎn)換器(ADC)對輸入信號取樣,再經(jīng)FFT處理后獲得頻譜分布圖。在這種頻譜分析儀中,為獲得良好的儀器線性度和高分辨率,對信號進(jìn)行數(shù)據(jù)采集時 ADC的取樣率最少等于輸入信號最高頻率的兩倍,亦即頻率上限是100MHz的實(shí)時頻譜分析儀需要ADC有200MS/S的取樣率。目前半導(dǎo)體工藝水平可制成分辨率8位和取樣率4GS/S的ADC或者分辨率12位和取樣率800MS/S的ADC,亦即,原理上儀器可達(dá)到2GHz的帶寬,為了擴(kuò)展頻率上限,可在ADC前端增加下變頻器,本振采用數(shù)字調(diào)諧振蕩器。這種混合式的頻譜分析儀可擴(kuò)展到幾GHz以下的頻段

5、使用。FFT的性能用取樣點(diǎn)數(shù)和取樣率來表征,例如用100KS/S的取樣率對輸入信號取樣1024點(diǎn),則最高輸入頻率是50KHz和分辨率是50Hz。如果取樣點(diǎn)數(shù)為2048點(diǎn),則分辨率提高到25Hz。由此可知,最高輸人頻率取決于取樣率,分辨率取決于取樣點(diǎn)數(shù)。FFT運(yùn)算時間與取樣,點(diǎn)數(shù)成對數(shù)關(guān)系,頻譜分析儀需要高頻率、高分辨率和高速運(yùn)算時,要選用高速的FFT硬件,或者相應(yīng)的數(shù)字信號處理器(DSP)芯片。例如,10MHz輸入頻率的1024點(diǎn)的運(yùn)算時間80s,而10KHz的1024點(diǎn)的運(yùn)算時間變?yōu)?4ms,1KHz的1024點(diǎn)的運(yùn)算時間增加至640ms。當(dāng)運(yùn)算時間超過200ms時,屏幕的反應(yīng)變慢,不適于眼

6、睛的觀察,補(bǔ)救辦法是減少取樣點(diǎn)數(shù),使運(yùn)算時間降低至200ms以下。第2章 MATLAB相關(guān)知識2.1 MATLAB軟件知識2.1.1 MATLAB 語言簡介 MATLAB是美國Math Works公司推出的用于數(shù)值計(jì)算和信號處理的數(shù)學(xué)計(jì)算軟件包,與其他高級語言相比,不僅語法規(guī)則更為簡單,而且在解決工程問題和科研教學(xué)的輔助方面更加直觀、簡潔和高效。MATLAB的基本數(shù)據(jù)單位是矩陣,它的指令表達(dá)式與數(shù)學(xué),工程中常用的形式十分相似,故用MATLAB來解算問題要比用C語言完相同的事情簡捷得多。目前,MATLAB 已經(jīng)成為國際上最流行的科學(xué)與工程計(jì)算的軟件工具,現(xiàn)在的 MATLAB 已經(jīng)不僅僅是一個“矩

7、陣實(shí)驗(yàn)室”了,它已經(jīng)成為了一種具有廣泛應(yīng)用前景的全新的計(jì)算機(jī)高級編程語言了,有人稱它為“第四代”計(jì)算機(jī)語言,它在國內(nèi)外高校和研究部門正扮演著重要的角色。2.1.2 Matlab的優(yōu)勢和特點(diǎn)Matlab的特點(diǎn):1) 高效的數(shù)值計(jì)算及符號計(jì)算功能,能使用戶從繁雜的數(shù)學(xué)運(yùn)算分析中解脫出來; 2)具有完備的圖形處理功能,實(shí)現(xiàn)計(jì)算結(jié)果和編程的可視化; 3) 友好的用戶界面及接近數(shù)學(xué)表達(dá)式的自然化語言,使學(xué)者易于學(xué)習(xí)和掌握; 4)功能豐富的應(yīng)用工具箱(如信號處理工具箱、通信工具箱等) ,為用戶提供了大量方便實(shí)用的處理工具. Matlab的優(yōu)勢:1)友好的工作平臺和編程環(huán)境MATLAB由一系列工具組成。這些

8、工具方便用戶使用MATLAB的函數(shù)和文件,其中許多工具采用的是圖形用戶界面。包括MATLAB桌面和命令窗口、歷史命令窗口、編輯器和調(diào)試器、路徑搜索和用于用戶瀏覽幫助、工作空間、文件的瀏覽器。隨著MATLAB的商業(yè)化以及軟件本身的不斷升級,MATLAB的用戶界面也越來越精致,更加接近Windows的標(biāo)準(zhǔn)界面,人機(jī)交互性更強(qiáng),操作更簡單。而且新版本的MATLAB提供了完整的聯(lián)機(jī)查詢、幫助系統(tǒng),極大的方便了用戶的使用。簡單的編程環(huán)境提供了比較完備的調(diào)試系統(tǒng),程序不必經(jīng)過編譯就可以直接運(yùn)行,而且能夠及時地報(bào)告出現(xiàn)的錯誤及進(jìn)行出錯原因分析。 2)簡單易用的程序語言Matlab是一個高級的矩陣/陣列語言,

9、它包含控制語句、函數(shù)、數(shù)據(jù)結(jié)構(gòu)、輸入和輸出和面向?qū)ο缶幊烫攸c(diǎn)。用戶可以在命令窗口中將輸入語句與執(zhí)行命令同步,也可以先編寫好一個較大的復(fù)雜的應(yīng)用程序(M文件)后再一起運(yùn)行。新版本的MATLAB語言是基于最為流行的C語言基礎(chǔ)上的,因此語法特征與C語言極為相似,而且更加簡單,更加符合科技人員對數(shù)學(xué)表達(dá)式的書寫格式。使之更利于非計(jì)算機(jī)專業(yè)的科技人員使用。而且這種語言可移植性好、可拓展性極強(qiáng),這也是MATLAB能夠深入到科學(xué)研究及工程計(jì)算各個領(lǐng)域的重要原因。 3)強(qiáng)大的科學(xué)計(jì)算機(jī)數(shù)據(jù)處理能力MATLAB是一個包含大量計(jì)算算法的集合。其擁有600多個工程中要用到的數(shù)學(xué)運(yùn)算函數(shù),可以方便的實(shí)現(xiàn)用戶所需的各種

10、計(jì)算功能。函數(shù)中所使用的算法都是科研和工程計(jì)算中的最新研究成果,而且經(jīng)過了各種優(yōu)化和容錯處理。在通常情況下,可以用它來代替底層編程語言,如C和C+ 。在計(jì)算要求相同的情況下,使用MATLAB的編程工作量會大大減少。MATLAB的這些函數(shù)集包括從最簡單最基本的函數(shù)到諸如矩陣,特征向量、快速傅立葉變換的復(fù)雜函數(shù)。函數(shù)所能解決的問題其大致包括矩陣運(yùn)算和線性方程組的求解、微分方程及偏微分方程的組的求解、符號運(yùn)算、傅立葉變換和數(shù)據(jù)的統(tǒng)計(jì)分析、工程中的優(yōu)化問題、稀疏矩陣運(yùn)算、復(fù)數(shù)的各種運(yùn)算、三角函數(shù)和其他初等數(shù)學(xué)運(yùn)算、多維數(shù)組操作以及建模動態(tài)仿真等。 4)出色的圖形處理功能MATLAB自產(chǎn)生之日起就具有方

11、便的數(shù)據(jù)可視化功能,以將向量和矩陣用圖形表現(xiàn)出來,并且可以對圖形進(jìn)行標(biāo)注和打印。高層次的作圖包括二維和三維的可視化、圖象處理、動畫和表達(dá)式作圖??捎糜诳茖W(xué)計(jì)算和工程繪圖。新版本的MATLAB對整個圖形處理功能作了很大的改進(jìn)和完善,使它不僅在一般數(shù)據(jù)可視化軟件都具有的功能(例如二維曲線和三維曲面的繪制和處理等)方面更加完善,而且對于一些其他軟件所沒有的功能(例如圖形的光照處理、色度處理以及四維數(shù)據(jù)的表現(xiàn)等),MATLAB同樣表現(xiàn)了出色的處理能力。同時對一些特殊的可視化要求,例如圖形對話等,MATLAB也有相應(yīng)的功能函數(shù),保證了用戶不同層次的要求。另外新版本的MATLAB還著重在圖形用戶界面(GU

12、I)的制作上作了很大的改善,對這方面有特殊要求的用戶也可以得到滿足。 5)應(yīng)用廣泛的模塊集合工具箱MATLAB對許多專門的領(lǐng)域都開發(fā)了功能強(qiáng)大的模塊集和工具箱。一般來說,它們都是由特定領(lǐng)域的專家開發(fā)的,用戶可以直接使用工具箱學(xué)習(xí)、應(yīng)用和評估不同的方法而不需要自己編寫代碼。目前,MATLAB已經(jīng)把工具箱延伸到了科學(xué)研究和工程應(yīng)用的諸多領(lǐng)域,諸如數(shù)據(jù)采集、數(shù)據(jù)庫接口、概率統(tǒng)計(jì)、樣條擬合、優(yōu)化算法、偏微分方程求解、神經(jīng)網(wǎng)絡(luò)、小波分析、信號處理、圖像處理、系統(tǒng)辨識、控制系統(tǒng)設(shè)計(jì)、LMI控制、魯棒控制、模型預(yù)測、模糊邏輯、金融分析、地圖工具、非線性控制設(shè)計(jì)、實(shí)時快速原型及半物理仿真、嵌入式系統(tǒng)開發(fā)、定點(diǎn)

13、仿真、DSP與通訊、電力系統(tǒng)仿真等,都在工具箱(Toolbox)家族中有了自己的一席之地。 6)實(shí)用的程序接口和發(fā)布平臺新版本的MATLAB可以利用MATLAB編譯器和C/C+數(shù)學(xué)庫和圖形庫,將自己的MATLAB程序自動轉(zhuǎn)換為獨(dú)立于MATLAB運(yùn)行的C和C+代碼。允許用戶編寫可以和MATLAB進(jìn)行交互的C或C+語言程序。另外,MATLAB網(wǎng)頁服務(wù)程序還容許在Web應(yīng)用中使用自己的MATLAB數(shù)學(xué)和圖形程序。MATLAB的一個重要特色就是具有一套程序擴(kuò)展系統(tǒng)和一組稱之為工具箱的特殊應(yīng)用子程序。工具箱是MATLAB函數(shù)的子程序庫,每一個工具箱都是為某一類學(xué)科專業(yè)和應(yīng)用而定制的,主要包括信號處理、控

14、制系統(tǒng)、神經(jīng)網(wǎng)絡(luò)、模糊邏輯、小波分析和系統(tǒng)仿真等方面的應(yīng)用。 7)應(yīng)用軟件開發(fā)(包括用戶界面)在開發(fā)環(huán)境中,使用戶更方便地控制多個文件和圖形窗口;在編程方面支持了函數(shù)嵌套,有條件中斷等;在圖形化方面,有了更強(qiáng)大的圖形標(biāo)注和處理功能,包括對性對起連接注釋等;在輸入輸出方面,可以直接向Excel和HDF5進(jìn)行連接。專家開發(fā)的,用戶可以直接使用工具箱學(xué)習(xí)、應(yīng)用和評估不同的方法而不需要自己編寫代碼。2.2 圖形用戶界面(GUI)知識2.2.1 GUI簡介圖形用戶界面(Graphical User Interface,簡稱 GUI,又稱圖形用戶接口)是指采用圖形方式顯示的計(jì)算機(jī)操作用戶介面。與早期計(jì)算機(jī)

15、使用的命令行界面相比,圖形界面對于用戶來說在視覺上更易于接受。如Windows是以圖形界面方式操作的,因?yàn)槟憧梢杂檬髽?biāo)來點(diǎn)擊按鈕來進(jìn)行操作,很直觀。而DOS就不具備GUI,所以他只能輸入命令。DOS 的這種界面叫CUI (Command line User Interface ) 命令行模式的人機(jī)接口。通常人機(jī)交互圖形化用戶界面設(shè)計(jì)經(jīng)常讀做“goo-ee”,準(zhǔn)確來說 GUI 就是屏幕產(chǎn)品的視覺體驗(yàn)和互動操作部分。 GUI即人機(jī)交互圖形化用戶界面設(shè)計(jì)??v觀國際相關(guān)產(chǎn)業(yè)在圖形化用戶界面設(shè)計(jì)方面的發(fā)展現(xiàn)狀,許多國際知名公司早已意識到 GUI 在產(chǎn)品方面產(chǎn)生的強(qiáng)大增值功能,以及帶動的巨大市場價值,因此

16、在公司內(nèi)部設(shè)立了相關(guān)部門專門從事 GUI 的研究與設(shè)計(jì),同業(yè)間也成立了若干機(jī)構(gòu),以互相交流 GUI 設(shè)計(jì)理論與經(jīng)驗(yàn)為目的。隨著中國 IT 產(chǎn)業(yè),移動通訊產(chǎn)業(yè),家電產(chǎn)業(yè)的迅猛發(fā)展,在產(chǎn)品的人機(jī)交互界面設(shè)計(jì)水平發(fā)展上日顯滯后,這對于提高產(chǎn)業(yè)綜合素質(zhì),提升與國際同等業(yè)者的競爭能力等等方面無疑起了制約的作用。2.2.2 GUI的特點(diǎn)GUI的廣泛應(yīng)用是當(dāng)今計(jì)算機(jī)發(fā)展的重大成就之一,他極大地方便了非專業(yè)用戶的使用,人們從此不再需要死記硬背大量的命令,取而代之的是可用通過窗口、菜單、按鍵等方式來方便地進(jìn)行操作。而嵌入式GUI具有下面幾個方面的基本要求:輕型、占用資源少、高性能、高可靠性、便于移植、可配置等特

17、點(diǎn)。2.2.3 GUI的組成部分(1)桌面在啟動時顯示,也是界面中最底層,有時也指代包括窗口、文件瀏覽器在內(nèi)的“桌面環(huán)境”。在桌面上由于可以重疊顯示窗口,因此可以實(shí)現(xiàn)多任務(wù)化。一般的界面中,桌面上放有各種應(yīng)用程序和數(shù)據(jù)的圖標(biāo),用戶可以依此開始工作。桌面與既存的文件夾構(gòu)成里面相違背,所以要以特殊位置的文件夾的參照形式來定義內(nèi)容。比如在微軟公司的Windows XP系統(tǒng)中,各種用戶的桌面內(nèi)容實(shí)際保存在系統(tǒng)盤(默認(rèn)為C盤):Documents and Settings用戶名桌面 文件夾里。墻紙,即桌面背景。可以設(shè)置為各種圖片和各種附件,成為視覺美觀的重要因素之一。(2)視窗應(yīng)用程序?yàn)槭褂脭?shù)據(jù)而在圖形

18、用戶界面中設(shè)置的基本單元。應(yīng)用程序和數(shù)據(jù)在窗口內(nèi)實(shí)現(xiàn)一體化。在窗口中,用戶可以在窗口中操作應(yīng)用程序,進(jìn)行數(shù)據(jù)的管理、生成和編輯。通常在窗口四周設(shè)有菜單、圖標(biāo),數(shù)據(jù)放在中央。在窗口中,根據(jù)各種數(shù)據(jù)/應(yīng)用程序的內(nèi)容設(shè)有標(biāo)題欄,一般放在窗口的最上方,并在其中設(shè)有最大化、最小化(隱藏窗口,并非消除數(shù)據(jù))、最前面、縮進(jìn)(僅顯示標(biāo)題欄)等動作按鈕,可以簡單地對窗口進(jìn)行操作。1)單一文件界面(Single Document Interface)在窗口中,一個數(shù)據(jù)在一個窗口內(nèi)完成的方式。在這種情況下,數(shù)據(jù)和顯示窗口的數(shù)量是一樣的。若要在其他應(yīng)用程序的窗口使用數(shù)據(jù),將相應(yīng)生成新的窗口,因此窗口數(shù)量多,管理復(fù)雜。

19、2)多文件界面(Multiple Document Interface)在一個窗口之內(nèi)進(jìn)行多個數(shù)據(jù)管理的方式。這種情況下,窗口的管理簡單化,但是操作變?yōu)殡p重管理。(3)標(biāo)簽多文件界面是數(shù)據(jù)管理方式中使用的一種界面,將數(shù)據(jù)的標(biāo)題在窗口中并排,通過選擇標(biāo)簽標(biāo)題顯示必要的數(shù)據(jù),這樣使得接入數(shù)據(jù)方式變得更為便捷。上述中,多文件界面主要是微軟視窗系統(tǒng)采用。而在其他環(huán)境中,通常多是單文件界面,所以無所謂單一/多文件界面的稱呼問題。(4)菜單將系統(tǒng)可以執(zhí)行的命令以階層的方式顯示出來的一個界面。一般置于畫面的最上方或者最下方,應(yīng)用程序能使用的所有命令幾乎全部都能放入。重要程度一般是從左到右,越往右重要度越低。

20、命定的層次根據(jù)應(yīng)用程序的不同而不同,一般重視文件的操作、編輯功能,因此放在最左邊,然后往右有各種設(shè)置等操作,最右邊往往設(shè)有幫助。一般使用鼠標(biāo)的第一按鈕進(jìn)行操作。與應(yīng)用程序準(zhǔn)備好的層次菜單不同,在菜單欄以外的地方,通過鼠標(biāo)的第二按鈕調(diào)出的菜單稱為“即時菜單”。根據(jù)調(diào)出位置的不同,菜單內(nèi)容即時變化,列出所指示的對象目前可以進(jìn)行的操作。(5)圖標(biāo)顯示在管理數(shù)據(jù)的應(yīng)用程序中的數(shù)據(jù),或者顯示應(yīng)用程序本身。數(shù)據(jù)管理程序,即在文件夾中用戶數(shù)據(jù)的管理、進(jìn)行特定數(shù)據(jù)管理的程序的情況下,數(shù)據(jù)通過圖標(biāo)顯示出來。通常情況下顯示的是數(shù)據(jù)的內(nèi)容或者與數(shù)據(jù)相關(guān)聯(lián)的應(yīng)用程序的圖案。另外,點(diǎn)擊數(shù)據(jù)的圖標(biāo),一般可以舜間完成啟動相

21、關(guān)應(yīng)用程序以后再顯示數(shù)據(jù)本身這兩個步驟的工作。應(yīng)用程序的圖標(biāo)只能用于啟動應(yīng)用程序。(6)按鈕菜單中,利用程度高的命令用圖形表示出來,配置在應(yīng)用程序中,成為按鈕。應(yīng)用程序中的按鈕,通常可以代替菜單。一些使用程度高的命令,不必通過菜單一層層翻動才能調(diào)出,極大提高了工作效率。但是,各種用戶使用的命令頻率是不一樣的,因此這種配置一般都是可以由用戶自定義編輯。(7)實(shí)現(xiàn)方法針對特定的圖形設(shè)備輸出接口,自行開發(fā)相關(guān)的功能函數(shù)。購買針對特定嵌入式系統(tǒng)的圖形中間軟件包。采用源碼開放的嵌入式GUI系統(tǒng)。使用獨(dú)立軟件開發(fā)商提供的嵌入式GUI產(chǎn)品。第3章 設(shè)計(jì)原理3.1波形分析原理3.1.1 信號頻率、幅值和相位估

22、計(jì)(1)頻率(周期)檢測對周期信號來說,可以用時域波形分析來確定信號的周期,也就是計(jì)算相鄰的兩個信號波峰的時間差、或過零點(diǎn)的時間差。這里采用過零點(diǎn)(ti)的時間差T(周期)。頻率即為f = 1/T,由于能夠求得多個T值(ti有多個),故采用它們的平均值作為周期的估計(jì)值。(2)幅值檢測在一個周期內(nèi),求出信號最大值ymax與最小值ymin的差的一半,即A = (ymax - ymin)/2,同樣,也會求出多個A值,但第1個A值對應(yīng)的ymax和ymin不是在一個周期內(nèi)搜索得到的,故以除第1個以外的A值的平均作為幅值的估計(jì)值。(3)相位檢測采用過零法,即通過判斷與同頻零相位信號過零點(diǎn)時刻,計(jì)算其時間差

23、,然后換成相應(yīng)的相位差。=2(1-ti/T),同樣,以的平均值作為相位的估計(jì)值。 針對對信號頻率、幅值和相位檢測的理論分析畫出頻率、幅值和相位估計(jì)的流程圖如圖 1所示。3.1.2 數(shù)字信號統(tǒng)計(jì)量估計(jì)(1) 峰值P的估計(jì) 在樣本數(shù)據(jù)x中找出最大值與最小值,其差值為雙峰值,雙峰值的一半即為峰值。P=0.5max(yi)-min(yi) (式3-1)開始n=1,ymax =ymin=0i=3Yyi=1<0且yi=2<0且yi>=0且yi+1>0NNymax<yiYyi =0?Yymax =yi Ntin=i/FsNYtin =i-yi /(yi -yi-1)/FsAn=

24、(ymax -ymin)/2ymax =ymin=0i>N-1?i+NYT為(ti -ti-1)的平均值,i=1.2,f=1/Tn+ymin =yiA 為Ai的平均值,i=2,3,ymin>yi為2(1-ti /Ti)的平均值結(jié)束Y圖 1頻率,幅值和相位估計(jì)的流程圖其中tin表示第n個過零點(diǎn),yi為第i個采樣點(diǎn)的值,F(xiàn)s為采樣頻率。(2)均值估計(jì) (式3-2)式中,N為樣本容量,下同。(3) 均方值估計(jì) (式3-3)(4) 方差估計(jì) (式3-4)3.2頻譜分析原理時域分析只能反映信號的幅值隨時間的變化情況,除單頻率分量的簡單波形外,很難明確提示信號的頻率組成和各頻率分量大小,而頻譜

25、分析能很好的解決此問題。由于從頻域能獲得的主要是頻率信息,所以本節(jié)主要介紹頻率(周期)的估計(jì)與頻譜圖的生成。3.2.1 DFT與FFT對于給定的時域信號y,可以通過Fourier變換得到頻域信息Y,Y可按式3-5計(jì)算 (式3-5)式中,N為樣本容量,t = 1/Fs為采樣間隔。采樣信號的頻譜是一個連續(xù)的頻譜,不可能計(jì)算出所有的點(diǎn)的值,故采用離散Fourier變換(DFT),即 (式3-6)式中,f = Fs/N。但上式的計(jì)算效率很低,因?yàn)橛写罅康闹笖?shù)(等價于三角函數(shù))運(yùn)算,故實(shí)際中多采用快速Fourier變換(FFT)。其原理即是將重復(fù)的三角函數(shù)算計(jì)的中間結(jié)果保存起來,以減少重復(fù)三角函數(shù)計(jì)算帶

26、來的時間浪費(fèi)。由于三角函數(shù)計(jì)算的重復(fù)量相當(dāng)大,故FFT能極大地提高運(yùn)算效率。3.2.2 頻率、周期的估計(jì)對于Y(kf),如果當(dāng)kf = f時,Y(kf)取最大值,則f為頻率的估計(jì)值,由于采樣間隔的誤差,f也存在誤差,其誤差最大為f / 2,周期T=1/f。 從原理上可以看出,如果在標(biāo)準(zhǔn)信號中混有噪聲,用上述方法仍能夠精確地估計(jì)出原標(biāo)準(zhǔn)信號的頻率和周期。3.2.3 頻譜圖為了直觀地表示信號的頻率特性,工程上常常將Fourier變換的結(jié)果用圖形的方式表示,即頻譜圖。以頻率f為橫坐標(biāo),|Y(f)|為縱坐標(biāo),可以得到幅值譜;以頻率f為橫坐標(biāo),arg Y(f)為縱坐標(biāo),可以得到相位譜;以頻率f

27、為橫坐標(biāo),Re Y(f)為縱坐標(biāo),可以得到實(shí)頻譜;以頻率f為橫坐標(biāo),Im Y(f)為縱坐標(biāo),可以得到虛頻譜。 根據(jù)采樣定理,只有頻率不超過Fs/2的信號才能被正確采集,即Fourier變換的結(jié)果中頻率大于Fs/2的部分是不正確的部分,故不在頻譜圖中顯示。即橫坐標(biāo)f 0, Fs/23.3. 模塊劃分模塊化就是把程序劃分成獨(dú)立命名且可獨(dú)立訪問的模塊,每個模塊完成一個子功能,把這些模塊集成起來構(gòu)成一個整體,可以完成指定的功能滿足用戶需求。根據(jù)人類解決一般問題的經(jīng)驗(yàn),如果一個問題由兩個問題組合而成,那么它的復(fù)雜程度大于分別考慮每個問題時的復(fù)雜程度之和,也就是說把復(fù)雜的問題分解成許多

28、容易解決的小問題,原來的問題也就容易解決了。這就是模塊化的根據(jù)。在模塊劃分時應(yīng)遵循如下規(guī)則:1.改進(jìn)軟件結(jié)構(gòu)提高模塊獨(dú)立性;2.模塊規(guī)模應(yīng)該適中;3.深度、寬度、扇出和扇入都應(yīng)適當(dāng);4.模塊的作用域應(yīng)該在控制域之內(nèi);5.力爭降低模塊接口的復(fù)雜程度;6.設(shè)計(jì)單入口單出口的模塊;7.模塊功能應(yīng)該可以預(yù)測。本著上述的啟發(fā)式規(guī)則,對軟件進(jìn)行如圖 2所示的模塊劃分。頻譜分析儀輸入模塊分析模塊圖形顯示模塊方波鋸齒波三角波正弦波白噪聲基本參數(shù)估計(jì)FFT統(tǒng)計(jì)量計(jì)算頻譜計(jì)算波形顯 示頻譜圖錄音音頻文件信號發(fā)生器頻域分析時域分析基本參數(shù)估計(jì) 圖 2頻譜分析儀的模塊劃分第4章 系統(tǒng)程序設(shè)計(jì)4.1界面設(shè)計(jì) MATLA

29、B是Mathworks公司推出的數(shù)學(xué)軟件,它將數(shù)值分析、矩陣計(jì)算、信號處理和圖形顯示結(jié)合在一起,為眾多學(xué)科領(lǐng)域提供了一種簡潔、高效的編程工具。它提供的GUIDE工具為可視化編程工具,使得軟件的界面設(shè)計(jì)像VB一樣方便。故本文采用MATLAB作為編程語言實(shí)現(xiàn)聲音信號頻譜分析儀,以下所講的都是在MATLAB6.5環(huán)境中。為了實(shí)現(xiàn)預(yù)期的功能,設(shè)計(jì)如圖 3所示的界面。圖 3頻譜分析儀的界面設(shè)計(jì)最上面的部分為標(biāo)題區(qū),用于顯示軟件標(biāo)題等信息,不具人機(jī)交互功能。標(biāo)題區(qū)下面是信號輸入?yún)^(qū),包含3種輸入方式:聲卡輸入,WAV文件輸入,信號發(fā)生器輸入。考慮到WAV文件可能是多聲道,故提供了聲道選擇的界面,因?yàn)槊看沃荒?/p>

30、對單個聲道進(jìn)行分析。在信號發(fā)生器中加入了混迭選項(xiàng),從而可以將產(chǎn)生的信號與原有的信號進(jìn)行混迭。輸入方式界面應(yīng)該具有:只有當(dāng)每個單選框被選中時才允許使用對應(yīng)的輸入框、按鈕等;其中采樣點(diǎn)數(shù)輸入框在聲卡與WAV文件的輸入方式下作為輸出,在信號發(fā)生器的輸入方式下作為輸入。輸入方式單選框程序代碼為:(1)聲卡單選框程序代碼set(findobj('Tag','recordtime'),'enable','on');h=findobj('Tag','filename');set(h,'enable'

31、;,'off');h=findobj('Tag','freq');set(h,'enable','off');h=findobj('Tag','amp');set(h,'enable','off');h=findobj('Tag','phase');set(h,'enable','off');set(handles.channel,'enable','off'

32、;);set(handles.fileopen,'enable','off');set(handles.gensig,'enable','off');set(handles.wavetype,'enable','off');set(handles.add,'enable','off');set(handles.startrecord,'enable','on');(2)WAV文件單選框程序代碼h=findobj('Tag'

33、;,'filename');set(h,'enable','on');h=findobj('Tag','freq');set(h,'enable','off');h=findobj('Tag','amp');set(h,'enable','off');h=findobj('Tag','phase');set(h,'enable','off');set(fin

34、dobj('Tag','recordtime'),'enable','off');set(handles.channel,'enable','on');set(handles.fileopen,'enable','on');set(handles.gensig,'enable','off');set(handles.wavetype,'enable','off');set(handles.add,'

35、;enable','off');set(handles.startrecord,'enable','off');(3)信號發(fā)生器單選框程序代碼h=findobj('Tag','filename');set(h,'enable','off');h=findobj('Tag','freq');set(h,'enable','on');h=findobj('Tag','amp');set

36、(h,'enable','on');h=findobj('Tag','phase');set(h,'enable','on');set(findobj('Tag','recordtime'),'enable','off');set(handles.channel,'enable','off');set(handles.fileopen,'enable','off');set

37、(handles.gensig,'enable','on');set(handles.wavetype,'enable','on');set(handles.add,'enable','on');set(handles.startrecord,'enable','off'); 再往下是分析區(qū),對于WAV文件及錄音的信號,有時只對其中一部分信號進(jìn)行分析,故提供了分析對象范圍設(shè)定的界面。另外就是時域分析與頻域分析的按鈕,該軟件的核心代碼都在這兩個按鈕的回調(diào)函數(shù)中。分析區(qū)下

38、面是分析結(jié)果區(qū),用于顯示波形基本參數(shù)與統(tǒng)計(jì)量的計(jì)算結(jié)果。分析結(jié)果區(qū)的下面是波形顯示區(qū),用于顯示時域波形,在錄音結(jié)束、打開WAV文件成功或者信號發(fā)生器生成波形時會更新顯示。右邊為頻譜圖顯示區(qū),用于顯示各種頻譜的譜線,在點(diǎn)擊頻域分析后會更新顯示。4.2輸入模塊的實(shí)現(xiàn)采樣頻率Fs與采樣點(diǎn)數(shù)N是聲音信號輸入時共同需要作用的參數(shù),故將其獨(dú)立出來。下面分別介紹三種輸入方式的實(shí)現(xiàn)。(1) 聲卡輸入這里聲卡輸入是指由麥克風(fēng)錄音得到的聲音信號的輸入,MATLAB提供了wavrecord函數(shù),該函數(shù)能夠?qū)崿F(xiàn)讀取麥克風(fēng)錄音信號。以下是“開始錄音”按鈕的回調(diào)函數(shù)的程序代碼。Fs=str2double(get(find

39、obj('Tag','samplerate'),'String');handles.y=wavrecord(str2double(get(findobj('Tag','recordtime'),'String')*Fs, Fs,'int16');handles.inputtype=1;guidata(hObject,handles);plot(handles.time,handles.y);title('WAVE');ysize=size(handles.y)set(

40、handles.samplenum,'String',num2str(ysize(1);(2)WAV文件輸入MATLAB提供了wavread函數(shù),該函數(shù)能夠方便的打開并讀取WAV文件中的聲音信息,并且同時讀取所有聲道。以下是“打開文件”按鈕回調(diào)函數(shù)的程序代碼。temp = wavread(get(findobj('Tag','filename'),'String');channel=str2double(get(handles.channel,'String');handles.y=temp(:,channel);

41、handles.inputtype=2;guidata(hObject,handles);plot(handles.time,handles.y);title('WAVE');ysize=size(handles.y)set(handles.samplenum,'String',num2str(ysize(1);(3)信號發(fā)生器MATLAB有產(chǎn)生標(biāo)準(zhǔn)信號的函數(shù),如sawtooth能夠產(chǎn)生三角波或鉅齒波,利用get函數(shù)獲得波形soundtype,頻率frequency,幅值amp和相位phase,以下是“生成波形”按鈕回調(diào)函數(shù)程序代碼。Fs=str2double(

42、get(findobj('Tag','samplerate'),'String');N=str2double(get(findobj('Tag','samplenum'),'String');x=linspace(0,N/Fs,N);soundtype=get(handles.wavetype,'Value');frequency=str2double(get(handles.freq,'String');amp=str2double(get(handles.amp,

43、'String');phase=str2double(get(handles.phase,'String');switch soundtypecase 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)-

44、1); otherwise errordlg('Illegal wave type','Choose errer');endif get(handles.add,'Value')=0.0 handles.y=y;else handles.y=handles.y+y;endhandles.inputtype=3;guidata(hObject,handles);plot(handles.time,handles.y);title('WAVE');axis(0 N -str2double(get(handles.amp,'St

45、ring') str2double(get(handles.amp,'String');4.3分析模塊由于MATLAB的繪圖功能很強(qiáng)大,所以圖形顯示模塊不用單獨(dú)開發(fā),可直接調(diào)用plot、axis等函數(shù)實(shí)現(xiàn)圖形顯示功能,故圖形顯示也將在分析模塊中給出。(1) 時域分析MATLAB提供了mean,std函數(shù),能夠方便地計(jì)算均值、標(biāo)準(zhǔn)差。以下是“時域分析”按鈕回調(diào)函數(shù)程序代碼,其中T為過零檢測得到的周期(向量),amp為過零檢測得到的幅值(向量),n為過零點(diǎn)數(shù)。Fs=str2double(get(findobj('Tag','samplerate

46、9;),'String');N=str2double(get(findobj('Tag','samplenum'),'String');if handles.inputtype=0 msgbox('No wave exist! Please choose a input type!'); return;endn=1;ymax=max(handles.y(1) handles.y(2);ymin=min(handles.y(1) handles.y(2);from=str2double(get(handles.poi

47、ntfrom,'String');to=str2double(get(handles.pointto,'String');if from<1 | to-from<5; msgbox('Error range!'); return;endfor i=from+2:to-1; if handles.y(i-1)<0 & handles.y(i-2)<0 & handles.y(i)>=0 & handles.y(i+1)>0 if handles.y(i)=0 ti(n)=i; else t

48、i(n)=i-handles.y(i)/(handles.y(i)-handles.y(i-1); end amp(n)=(ymax-ymin)/2; ymax=0; ymin=0; n=n+1; else if ymax<handles.y(i) ymax=handles.y(i); end if ymin>handles.y(i) ymin=handles.y(i); end endendn=n-1;for i=1:n-1 T(i)=ti(i+1)-ti(i);endfreq=Fs/mean(T);set(handles.outt,'String',1/freq

49、);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',num2str(mean(phase);set(handles.outpeak,'String',(max(handles.y(from:to)-min(handles.y(

50、from:to)/2);set(handles.outmean,'String',mean(handles.y(from:to);set(handles.outmeansquare,'String',mean(handles.y(from:to).2);set(handles.outs,'String',std(handles.y(from:to)2);(2) 頻域分析頻域分析需要作Fourier變換,MATLAB提供了fft函數(shù),能夠方便地實(shí)現(xiàn)快速Fourier變換算法。以下是“頻域分析”按鈕回調(diào)函數(shù)程序代碼。Fs=str2double(get

51、(findobj('Tag','samplerate'),'String');N=str2double(get(findobj('Tag','samplenum'),'String');if handles.inputtype=0 msgbox('No wave exist! Please choose a input type!'); return;endfrom=str2double(get(handles.pointfrom,'String');to=str2d

52、ouble(get(handles.pointto,'String');sample=handles.y(from:to);f=linspace(0,Fs/2,(to-from+1)/2);Y=fft(sample,to-from+1);C,I=max(abs(Y);set(handles.foutt,'String',1/f(I);set(handles.foutfreq,'String',f(I);Y=Y(1:(to-from+1)/2);plot(handles.plot1,f,2*sqrt(Y.*conj(Y);plot(handles.

53、plot2,f,angle(Y);plot(handles.plot3,f,real(Y);plot(handles.plot4,f,imag(Y);plot(handles.plot5,f,abs(Y).2);xlabel(handles.plot1,'freqency(Hz)');xlabel(handles.plot2,'freqency(Hz)');xlabel(handles.plot3,'freqency(Hz)');xlabel(handles.plot4,'freqency(Hz)');xlabel(handles

54、.plot5,'freqency(Hz)');ylabel(handles.plot1,'amplitude');ylabel(handles.plot2,'phase(rad)');ylabel(handles.plot3,'real');ylabel(handles.plot4,'Imaginary');ylabel(handles.plot5,'power');第5章 軟件運(yùn)行及結(jié)果分析為了分析軟件的性能并比較時域分析與頻域分析各自的優(yōu)勢,本章給出了兩種分析頻率估計(jì)方法的比較,分析軟件的性能在

55、時域和頻域的計(jì)算精度問題。(1)標(biāo)準(zhǔn)正弦信號的頻率估計(jì)用信號發(fā)生器生成標(biāo)準(zhǔn)正弦信號,然后分別進(jìn)行時域分析與頻域分析,得到的結(jié)果如圖 4所示。從圖中可以看出,時域分析的結(jié)果為f = 400.3702Hz,頻域分析的結(jié)果為f = 417.959Hz,而標(biāo)準(zhǔn)信號的頻率為400Hz,從而對于標(biāo)準(zhǔn)信號時域分析的精度遠(yuǎn)高于頻域分析的精度。 圖 4 標(biāo)準(zhǔn)正弦信號的頻率估計(jì)(2) 帶噪聲的正弦信號的頻率估計(jì)先生成幅值100的標(biāo)準(zhǔn)正弦信號,再將幅值50的白噪聲信號與其混迭,對最終得到的信號進(jìn)行時域分析與頻域分析,結(jié)果如圖 5所示,可以看出,時域分析的結(jié)果為f = 168.391Hz,頻域分析的結(jié)果為f = 200.391Hz,而標(biāo)準(zhǔn)信號的頻率為200Hz,從而對于帶噪聲的正弦信號頻域分析的精度遠(yuǎn)高于時域分析的精度。圖 5 帶噪聲的正弦信號的頻率估計(jì) 在時域,頻率估計(jì)是使用過零檢測的方式計(jì)算出,從而對于帶噪聲的信號既容易造成“誤判”,也容易造成“漏判”,且噪聲信號越明顯,“誤判”與“漏判”的可能性越大。但在沒有噪聲

溫馨提示

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

評論

0/150

提交評論