版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
/目錄1引言12基于MATLAB的FFT算法實(shí)現(xiàn)22.1系統(tǒng)總體流程圖22.2FFT運(yùn)算規(guī)律及編程思想32.2.1語音信號的采集32.2.2DIT-FFT算法的基本原理32.2.3DIT-FFT算法的運(yùn)算規(guī)律及編程思想53Matlab程序?qū)崿F(xiàn)104系統(tǒng)人機(jī)對話界面134.1GUI簡介134.2界面設(shè)計(jì)134.3運(yùn)行調(diào)試145心得體會(huì)16參考文獻(xiàn)17附錄Ⅰ18附錄Ⅱ211引言MATLAB是矩陣實(shí)驗(yàn)室〔MatrixLaboratory的簡稱.是美國MathWorks公司出品的商數(shù)學(xué)軟件.用于算法開發(fā)、數(shù)據(jù)可視化、數(shù)據(jù)分析以及數(shù)值計(jì)算的高級技術(shù)計(jì)算語言和交互式環(huán)境.主要包括MATLAB和Simulink兩大部分。MATLAB的應(yīng)用范圍非常廣.包括信號和圖像處理、通訊、控制系統(tǒng)設(shè)計(jì)、測試和測量、財(cái)務(wù)建模和分析以及計(jì)算生物學(xué)等眾多應(yīng)用領(lǐng)域。附加的工具箱〔單獨(dú)提供的專用MATLAB函數(shù)集擴(kuò)展了MATLAB環(huán)境.以解決這些應(yīng)用領(lǐng)域內(nèi)特定類型的問題。它以矩陣運(yùn)算為基礎(chǔ).把計(jì)算、可視化、程序設(shè)計(jì)融合在一個(gè)簡單易用的交互式工作環(huán)境中.是一款數(shù)據(jù)分析和處理功能都非常強(qiáng)大的工程適用軟件。它可以將聲音文件變換為離散的數(shù)據(jù)文件.然后利用其強(qiáng)大的矩陣運(yùn)算能力處理數(shù)據(jù).如數(shù)據(jù)濾波、傅立葉變換、時(shí)域和頻域分析、聲音回放以及各種圖的呈現(xiàn)等.它的信號處理與分析工具箱位語音信號分析提供了十分豐富的功能函數(shù).利用這些功能函數(shù)可以快捷而又方便的完成語音信號的處理和分析以及信號的可視化。數(shù)字信號處理是MATLAB重要應(yīng)用的領(lǐng)域之一。對于有限長序列x<n>,若要求其N點(diǎn)的傅里葉變換〔DFT需要經(jīng)過次復(fù)數(shù)乘法運(yùn)算和N*<N-1>次復(fù)數(shù)加法運(yùn)算。隨著N的增加.運(yùn)算量將急劇增加.而在實(shí)際問題中.N往往是較大的.如當(dāng)N=1024時(shí).完成復(fù)數(shù)乘法和復(fù)數(shù)加法的次數(shù)分別為百萬以上.無論是用通用計(jì)算機(jī)還是用DSP芯片.都需要消耗大量的時(shí)間和機(jī)器內(nèi)存.不能滿足實(shí)時(shí)的要求。因此.DFT的這種運(yùn)算只能進(jìn)行理論上的計(jì)算.不適合對實(shí)時(shí)處理要求高的場合。因此.研究作為DSP的快速算法的FFT是相當(dāng)必要的.快速傅里葉變換〔FFT是為提高DFT運(yùn)算速度而采用的一種算法.快速算法的種類很多.而且目前仍在改進(jìn)和提高.它是根據(jù)離散傅里葉變換的奇、偶、虛、實(shí)等特性.對離散傅立葉變換的算法進(jìn)行改進(jìn)獲得的。基于本學(xué)期所學(xué)的DIT-FFT的運(yùn)算規(guī)律和編程思想以及Matlab的學(xué)習(xí)和使用.本課設(shè)要求在Matlab環(huán)境下編寫基2DIT-FFT算法實(shí)現(xiàn)對離散信號的快速傅里葉變換.再與Matlab軟件自帶的FFT函數(shù)實(shí)現(xiàn)對離散信號的傅里葉變換進(jìn)行比較.如果得到的頻譜相同.那么我們編寫的程序就是正確的。其中離散信號是通過PC自帶的錄音機(jī)錄制一段wav語音信號.用Matlab采樣得到離散序列x1。如果有能力可以選做系統(tǒng)人機(jī)對話界面。用GUI界面完成人機(jī)交互方便使用的。本課程設(shè)計(jì)主要是對數(shù)字信號的分析。2基于MATLAB的FFT算法實(shí)現(xiàn)2.1系統(tǒng)總體流程圖本設(shè)計(jì)要求錄制一段個(gè)人自己的語音信號.并對錄制的信號進(jìn)行采樣;畫出采樣后語音信號的時(shí)域波形和頻譜圖;在Matlab環(huán)境下編寫基2DIT-FFT算法;利用自己編寫的算法對已采集的語音信號進(jìn)行頻譜分析.并畫出語音信號的時(shí)域與頻譜圖.并與Matlab數(shù)字信號處理工具箱中的fft函數(shù)進(jìn)行對比研究.驗(yàn)證自編算法的正確性。所以得到系統(tǒng)總體流程圖如圖1所示。語音信號采集語音信號采集完成信號時(shí)域圖完成信號頻率響應(yīng)編寫fft程序,畫出信號頻譜圖實(shí)現(xiàn)輸入信號的倒序?qū)崿F(xiàn)一級中不同種蝶形算運(yùn)實(shí)現(xiàn)一級中相同種蝶形運(yùn)算與Matlab自帶的FFT比較圖1系統(tǒng)總體流程圖2.2FFT運(yùn)算規(guī)律及編程思想2.2.1語音信號的采集利用PC機(jī)自帶的錄音機(jī).錄制一段語音信號.保存格式為wave的文件.并將其保存在電腦中。在MATLAB中.fn=input<'EnterWAVfilename:','s'>;[x,fs,nb]=wavread<fn,[n1n2]>;用于讀取語音.采樣值放在向量x中.fs表示采樣頻率<Hz>.nb表示采樣位數(shù)。[n1n2]表示讀取從n1點(diǎn)到n2點(diǎn)的值〔若只有一個(gè)n的點(diǎn)則表示讀取前n點(diǎn)的采樣值。sound<x,fs,nb>;用于對聲音的回放。向量x則就代表了一個(gè)信號〔也即一個(gè)復(fù)雜的"函數(shù)表達(dá)式"也就是說可以像處理一個(gè)信號表達(dá)式一樣處理這個(gè)聲音信號。采集到語音信號之后.需要對語音信號進(jìn)行分析.如語音信號的時(shí)域分析、頻譜分析、譜圖分析。2.2.2DIT-FFT算法的基本原理快速傅里葉變換〔FFT是為提高DFT運(yùn)算速度而采用的一種算法。對一個(gè)有限長度序列x<n>的N點(diǎn)的DFT為:所以.要求N點(diǎn)的DFT,需要N2次的復(fù)數(shù)乘法運(yùn)算,N*<N-1>次復(fù)數(shù)乘法運(yùn)算算。隨著N的增加.運(yùn)算量將急劇增加.而在實(shí)際問題中.N往往是較大的.如當(dāng)N=1024時(shí).完成復(fù)數(shù)乘法和復(fù)數(shù)加法的次數(shù)分別為百萬以上.無論是用通用計(jì)算機(jī)還是用DSP芯片.都需要消耗大量的時(shí)間.不能滿足實(shí)時(shí)的要求,.不適合于對實(shí)時(shí)處理要求高的場合。為了能實(shí)時(shí)處理DFT,要想減少DFT的運(yùn)算量可以有兩個(gè)途徑:第一是降N.N的值減小了.運(yùn)算量就減少了;第二是利用旋轉(zhuǎn)因子的周期性.對稱性和可約性。利用這兩個(gè)途徑實(shí)現(xiàn)DFT的快速傅里葉變換〔FFT.FFT算法基本上可分為按時(shí)間抽取的FFT算法〔DIT-FFT和按頻率抽取的FFT算法〔DIF-FFT。旋轉(zhuǎn)因子的性質(zhì):〔1周期性〔2共軛對稱性〔3可約性本次課設(shè)要求用用基2的按時(shí)間抽取的FFT算法〔DIT-FFT實(shí)現(xiàn)FFT功能.設(shè)序列x<n>的長度為N.且N滿足N=2M,M為正整數(shù)。若N不能滿足上述關(guān)系.可以將序列x<n>補(bǔ)零實(shí)現(xiàn)。按時(shí)間抽取基2-FFT算法的基本思路是將N點(diǎn)序列按時(shí)間下標(biāo)的奇偶分為兩個(gè)N/2點(diǎn)序列.計(jì)算這兩個(gè)N/2點(diǎn)序列的N/2點(diǎn)DFT.計(jì)算量可減小約一半;每一個(gè)N/2點(diǎn)序列按照同樣的劃分原則.可以劃分為兩個(gè)N/4點(diǎn)序列.最后.將原序列劃分為多個(gè)2點(diǎn)序列.將計(jì)算量大大降低。按時(shí)間下標(biāo)的奇偶將N點(diǎn)x<n>分別抽取組成兩個(gè)N/2點(diǎn)序列.分別記為x1<n>和x2<n>.將x<n>的DFT轉(zhuǎn)化為x1<n>和x2<n>的DFT的計(jì)算。利用旋轉(zhuǎn)因子的可約性.即:用蝶形運(yùn)算可表示為如圖2所示:圖2圖2DIT-FFT蝶形運(yùn)算流圖符號以此類推.還可以把x1<n>和x2<n>按n值得奇偶分為兩個(gè)序列.這樣就達(dá)到了降N得目的.從而減少了運(yùn)算量。FFT對DFT的數(shù)學(xué)運(yùn)算量改進(jìn):直接采用DFT進(jìn)行計(jì)算.運(yùn)算量為N2次復(fù)數(shù)乘法和N*<N-1>次復(fù)數(shù)乘法。當(dāng)采用M次FFT時(shí).由N=2M求得M=logN.運(yùn)算流圖有M級蝶形.每一級都由N/2個(gè)蝶形運(yùn)算構(gòu)成.這樣每一級蝶形運(yùn)算都需要N/2次復(fù)數(shù)乘法和N次復(fù)數(shù)加法。M級運(yùn)算共需要復(fù)數(shù)乘法次數(shù)為C=N/2*M,復(fù)數(shù)加法次數(shù)為C=N*M。當(dāng)N值較大時(shí).FFT減少運(yùn)算量的特點(diǎn)表現(xiàn)的越明顯。2.2.3DIT-FFT算法的運(yùn)算規(guī)律及編程思想為了編寫DIT-FFT算法的運(yùn)算程序.首先要分析其運(yùn)算規(guī)律.總結(jié)編程思想并繪出程序框圖。1.原位計(jì)算對點(diǎn)的FFT共進(jìn)行M級運(yùn)算.每級由N/2個(gè)蝶形運(yùn)算組成。在同一級中.每個(gè)蝶的輸入數(shù)據(jù)只對本蝶有用.且輸出節(jié)點(diǎn)與輸入節(jié)點(diǎn)在同一水平線上.這就意味著每算完一個(gè)蝶后.所得數(shù)據(jù)可立即存入原輸入數(shù)據(jù)所占用的數(shù)組元素<存儲(chǔ)單元>.這種原位<址>計(jì)算的方法可節(jié)省大量內(nèi)存。2.蝶形運(yùn)算實(shí)現(xiàn)FFT運(yùn)算的核心是蝶形運(yùn)算.找出蝶形運(yùn)算的規(guī)律是編程的基礎(chǔ)。蝶形運(yùn)算是分級進(jìn)行的;每級的蝶形運(yùn)算可以按旋轉(zhuǎn)因子的指數(shù)大小排序進(jìn)行;如果指數(shù)大小一樣則可從上往下依次蝶算。對點(diǎn)的FFT共有M級運(yùn)算.用L表示從左到右的運(yùn)算級數(shù)<L=1.2.….M>。第L級共有個(gè)不同指數(shù)的旋轉(zhuǎn)因子.用R表示這些不同指數(shù)旋轉(zhuǎn)因子從上到下的順序<R=0.1.….B-1>。第R個(gè)旋轉(zhuǎn)因子的指數(shù).旋轉(zhuǎn)因子指數(shù)為P的第一個(gè)蝶的第一節(jié)點(diǎn)標(biāo)號k從R開始.由于本級中旋轉(zhuǎn)因子指數(shù)相同的蝶共有個(gè).且這些蝶的相鄰間距為.故旋轉(zhuǎn)因子指數(shù)為P的最后一個(gè)蝶的第一節(jié)點(diǎn)標(biāo)號k為:.本級中各蝶的第二個(gè)節(jié)點(diǎn)與第一個(gè)節(jié)點(diǎn)都相距B點(diǎn)。應(yīng)用原位計(jì)算.蝶形運(yùn)算可表示成如下形式:<J>=<J>+<J+B>*<J+B>=<J>-<J+B>*總結(jié)上述運(yùn)算規(guī)律.可采用如下運(yùn)算方法進(jìn)行DIT-FFT運(yùn)算。首先讀入數(shù)據(jù).根據(jù)數(shù)據(jù)長度確定運(yùn)算級數(shù)M.運(yùn)算總點(diǎn)數(shù).不足補(bǔ)0處理。然后對讀入數(shù)據(jù)進(jìn)行數(shù)據(jù)倒序操作。數(shù)據(jù)倒序后從第1級開始逐級進(jìn)行.共進(jìn)行M級運(yùn)算。在進(jìn)行第L級運(yùn)算時(shí).先算出該級不同旋轉(zhuǎn)因子的個(gè)數(shù)<也是該級中各個(gè)蝶形運(yùn)算兩輸入數(shù)據(jù)的間距>.再從R=0開始按序計(jì)算.直到R=B-1結(jié)束。每個(gè)R對應(yīng)的旋轉(zhuǎn)因子指數(shù).旋轉(zhuǎn)因子指數(shù)相同的蝶從上往下依次逐個(gè)運(yùn)算.各個(gè)蝶的第一節(jié)點(diǎn)標(biāo)號k都是從R開始.以為步長.到<可簡取極值N-2>結(jié)束??紤]到蝶形運(yùn)算有兩個(gè)輸出.且都要用到本級的兩個(gè)輸入數(shù)據(jù).故第一個(gè)輸出計(jì)算完畢后.輸出數(shù)據(jù)不能立即存入輸入地址.要等到第二個(gè)輸出計(jì)算調(diào)用輸入數(shù)據(jù)完畢后才能覆蓋。這樣數(shù)據(jù)倒序后的運(yùn)算可用三重循環(huán)程序?qū)崿F(xiàn)。整個(gè)蝶形運(yùn)算流程圖如圖3所示。圖圖3整個(gè)蝶形運(yùn)算流程圖送入x<n>,MN=2^M倒序L=1:MB=2^<L-1>J=0:B-1P=J*2^<M-L>K=J:2^L:N-1T=A<K>+A<K+B>*WN^PA<K+B>=A<K>-A<K+B>*WN^PA<K>=T輸出開始結(jié)束束束3.序列倒序?yàn)榱吮WC運(yùn)算輸出的X<k>按順序排列.要求序列x<n>倒序輸入.即在運(yùn)算前要先對輸入的序列進(jìn)行位序顛倒。如果總點(diǎn)數(shù)為的x<n>的順序數(shù)是用M位二進(jìn)制數(shù)表示.則倒序數(shù)只需將順序數(shù)的二進(jìn)制位倒置即可.按照這一規(guī)律用硬件電路和匯編語言很容易產(chǎn)生倒序數(shù)。但用MATLAB等高級語言實(shí)現(xiàn)倒序時(shí).直接倒置二進(jìn)制數(shù)位的方法不可取.還須找出產(chǎn)生倒序的十進(jìn)制規(guī)律。將十進(jìn)制順序數(shù)用I表示.與之對應(yīng)的二進(jìn)制數(shù)用IB表示。十進(jìn)制倒序數(shù)用J表示.與之對應(yīng)的二進(jìn)制數(shù)用JB表示。JB是IB的位倒置結(jié)果.十進(jìn)制順序數(shù)I增加1.相當(dāng)于IB最低位加1且逢2向高位進(jìn)1.即相當(dāng)于JB最高位加1且逢2向低位進(jìn)1。JB的變化規(guī)律反映到J的變化分二種情況:如果JB的最高位是0.則直接由加1得到下一個(gè)倒序值;如果JB的最高位是1.則要先將最高位變0.再在次高位加1。但次高位加1時(shí).同樣要判斷0、1值.如果是0.則直接加1.否則要先將次高位變0.再判斷下一位。依此類推.直到完成最高位加1.逢2向右進(jìn)位的運(yùn)算。利用這一算法可按順序數(shù)I的遞增順序.依次求得與之對應(yīng)的倒序數(shù)J。為了節(jié)省內(nèi)存.數(shù)據(jù)倒序可原址進(jìn)行.當(dāng)I=J時(shí)不需要交換.當(dāng)I≠J時(shí)需要交換數(shù)據(jù)。另外.為了避免再次調(diào)換前面已經(jīng)調(diào)換過的一對數(shù)據(jù).只對I<J的情況進(jìn)行數(shù)據(jù)交換即可實(shí)現(xiàn)數(shù)據(jù)倒序操作。圖3中數(shù)據(jù)倒序的程序流程圖如圖4所示。例如.N=8時(shí).序列倒序結(jié)果如表1所示。表1碼位倒序〔N=8表1碼位倒序〔N=8自然順序二進(jìn)制倒位序二進(jìn)制倒位順序0000000010011004201001023011110641000011510110156110011371111117圖圖4倒序流程圖LH=N/2J=1N1=N-1I=0,N-1數(shù)據(jù)交換算倒序數(shù)YNI<J?T=A<J>A<J>=A〔IA<I>=TK=N/2J≥K?J=J+KNJ=J-KK=K/2Y3Matlab程序?qū)崿F(xiàn)用ringin.wav作為例子.運(yùn)行調(diào)試程序。1.程序運(yùn)行開始時(shí).要求輸入采樣頻率fs〔fs=1024.所需要變換的起點(diǎn)N1〔N1=1000和終點(diǎn)N2〔N2=5095以及要采樣的語音文件〔ringin.wav;其中N1和N2的差值必須在語音信號長度范圍內(nèi).但不能太小.否則聽不到較為清晰的語音。其輸入窗口顯示如圖5所示。圖5程序運(yùn)行開始圖5程序運(yùn)行開始的輸入窗口將fs=1024.N1=1000.N2=5095和語音信號ringin.wav輸入后得到采樣后的語音信號x1的時(shí)域波形.如圖6所示.其頻率響應(yīng)特性如圖7所示.Matlab自帶的FFT函數(shù)實(shí)現(xiàn)的x1的頻譜與編寫的FFT程序?qū)崿F(xiàn)的x1的頻譜的比較如圖8所示。。圖6采樣后的語音信號的時(shí)域波形圖6采樣后的語音信號的時(shí)域波形圖7x1的頻率響應(yīng)特性圖7x1的頻率響應(yīng)特性圖8FFT函數(shù)實(shí)現(xiàn)與圖8FFT函數(shù)實(shí)現(xiàn)與編寫的FFT程序?qū)崿F(xiàn)的比較取不同的點(diǎn)數(shù)進(jìn)行FFT變換.經(jīng)觀察.編寫FFT程序得到的語音信號的頻譜圖與Matlab中自帶的FFT函數(shù)得到的語音信號頻譜圖總是基本一致.但是如果輸入的N1和N2差值加1不是2的整數(shù)次冪就會(huì)有細(xì)微差別.這是因?yàn)榫帉懙目焖俑道锶~變換計(jì)算信號的N點(diǎn)傅里葉變換要求N為2的整數(shù)次冪.不夠的話信號將會(huì)被補(bǔ)零后運(yùn)算.即參與運(yùn)算的信號已經(jīng)不同〔差別很小.所以FFT運(yùn)算后的結(jié)果也不盡相同.所示頻譜圖自然有細(xì)微的差別。由用MATLAB自帶FFT函數(shù)實(shí)現(xiàn)的頻譜圖與用MATLAB編寫的FFT程序?qū)崿F(xiàn)的頻譜圖相比較.可知.兩個(gè)算法計(jì)算后的結(jié)果幾乎相同.驗(yàn)證了自編算法的正確性。如果改變輸入的值和語音信號.那么得到不一樣的時(shí)域波形.頻率響應(yīng).通過FFT得到頻譜都會(huì)不同。需要注意的是自由輸入的語音信號不同.其長度也不同.所以根據(jù)要輸入的語音信號輸入N1.N2的值。4系統(tǒng)人機(jī)對話界面4.1GUI簡介圖形用戶界面〔GUI.是一種提供人機(jī)交互的工具和方法。GUI是包含圖形對象.如窗口、圖標(biāo)、菜單和文本等圖文并茂的用戶界面。4.2界面設(shè)計(jì)用MATLAB圖形用戶界面開發(fā)環(huán)境設(shè)計(jì)GUI點(diǎn)的一般步驟是:1.進(jìn)行界面設(shè)計(jì)。2.設(shè)計(jì)控件屬性。3.進(jìn)行M語言編程。以本設(shè)計(jì)要求為例介紹。第一步.該選擇本圖形用戶界面需要的控件:三個(gè)文本框<EditText>用來輸入N1.N2和fs。三個(gè)靜態(tài)文本<statictext>用來提示我們需要人為輸入的內(nèi)容。兩個(gè)推按鈕<Pushbutton>.用來運(yùn)行和退出。四個(gè)軸對象<axes>用來顯示信號時(shí)域波形.頻譜圖.和兩種不同F(xiàn)FT實(shí)現(xiàn)的頻譜圖。完成人機(jī)設(shè)計(jì)界面如圖9所示:圖9完成人機(jī)設(shè)計(jì)界面圖9完成人機(jī)設(shè)計(jì)界面第二步.設(shè)置控件屬性:雙擊組件可以設(shè)置文本框.推按鈕的屬性.如顯示大小.名稱和默認(rèn)值等。第三步.編寫回調(diào)函數(shù)。組件事件的發(fā)生是通過回調(diào)函數(shù)進(jìn)行工作的。控件設(shè)置完成后保存.然后運(yùn)行GUI〔操作為ctrl+T.就會(huì)進(jìn)入editor窗口.加入各個(gè)控件功能的函數(shù)代碼。完成后保存即可。第四步.運(yùn)行GUI。運(yùn)行editor窗口的程序后.會(huì)彈出已經(jīng)激活的人機(jī)對話界面。系統(tǒng)人機(jī)對話界面如圖10所示。圖10系統(tǒng)人機(jī)對話界面圖10系統(tǒng)人機(jī)對話界面4.3運(yùn)行調(diào)試運(yùn)行GUI.已經(jīng)彈出圖10的系統(tǒng)人機(jī)對話界面.根據(jù)提示"InputN1:"."InputN2:"和"Inputfs:"分別輸入N1.N2和fs.然后點(diǎn)擊"運(yùn)行"推按鈕就會(huì)得到本設(shè)計(jì)的要求。運(yùn)行結(jié)果如圖11所示。如果運(yùn)行結(jié)束.可以通過點(diǎn)擊"退出"推按鈕退出該人機(jī)對話界面.返回Matlab。圖11運(yùn)行結(jié)果圖11運(yùn)行結(jié)果5心得體會(huì)本次實(shí)習(xí)的主要內(nèi)容是通過用Matlab實(shí)現(xiàn)FFT的設(shè)計(jì).可以實(shí)現(xiàn)對一段自己錄制的語音信號進(jìn)行分析.并畫出采樣信號的時(shí)域與頻域圖。把自己編寫的FFT算法與Matlab自帶FFT算法進(jìn)行比較。程序運(yùn)行調(diào)試時(shí).自己選擇輸入要采樣的語音信號.采樣頻率以及要變換的范圍.可以實(shí)現(xiàn)對不同信號的信號采樣和進(jìn)行不同點(diǎn)的FFT運(yùn)算。在之前數(shù)字信號處理的學(xué)習(xí)以及完成實(shí)驗(yàn)的過程中.已經(jīng)使用過Matlab.對其有了一些基礎(chǔ)的了解和認(rèn)識.通過這次的課程設(shè)計(jì)使我進(jìn)一步了解了信號的產(chǎn)生.采樣及頻譜分析的方法.以及其中產(chǎn)生信號和繪制信號的基本命令和一些基礎(chǔ)編程語言。讓我感受到只有在了解課本知識的前提下.才能更好的應(yīng)用這個(gè)工具.并且熟練的應(yīng)用Matlab也可以很好的加深我對課程的理解.方便我的思維。這次課程設(shè)計(jì)使我了解了Matlab的使用方法.提高了自己的分析和動(dòng)手實(shí)踐能力。同時(shí)我相信.進(jìn)一步加強(qiáng)對MATLAB的學(xué)習(xí)與研究對我今后的學(xué)習(xí)將會(huì)起到很大的幫助。這次的課程設(shè)計(jì)是對本學(xué)期所學(xué)知識的一次重要鞏固.使得在課堂上掌握的知識得到了真正的運(yùn)用。在學(xué)習(xí)的過程中和同學(xué)討論.更明白了理論知識與實(shí)踐的聯(lián)系。書到用時(shí)方恨少.有些知識學(xué)會(huì)是一回事.掌握是一回事.但應(yīng)用起來.確實(shí)不是那么簡單的.需要很多知識的融會(huì)貫通。程序運(yùn)行調(diào)試初期.曾經(jīng)多次出現(xiàn)錯(cuò)誤、不能產(chǎn)生圖形等問題.但在我翻閱資料認(rèn)真改正及老師同學(xué)的幫助下基本功能還是完成了.經(jīng)過1個(gè)星期的上機(jī)實(shí)習(xí).程序已得到一些完善.能完成基本的要求的功能。最后經(jīng)過努力.又深入學(xué)習(xí)了圖形用戶界面〔GUI.完成了選做要求的人機(jī)對話界面。學(xué)習(xí)就是一個(gè)了解.疑惑.進(jìn)而解惑的過程.這次實(shí)習(xí)就是提供了這樣一個(gè)發(fā)現(xiàn)自己知識漏洞.與同學(xué)老師探討進(jìn)行解惑的的機(jī)會(huì)。通過這次課程設(shè)計(jì)實(shí)習(xí).我更深刻的了解了Matlab的運(yùn)用.重新復(fù)習(xí)了FFT中的重要的序列倒序和蝶形變換的程序.對課本上的知識有了更深的理解.使我對數(shù)字信號處理有了系統(tǒng)的認(rèn)知。在這里特別感謝董老師和李老師.他們給了我們很大的發(fā)揮空間.讓我們真正自己動(dòng)手真正掌握了知識.感謝他們細(xì)心指導(dǎo)。也非常感謝我的同學(xué).他們解開了我在實(shí)習(xí)中出現(xiàn)的諸多知識死角.謝謝大家!參考文獻(xiàn)[1]范壽康DSP技術(shù)與DSP芯片.北京:電子工業(yè)出版社[2]程佩青.數(shù)字信號處理教程.北京:清華大學(xué)出版社出版.2001[3]高西全丁玉美等.數(shù)字信號處理.北京:電子工業(yè)出版社.2009[4]李勇徐震.MATLAB輔助現(xiàn)代工程數(shù)字信號處理.XX電子科技大學(xué)出版社[5]陳杰.Matlab寶典.電子工業(yè)出版社[6]蘇金明張蓮花劉波.MATLAB工具箱應(yīng)用.電子工業(yè)出版社附錄Ⅰfs=input<'輸入采樣頻率fs='>;%語音信號采樣頻率為fsN1=input<'輸入所需變換的起點(diǎn)N1='>;N2=input<'輸入所需變換的終點(diǎn)N2='>;fn=input<'EnterWAVfilename:','s'>;%獲取一個(gè)*.wav的文件[x,fs,nb]=wavread<fn,[N1N2]>;%讀取語音信號的數(shù)據(jù)sound<x,fs,nb>;%播放語音信號%n=N2-N1+1;%當(dāng)語音信號文件較大時(shí)用這兩條%x1=reshape<x,1,2*n>;%語句替換x1=x';x1=x';y1=fft<x1>;figure<1>plot<x1>%做原始語音信號的時(shí)域圖形title<'語音信號時(shí)域波形'>xlabel<'n'>;ylabel<'幅值'>;M=nextpow2<x1>;%求x的長度對應(yīng)的2的最低冪次mN=2^M;iflength<x1><Nx1=[x1,zeros<1,N-length<x1>>];%若x的長度不是2的冪.補(bǔ)零到2的整數(shù)冪end%數(shù)據(jù)倒序操作J=0;%給倒序數(shù)賦初值forI=0:N-1;%按序交換數(shù)據(jù)和算倒序數(shù)ifI<J;%條件判斷及數(shù)據(jù)交換T=x1<I+1>;x1<I+1>=x1<J+1>;x1<J+1>=T;end%算下一個(gè)倒序數(shù)K=N/2;whileJ>=K;J=J-K;K=K/2;endJ=J+K;end%x1;y=x1;%將x倒序排列作為y的初始值WN=exp<-i*2*pi/N>;forL=1:MB=2^L/2;%第L級中.每個(gè)蝶形的兩個(gè)輸入數(shù)據(jù)相距B個(gè)點(diǎn).每級有B個(gè)不同的旋轉(zhuǎn)因子forJ=0:B-1%J代表了不同的旋轉(zhuǎn)因子p=J*2^<M-L>;WNp=WN^p;fork=J+1:2^L:N%本次蝶形運(yùn)算的跨越間隔為2^Lkp=k+B;%蝶形運(yùn)算的兩個(gè)因子對應(yīng)單元下標(biāo)的關(guān)系t=y<kp>*WNp;%蝶形運(yùn)算的乘積項(xiàng)y<kp>=y<k>-t;%蝶形運(yùn)算.注意必須先進(jìn)行減法運(yùn)算.然后進(jìn)行加法運(yùn)算.否則要使用中間變量來傳遞y<k>y<k>=y<k>+t;%蝶形運(yùn)算endendend%yfigure<2>[x1,w1]=freqz<x1,1>;%繪制原始語音信號的頻率圖plot<w1,abs<x1>>;title<'x1的頻率響應(yīng)特性'>xlabel<'頻率'>;ylabel<'幅度'>;figure<3>subplot<2,1,1>;plot<abs<y1>>%Matlab自帶的FFT函數(shù)實(shí)現(xiàn)的語音信號的FFT頻譜圖title<'Matlab自帶的FFT函數(shù)實(shí)現(xiàn)的x1的頻譜'>xlabel<'K'>;ylabel<'Y1<k>'>;subplot<2,1,2>;plot<abs<y>>;%編寫的FFT程序?qū)崿F(xiàn)的語音信號的FFT頻譜圖title<'編寫的FFT程序?qū)崿F(xiàn)的的x1的頻譜'>xlabel<'K'>;附錄Ⅱfunctionvarargout=gaoli208<varargin>%GAOLI208M-fileforgaoli208.fig%GAOLI208,byitself,createsanewGAOLI208orraisestheexisting%singleton*.%%H=GAOLI208returnsthehandletoanewGAOLI208orthehandleto%theexistingsingleton*.%%GAOLI208<'CALLBACK',hObject,eventData,handles,...>callsthelocal%functionnamedCALLBACKinGAOLI208.Mwiththegiveninputarguments.%%GAOLI208<'Property','Value',...>createsanewGAOLI208orraisesthe%existingsingleton*.Startingfromtheleft,propertyvaluepairsare%appliedtotheGUIbeforegaoli208_OpeningFunctiongetscalled.An%unrecognizedpropertynameorinvalidvaluemakespropertyapplication%stop.Allinputsarepassedtogaoli208_OpeningFcnviavarargin.%%*SeeGUIOptionsonGUIDE'sToolsmenu.Choose"GUIallowsonlyone%instancetorun<singleton>".%%Seealso:GUIDE,GUIDATA,GUIHANDLES%Edittheabovetexttomodifytheresponsetohelpgaoli208%LastModifiedbyGUIDEv2.511-Jan-201014:14:19%Begininitializationcode-DONOTEDITgui_Singleton=1;gui_State=struct<'gui_Name',mfilename,...'gui_Singleton',gui_Singleton,...'gui_OpeningFcn',@gaoli208_OpeningFcn,...'gui_OutputFcn',@gaoli208_OutputFcn,...'gui_LayoutFcn',[],...'gui_Callback',[]>;ifnargin&&ischar<varargin{1}>gui_State.gui_Callback=str2func<varargin{1}>;endifnargout[varargout{1:nargout}]=gui_mainfcn<gui_State,varargin{:}>;elsegui_mainfcn<gui_State,varargin{:}>;end%Endinitializationcode-DONOTEDIT%Executesjustbeforegaoli208ismadevisible.functiongaoli208_OpeningFcn<hObject,eventdata,handles,varargin>%Thisfunctionhasnooutputargs,seeOutputFcn.%hObjecthandletofigure%eventdatareserved-tobedefinedinafutureversionofMATLAB%handlesstructurewithhandlesanduserdata<seeGUIDATA>%varargincommandlineargumentstogaoli208<seeVARARGIN>%Choosedefaultcommandlineoutputforgaoli208handles.output=hObject;%Updatehandlesstructureguidata<hObject,handles>;%UIWAITmakesgaoli208waitforuserresponse<seeUIRESUME>%uiwait<handles.figure1>;%Outputsfromthisfunctionarereturnedtothecommandline.functionvarargout=gaoli208_OutputFcn<hObject,eventdata,handles>%varargoutcellarrayforreturningoutputargs<seeVARARGOUT>;%hObjecthandletofigure%eventdatareserved-tobedefinedinafutureversionofMATLAB%handlesstructurewithhandlesanduserdata<seeGUIDATA>%Getdefaultcommandlineoutputfromhandlesstructurevarargout{1}=handles.output;functionN1_Callback<hObject,eventdata,handles>%hObjecthandletoN1<seeGCBO>%eventdatareserved-tobedefinedinafutureversionofMATLAB%handlesstructurewithhandlesanduserdata<seeGUIDATA>%Hints:get<hObject,'String'>returnscontentsofN1astext%str2double<get<hObject,'String'>>returnscontentsofN1asadouble%Executesduringobjectcreation,aftersettingallproperties.functionN1_CreateFcn<hObject,eventdata,handles>%hObjecthandletoN1<seeGCBO>%eventdatareserved-tobedefinedinafutureversionofMATLAB%handlesempty-handlesnotcreateduntilafterallCreateFcnscalled%Hint:editcontrolsusuallyhaveawhitebackgroundonWindows.%SeeISPCandCOMPUTER.ifispc&&isequal<get<hObject,'BackgroundColor'>,get<0,'defaultUicontrolBackgroundColor'>>set<hObject,'BackgroundColor','white'>;endfunctionN2_Callback<hObject,eventdata,handles>%hObjecthandletoN2<seeGCBO>%eventdatareserved-tobedefinedinafutureversionofMATLAB%handlesstructurewithhandlesanduserdata<seeGUIDATA>%Hints:get<hObject,'String'>returnscontentsofN2astext%str2double<get<hObject,'String'>>returnscontentsofN2asadouble%Executesduringobjectcreation,aftersettingallproperties.functionN2_CreateFcn<hObject,eventdata,handles>%hObjecthandletoN2<seeGCBO>%eventdatareserved-tobedefinedinafutureversionofMATLAB%handlesempty-handlesnotcreateduntilafterallCreateFcnscalled%Hint:editcontrolsusuallyhaveawhitebackgroundonWindows.%SeeISPCandCOMPUTER.ifispc&&isequal<get<hObject,'BackgroundColor'>,get<0,'defaultUicontrolBackgroundColor'>>set<hObject,'BackgroundColor','white'>;endfunctionfs_Callback<hObject,eventdata,handles>%hObjecthandletofs<seeGCBO>%eventdatareserved-tobedefinedinafutureversionofMATLAB%handlesstructurewithhandlesanduserdata<seeGUIDATA>%Hints:get<hObject,'String'>returnscontentsoffsastext%str2double<get<hObject,'String'>>returnscontentsoffsasadouble%Executesduringobjectcreation,aftersettingallproperties.functionfs_CreateFcn<hObject,eventdata,handles>%hObjecthandletofs<seeGCBO>%eventdatareserved-tobedefinedinafutureversionofMATLAB%handlesempty-handlesnotcreateduntilafterallCreateFcnscalled%Hint:editcontrolsusuallyhaveawhitebackgroundonWindows.%SeeISPCandCOMPUTER.ifispc&&isequal<get<hObject,'BackgroundColor'>,get<0,'defaultUicontrolBackgroundColor'>>set<hObject,'BackgroundColor','white'>;end%Executesonbuttonpressinbegin.functionbegin_Callback<hObject,eventdata,handles>%hObjecthandletobegin<seeGCBO>%eventdatareserved-tobedefinedinafutureversionofMATLAB%handlesstructurewithhandlesanduserdata<seeGUIDATA>N1=str2double<get<handles.N1,'String'>>;N2=str2double<get<handles.N2,'String'>>;fs=str2double<get<handles.fs,'String'>>;[x,fs,bits]=wavread<'D:\Matlab\work\ringin.wav',[N1N2]>;sound<x,fs,bits>;%播放語音信號%n=N2-N1+1;%當(dāng)語音信號文件較大時(shí)用這兩條%x1=reshape<x,1,2*n>;%語句替換x1=x';x1=x';y1=fft<x1>;axes<handles.tu1>;plot<x1>%做原始語音信號的時(shí)域圖形title<'語音信號時(shí)域波形'>xlabel<'n'>;ylabel<'幅值'>;M=nextpow2<x1>;%求x的長度對應(yīng)的2的最低冪次mN=2^M;iflength<x1><Nx1=[x1,zeros<1,N-length<x1>>];%若x的長度不是2的冪.補(bǔ)零到2的整數(shù)冪end%數(shù)據(jù)倒序操作J=0;%給倒序數(shù)賦初值forI=0:N-1;%按序交換數(shù)據(jù)和算倒序數(shù)ifI<J;%條件判斷及數(shù)據(jù)交換T=x1<I+1>;x1<I+1>=x1<J+1>;x1<J+1>=T;end%算下一個(gè)倒序數(shù)K=N/2;whileJ>=K;J=J-K;K=K/2;endJ=J+K;end%x1;y=x1;%將x倒序排列作為y的初始值WN=exp<-i*2*pi/N>;forL=1:MB=2^L/2;%第L級中.每個(gè)蝶形的兩個(gè)輸入數(shù)據(jù)相距B個(gè)點(diǎn).每級有B個(gè)不同的旋轉(zhuǎn)因子forJ=0:B-1%J代表了不同的旋轉(zhuǎn)因子
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年昌吉職業(yè)技術(shù)學(xué)院單招職業(yè)適應(yīng)性考試模擬測試卷附答案解析
- 2025年西安鐵路職業(yè)技術(shù)學(xué)院單招職業(yè)技能測試模擬測試卷附答案解析
- 2024年安徽省蕪湖市單招職業(yè)傾向性考試題庫附答案解析
- 2025年安徽省六安市單招職業(yè)適應(yīng)性測試題庫附答案解析
- 2024年貴州民用航空職業(yè)學(xué)院單招職業(yè)適應(yīng)性測試模擬測試卷附答案解析
- 2023年重慶市資陽地區(qū)單招職業(yè)適應(yīng)性測試題庫附答案解析
- 2024年湘中幼兒師范高等??茖W(xué)校單招職業(yè)技能測試模擬測試卷附答案解析
- 2026年企業(yè)保密員(外部人員)保密技能考核試卷及答案(考點(diǎn)梳理)
- 2024年陜西省西安市單招職業(yè)傾向性測試模擬測試卷附答案解析
- 2024年上海立信會(huì)計(jì)金融學(xué)院單招綜合素質(zhì)考試題庫附答案解析
- 科研項(xiàng)目財(cái)務(wù)專項(xiàng)審計(jì)方案模板
- 退伍留疆考試題庫及答案
- 數(shù)據(jù)倫理保護(hù)機(jī)制-洞察及研究
- 2025年鋼貿(mào)行業(yè)市場分析現(xiàn)狀
- 2025數(shù)字孿生與智能算法白皮書
- 鄉(xiāng)村醫(yī)生藥品管理培訓(xùn)
- 2025春季學(xué)期國開電大??啤豆芾韺W(xué)基礎(chǔ)》一平臺(tái)在線形考(形考任務(wù)一至四)試題及答案
- 財(cái)務(wù)保密意識培訓(xùn)
- 辦公室裝修改造工程合同書
- 教師節(jié)學(xué)術(shù)交流活動(dòng)策劃方案
- 瑞幸咖啡認(rèn)證考試題庫(咖啡師)
評論
0/150
提交評論