【正文】
t(39。附加的工具箱(單獨提供的專用 MATLAB 函數(shù)集)擴展了 MATLAB 環(huán)境,以解決這些應用領域內(nèi)特定類型的問題。用GUI界面完成人機交互方便使用的。采集到語音信號之后,需要對語音信號進行分析,如語音信號的時域分析、頻譜分析、譜圖分析。1. 原位計算對點的FFT共進行M級運算,每級由N/2個蝶形運算組成。圖3 整個蝶形運算流程圖送入x(n),MN=2^M倒序L=1:MB=2^(L1)J=0:B1P=J*2^(ML) K=J:2^L:N1T=A(K)+A(K+B)*WN^PA(K+B)=A(K)A(K+B)*WN^PA(K)=T輸出開始 結(jié)束束束為了保證運算輸出的X(k)按順序排列,要求序列x(n)倒序輸入,即在運算前要先對輸入的序列進行位序顛倒。其輸入窗口顯示如圖5所示。完成人機設計界面如圖9所示:圖9 完成人機設計界面第二步,設置控件屬性:雙擊組件可以設置文本框,推按鈕的屬性,如顯示大小,名稱和默認值等。這次課程設計使我了解了Matlab的使用方法,提高了自己的分析和動手實踐能力。N2=input(39。語音信號時域波形39。 end %算下一個倒序數(shù) K=N/2。 %繪制原始語音信號的頻率圖plot(w1,abs(x1))。Y1(k)39。s Tools menu. Choose GUI allows only one% instance to run (singleton).%% See also: GUIDE, GUIDATA, GUIHANDLES% Edit the above text to modify the response to help gaoli208% Last Modified by GUIDE 11Jan2010 14:14:19% Begin initialization code DO NOT EDITgui_Singleton = 1。 ischar(varargin{1}) = str2func(varargin{1})。), get(0,39。defaultUicontrolBackgroundColor39。)) set(hObject,39。,[N1 N2])。M=nextpow2(x1)。 % 將x倒序排列作為y的初始值 WN=exp(i*2*pi/N)。ylabel(39。) xlabel(39。defaultUicontrolBackgroundColor39。amp。axes()。x1的頻率響應特性39。K=K/2。)。String39。 isequal(get(hObject,39。amp。)) returns contents of N1 as a double% Executes during object creation, after setting all properties.function N1_CreateF(hObject, eventdata, handles)% hObject handle to N1 (see GCBO)% eventdata reserved to be defined in a future version of MATLAB% handles empty handles not created until after all CreateFs called% Hint: edit controls usually have a white background on Windows.% See ISPC and COMPUTER.if ispc amp。gui_Callback39。Property39。)xlabel(39。 % 蝶形運算的兩個因子對應單元下標的關系 t=y(kp)*WNp。%按序交換數(shù)據(jù)和算倒序數(shù) if IJ。%語句替換x1=x39。)。把自己編寫的FFT算法與Matlab自帶FFT算法進行比較。第一步,該選擇本圖形用戶界面需要的控件:三個文本框(Edit Text)用來輸入N1,N2和fs。圖3中數(shù)據(jù)倒序的程序流程圖如圖4所示。每個R對應的旋轉(zhuǎn)因子指數(shù),旋轉(zhuǎn)因子指數(shù)相同的蝶從上往下依次逐個運算,各個蝶的第一節(jié)點標號k都是從R開始,以為步長,到(可簡取極值N2)結(jié)束。當采用M次FFT時,由N=2M求得M=logN,運算流圖有M級蝶形,每一級都由N/2個蝶形運算構(gòu)成,這樣每一級蝶形運算都需要N/2次復數(shù)乘法和N次復數(shù)加法。[n1 n2]表示讀取從n1點到n2點的值(若只有一個n的點則表示讀取前n點的采樣值)。因此,研究作為DSP的快速算法的FFT是相當必要的,快速傅里葉變換(FFT)是為提高DFT運算速度而采用的一種算法,快速算法的種類很多,而且目前仍在改進和提高,它是根據(jù)離散傅里葉變換的奇、偶、虛、實等特性,對離散傅立葉變換的算法進行改進獲得的。對于有限長序列x(n),若要求其N點的傅里葉變換(DFT)需要經(jīng)過次復數(shù)乘法運算和N*(N1)次復數(shù)加法運算。)。按時間下標的奇偶將N點x(n)分別抽取組成兩個N/2點序列,分別記為x1(n)和x2(n),將x(n)的DFT轉(zhuǎn)化為x1(n)和x2(n)的DFT的計算。然后對讀入數(shù)據(jù)進行數(shù)據(jù)倒序操作。利用這一算法可按順序數(shù)I的遞增順序,依次求得與之對應的倒序數(shù)J。運行結(jié)果如圖11所示。在這里特別感謝董老師和李老師,他們給了我們很大的發(fā)揮空間,讓我們真正自己動手真正掌握了知識,感謝他們細心指導。 %讀取語音信號的數(shù)據(jù)sound(x,fs,nb)。if length(x1)N x1=[x1,zeros(1,Nlength(x1))]。%第L級中,每個蝶形的兩個輸入數(shù)據(jù)相距B個點,每級有B個不同的旋轉(zhuǎn)因子 for J=0:B1 % J代表了不同的旋轉(zhuǎn)因子 p=J*2^(ML)。figure(3)subplot(2,1,1)。附錄Ⅱ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。, gaoli208_OutputF, ... 39。String39。) returns contents of N2 as text% str2double(get(hObject,39。String39。String39。語音信號時域波形39。 end %算下一個倒序數(shù) K=N/2。[x1,w1]=freqz(x1,1)。ylabel(39。) returns ringin contents as cell array% contents{get(hObject,39。,39。ylabel(39。axes()。 WNp=WN^p。 % 若x的長度不是2的冪,補零到2的整數(shù)冪 end %數(shù)據(jù)倒序操作J=0。%當語音信號文件較大時用這兩條%x1=reshape(x,1,2*n)。white39。,39。BackgroundColor39。end% End initialization code DO NOT EDIT% Executes just before gaoli208 is made visible.function gaoli208_OpeningF(hObject, eventdata, handles, vararg