【正文】
A, GUIHANDLES % Edit the above text to modify the response to help yinpin % Last Modified by GUIDE 07Nov2012 17:08:53 % Begin initialization code DO NOT EDIT gui_Singleton = 1。Value39。Property39。CALLBACK39。 實驗要求:參考以上原理,查閱相關資料,構建交互界面,設計一個音頻頻譜分析儀,實現一下功能:(1) 音頻信號信號輸入,從聲卡輸入、從WAV文件輸入、從標準信號發(fā)生器輸入;(2) 信號波形分析,包括幅值、頻率、周期、相位的估計,以及統(tǒng)計量峰值、均值、均方值和方差的計算;(3) 信號頻譜分析,頻率、周期的估計,圖形顯示幅值譜、相位譜、實頻譜、虛頻譜和功率譜的曲線。這就是模塊化的根據。即橫坐標f ∈[0, Fs/2]模塊劃分模塊化就是把程序劃分成獨立命名且可獨立訪問的模塊,每個模塊完成一個子功能,把這些模塊集成起來構成一個整體,可以完成指定的功能滿足用戶需求。以頻率f為橫坐標,|Y(f)|為縱坐標,可以得到幅值譜;以頻率f為橫坐標,arg Y(f)為縱坐標,可以得到相位譜;以頻率f為橫坐標,Re Y(f)為縱坐標,可以得到實頻譜;以頻率f為橫坐標,Im Y(f)為縱坐標,可以得到虛頻譜。周期T=1/f。由于三角函數計算的重復量相當大,故FFT能極大地提高運算效率。但上式的計算效率很低,因為有大量的指數(等價于三角函數)運算,故實際中多采用快速Fourier變換(FFT)。Y可按下式計算式中,N為樣本容量,Δt = 1/Fs為采樣間隔。(3) 均方值估計(4) 方差估計 頻譜分析原理時域分析只能反映信號的幅值隨時間的變化情況,除單頻率分量的簡單波形外,很難明確提示信號的頻率組成和各頻率分量大小,而頻譜分析能很好的解決此問題。數字信號統(tǒng)計量估計(1) 峰值P的估計在樣本數據x中找出最大值與最小值,其差值為雙峰值,雙峰值的一半即為峰值。頻率、幅值和相位估計的流程如圖所示。(3)相位檢測采用過零法,即通過判斷與同頻零相位信號過零點時刻,計算其時間差,然后換成相應的相位差。頻率即為f = 1/T,由于能夠求得多個T值(ti有多個),故采用它們的平均值作為周期的估計值。信號頻率、幅值和相位估計(1)頻率(周期)檢測對周期信號來說,可以用時域波形分析來確定信號的周期,也就是計算相鄰的兩個信號波峰的時間差、或過零點的時間差。信號處理實驗實驗八:音頻頻譜分析儀設計與實現 實驗名稱:音頻頻譜分析儀設計與實現 實驗原理:MATLAB是一個數據信息和處理功能十分強大的工程實用軟件,其數據采集工具箱為實現數據的輸入和輸出提供了十分方便的函數和命令。本實驗可以用MATLAB進行音頻信號頻譜分析儀的設計與實現。這里采用過零點(ti)的時間差T(周期)。(2)幅值檢測在一個周期內,求出信號最大值ymax與最小值ymin的差的一半,即A = (ymax ymin)/2,同樣,也會求出多個A值,但第1個A值對應的ymax和ymin不是在一個周期內搜索得到的,故以除第1個以外的A值的平均作為幅值的估計值。φ=2π(1ti/T),{x}表示x的小數部分,同樣,以φ的平均值作為相位的估計值。其中tin表示第n個過零點,yi為第i個采樣點的值,Fs為采樣頻率。P=[max(yi)min(yi)](2)均值估計式中,N為樣本容量,下同。(1)DFT與FFT對于給定的時域信號y,可以通過Fourier變換得到頻域信息Y。采樣信號的頻譜是一個連續(xù)的頻譜,不可能計算出所有的點的值,故采用離散Fourier變換(DFT),即式中,Δf = Fs/N。其原理即是將重復的三角函數算計的中間結果保存起來,以減少重復三角函數計算帶來的時間浪費。(2)頻率、周期的估計對于Y(kΔf),如果當kΔf = 時,Y(kΔf)取最大值,則為頻率的估計值,由于采樣間隔的誤差,也存在誤差,其誤差最大為Δf / 2。從原理上可以看出,如果在標準信號中混有噪聲,用上述方法仍能夠精確地估計出原標準信號的頻率和周期,這個將在下一章做出驗證頻譜圖為了直觀地表示信號的頻率特性,工程上常常將Fourier變換的結果用圖形的方式表示,即頻譜圖。根據采樣定理,只有頻率不超過Fs/2的信號才能被正確采集,即Fourier變換的結果中頻率大于Fs/2的部分是不正確的部分,故不在頻譜圖中顯示。根據人類解決一般問題的經驗,如果一個問題由兩個問題組合而成,那么它的復雜程度大于分別考慮每個問題時的復雜程度之和,也就是說把復雜的問題分解成許多容易解決的小問題,原來的問題也就容易解決了。在模塊劃分時應遵循如下規(guī)則:改進軟件結構提高模塊獨立性;模塊規(guī)模應該適中;深度、寬度、扇出和扇入都應適當;模塊的作用域應該在控制域之內;力爭降低模塊接口的復雜程度;設計單入口單出口的模塊;模塊功能應該可以預測。 實驗界面及程序程序: function varargout = yinpin(varargin) % YINPIN Mfile for % YINPIN, by itself, creates a new YINPIN or raises the existing % singleton*. % % H = YINPIN returns the handle to a new YINPIN or the handle to % the existing singleton*. % % YINPIN(39。,hObject,eventData,handles,...) calls the local % function named CALLBACK in with the given input arguments. % % YINPIN(39。,39。,...) creates a new YINPIN or raises the % existing singleton*. Starting from the left, property value pairs are % applied to the GUI before yinpin_OpeningFunction gets called. An % unrecognized property name or invalid value makes property application % stop. All inputs are passed to yinpin_OpeningF via varargin. % % *See GUI Options on GUIDE39。 gui_State = struct(39。, mfilename, ... 39。, gui_Singleton, ... 39。, yinpin_OpeningF, ... 39。, yinpin_OutputF, ... 39。, [] , ... 39。, [])。amp。 end if nargout [varargout{1:nargout}] = gui_mainf(gui_State, varargin{:})。 end function yinpin_OpeningF(hObject, eventdata, handles, varargin) = hObject。 function varargout = yinpin_OutputF(hObject, eventdata, handles) varargout{1} = 。amp。BackgroundColor39。defaultUicontrolBackgroundColor39。BackgroundColor39。white39。 end function caiyangpinlv_CreateF(hObject, eventdata, handles) if ispc amp。 isequal(get(hObject,39。), get(0,39。)) set(hObject,39。,39。)。amp。BackgroundColor39。defaultUicontrolBackgroundColor39。BackgroundColor39。white39。 end function luyin_Callback(hObject, eventdata, handles) set(,39。,1)。value39。 set(,39。,0)。Tag39。recordtime39。 set(h,39。,39。)。Tag39。kaishiluyin39。 set(h,39。,39。)。Tag39。wavname39。 set(h,39。,39。)。Tag39。liulan39。 set(h,39。,39。)。Tag39。inwave39。 set(h,39。,39。)。Tag39。infudu39。 set(h,39。,39。)。Tag39。infre39。 set(h,39。,39。)。Tag39。inphase39。 set(h,39。,39。)。Tag39。mix39。 set(h,39。,39。)。Tag39。shengchengboxing39。 set(h,39。,39。)。value39。 set(,39。,1)。value39。 h=findobj(39。,39。)。enable39。off39。 h=findobj(39。,39。)。enable39。off39。 h=findobj(39。,