【正文】
arargout{1:nargout}] = gui_mainf(gui_State, varargin{:})。amp。, [])。, [] , ... 39。, gaoli208_OutputF, ... 39。, gaoli208_OpeningF, ... 39。, gui_Singleton, ... 39。, mfilename, ... 39。gui_State = struct(39。,...) creates a new GAOLI208 or raises the% existing singleton*. Starting from the left, property value pairs are% applied to the GUI before gaoli208_OpeningFunction gets called. An% unrecognized property name or invalid value makes property application% stop. All inputs are passed to gaoli208_OpeningF via varargin.%% *See GUI Options on GUIDE39。,39。,hObject,eventData,handles,...) calls the local% function named CALLBACK in with the given input arguments.%% GAOLI208(39。附錄Ⅱfunction varargout = gaoli208(varargin)% GAOLI208 Mfile for % GAOLI208, by itself, creates a new GAOLI208 or raises the existing% singleton*.%% H = GAOLI208 returns the handle to a new GAOLI208 or the handle to% the existing singleton*.%% GAOLI208(39。K39。編寫(xiě)的FFT程序?qū)崿F(xiàn)的的x1的頻譜39。plot(abs(y))。)。ylabel(39。K39。Matlab自帶的FFT函數(shù)實(shí)現(xiàn)的x1的頻譜39。figure(3)subplot(2,1,1)。幅度39。)。)xlabel(39。title(39。 % 蝶形運(yùn)算 end end end %y figure(2)[x1,w1]=freqz(x1,1)。 % 蝶形運(yùn)算的乘積項(xiàng) y(kp)=y(k)t。 for k=J+1:2^L:N % 本次蝶形運(yùn)算的跨越間隔為2^L kp=k+B。%第L級(jí)中,每個(gè)蝶形的兩個(gè)輸入數(shù)據(jù)相距B個(gè)點(diǎn),每級(jí)有B個(gè)不同的旋轉(zhuǎn)因子 for J=0:B1 % J代表了不同的旋轉(zhuǎn)因子 p=J*2^(ML)。 % 將x倒序排列作為y的初始值 WN=exp(i*2*pi/N)。end %x1。K=K/2。 while J=K。 x1(J+1)=T。%條件判斷及數(shù)據(jù)交換 T=x1(I+1)。%給倒序數(shù)賦初值for I=0:N1。if length(x1)N x1=[x1,zeros(1,Nlength(x1))]。M=nextpow2(x1)。幅值39。)。)xlabel(39。figure(1)plot(x1) %做原始語(yǔ)音信號(hào)的時(shí)域圖形title(39。x1=x39。%當(dāng)語(yǔ)音信號(hào)文件較大時(shí)用這兩條%x1=reshape(x,1,2*n)。 %讀取語(yǔ)音信號(hào)的數(shù)據(jù)sound(x,fs,nb)。)。,39。fn=input(39。輸入所需變換的終點(diǎn)N2=39。)。 %語(yǔ)音信號(hào)采樣頻率為fsN1=input(39。輸入采樣頻率fs=39。在這里特別感謝董老師和李老師,他們給了我們很大的發(fā)揮空間,讓我們真正自己動(dòng)手真正掌握了知識(shí),感謝他們細(xì)心指導(dǎo)。學(xué)習(xí)就是一個(gè)了解,疑惑,進(jìn)而解惑的過(guò)程,這次實(shí)習(xí)就是提供了這樣一個(gè)發(fā)現(xiàn)自己知識(shí)漏洞,與同學(xué)老師探討進(jìn)行解惑的的機(jī)會(huì)。程序運(yùn)行調(diào)試初期,曾經(jīng)多次出現(xiàn)錯(cuò)誤、不能產(chǎn)生圖形等問(wèn)題,但在我翻閱資料認(rèn)真改正及老師同學(xué)的幫助下基本功能還是完成了,經(jīng)過(guò)1個(gè)星期的上機(jī)實(shí)習(xí),程序已得到一些完善,能完成基本的要求的功能。在學(xué)習(xí)的過(guò)程中和同學(xué)討論,更明白了理論知識(shí)與實(shí)踐的聯(lián)系。同時(shí)我相信,進(jìn)一步加強(qiáng)對(duì)MATLAB的學(xué)習(xí)與研究對(duì)我今后的學(xué)習(xí)將會(huì)起到很大的幫助。讓我感受到只有在了解課本知識(shí)的前提下,才能更好的應(yīng)用這個(gè)工具,并且熟練的應(yīng)用Matlab也可以很好的加深我對(duì)課程的理解,方便我的思維。程序運(yùn)行調(diào)試時(shí),自己選擇輸入要采樣的語(yǔ)音信號(hào),采樣頻率以及要變換的范圍,可以實(shí)現(xiàn)對(duì)不同信號(hào)的信號(hào)采樣和進(jìn)行不同點(diǎn)的FFT運(yùn)算。圖11 運(yùn)行結(jié)果5 心得體會(huì)本次實(shí)習(xí)的主要內(nèi)容是通過(guò)用Matlab實(shí)現(xiàn)FFT的設(shè)計(jì),可以實(shí)現(xiàn)對(duì)一段自己錄制的語(yǔ)音信號(hào)進(jìn)行分析,并畫(huà)出采樣信號(hào)的時(shí)域與頻域圖。運(yùn)行結(jié)果如圖11所示。系統(tǒng)人機(jī)對(duì)話界面如圖10所示。第四步,運(yùn)行GUI??丶O(shè)置完成后保存,然后運(yùn)行GUI(操作為ctrl+T),就會(huì)進(jìn)入editor窗口,加入各個(gè)控件功能的函數(shù)代碼。第三步,編寫(xiě)回調(diào)函數(shù)。四個(gè)軸對(duì)象(axes)用來(lái)顯示信號(hào)時(shí)域波形,頻譜圖,和兩種不同F(xiàn)FT實(shí)現(xiàn)的頻譜圖。三個(gè)靜態(tài)文本(static text)用來(lái)提示我們需要人為輸入的內(nèi)容。以本設(shè)計(jì)要求為例介紹。GUI是包含圖形對(duì)象,如窗口、圖標(biāo)、菜單和文本等圖文并茂的用戶(hù)界面。需要注意的是自由輸入的語(yǔ)音信號(hào)不同,其長(zhǎng)度也不同,所以根據(jù)要輸入的語(yǔ)音信號(hào)輸入N1,N2的值。由用 MATLAB自帶FFT函數(shù)實(shí)現(xiàn)的頻譜圖與用MATLAB編寫(xiě)的FFT程序?qū)崿F(xiàn)的頻譜圖相比較,可知,兩個(gè)算法計(jì)算后的結(jié)果幾乎相同,驗(yàn)證了自編算法的正確性。圖5 程序運(yùn)行開(kāi)始的輸入窗口將fs=1024,N1=1000,N2=,如圖6所示,其頻率響應(yīng)特性如圖7所示,Matlab自帶的FFT函數(shù)實(shí)現(xiàn)的x1的頻譜與編寫(xiě)的FFT程序?qū)崿F(xiàn)的x1的頻譜的比較如圖8所示。,要求輸入采樣頻率fs(fs=1024),所需要變換的起點(diǎn)N1(N1=1000)和終點(diǎn)N2(N2=5095)以及要采樣的語(yǔ)音文件();其中N1和N2的差值必須在語(yǔ)音信號(hào)長(zhǎng)度范圍內(nèi),但不能太小,否則聽(tīng)不到較為清晰的語(yǔ)音。例如,N=8時(shí),序列倒序結(jié)果如表1所示。另外,為了避免再次調(diào)換前面已經(jīng)調(diào)換過(guò)的一對(duì)數(shù)據(jù),只對(duì)IJ的情況進(jìn)行數(shù)據(jù)交換即可實(shí)現(xiàn)數(shù)據(jù)倒序操作。利用這一算法可按順序數(shù)I的遞增順序,依次求得與之對(duì)應(yīng)的倒序數(shù)J。但次高位加1時(shí),同樣要判斷0、1值,如果是0 ,則直接加1,否則要先將次高位變0,再判斷下一位。JB是IB的位倒置結(jié)果,十進(jìn)制順序數(shù)I增加1,相當(dāng)于IB最低位加1且逢2向高位進(jìn)1,即相當(dāng)于JB最高位加1且逢2向低位進(jìn)1。將十進(jìn)制順序數(shù)用I表示,與之對(duì)應(yīng)的二進(jìn)制數(shù)用IB表示。如果總點(diǎn)數(shù)為的x(n)的順序數(shù)是用M位二進(jìn)制數(shù)表示,則倒序數(shù)只需將順序數(shù)的二進(jìn)制位倒置即可,按照這一規(guī)律用硬件電路和匯編語(yǔ)言很容易產(chǎn)生倒序數(shù)。整個(gè)蝶形運(yùn)算流程圖如圖3所示??紤]到蝶形運(yùn)算有兩個(gè)輸出,且都要用到本級(jí)的兩個(gè)輸入數(shù)據(jù),故第一個(gè)輸出計(jì)算完畢后,輸出數(shù)據(jù)不能立即存入輸入地址,要等到第二個(gè)輸出計(jì)算調(diào)用輸入數(shù)據(jù)完畢后才能覆蓋。在進(jìn)行第L級(jí)運(yùn)算時(shí),先算出該級(jí)不同旋轉(zhuǎn)因子的個(gè)數(shù)(也是該級(jí)中各個(gè)蝶形運(yùn)算兩輸入數(shù)據(jù)的間距),再?gòu)腞=0開(kāi)始按序計(jì)算,直到R=B1結(jié)束。然后對(duì)讀入數(shù)據(jù)進(jìn)行數(shù)據(jù)倒序操作。應(yīng)用原位計(jì)算,蝶形運(yùn)算可表示成如下形式: (J)= (J)+ (J+B)* (J+B)= (J)(J+B)* 總結(jié)上述運(yùn)算規(guī)