资源描述
按一下以編輯母片標題樣式,按一下以編輯母片,第二層,第三層,第四層,第五層,*,本资料仅供参考,不能作为科学依据。谢谢。本资料仅供参考,不能作为科学依据。本资料仅供参考,不能作为科学依据。谢谢。不能作为科学依据。,按一下以編輯母片標題樣式,按一下以編輯母片,第二層,第三層,第四層,第五層,*,本资料仅供参考,不能作为科学依据。谢谢。本资料仅供参考,不能作为科学依据。本资料仅供参考,不能作为科学依据。谢谢。不能作为科学依据。,Matlab,3.30.,Scream Lab,NCKU,Taiwan.,1/67,介紹,2/67,MATLAB主要提供以下功效,可用於技術計算高級語言,可對代碼、文件和數據進行管理開發環境,能够按迭代方式探查、設計及求解問題交互式工具,可用於線性代數、統計、傅立葉分析、篩選、優化以及數值積分等數學函數,可用於可視化數據二維和三維圖形函數,可用於構建自定義圖形用戶界面各種工具,可將基於MATLAB算法與外部應用程序和語言(如C、C+、Fortran、Java、COM以及Microsoft Excel)集成各種函數,3/67,Toolbox,MATLAB,一個主要特點是可擴展性。作為,Simulink,和其它全部,MathWorks,產品基礎,,MATLAB,能够通過附加工具箱(,Toolbox,)進行功效擴展,每一個工具箱就是實現特定功效函數集合。,MathWorks,提供工具箱分以下幾大類:,數學和優化、統計和數據分析、控制系統設計和分析、信號處理和通訊、圖像處理、測試和測量、金融建模和分析、應用程序布署、數據庫連接和報表、分布式計算,4/67,基礎運算與流程控制,5/67,使用變數與基本運算,普通數學符號運算,在,MATLAB,命令視窗(,Command Window,)內提醒符號(,)之後輸入運算式,並按入,Enter,鍵即可。,比如:,(5*2+3.5)/5,ans=,2.7000,若不想讓,MATLAB,每次都顯示運算結果,只需在運算式最後加上分號(,;,)即可,比如,:,(5*2+3.5)/5;,6/67,向量與矩陣處理,MATLAB,中變數還可用來儲存向量(,Vectors,)及矩陣(,Matrix,),以進行各種運算,比如:,s=1 3 5 2;%,注意,使用,及各數字間空白間隔,t=2*s+1,t=,3 7 11 5,7/67,矩陣各種處理,MATLAB,亦可取出向量中一個元素或一部份來做運算,比如:,t(3)=2%,將向量,t,第三個元素更改為,2,t=,3 7 2 5,t(6)=10%,在向量,t,加入第六個元素,其值為,10,t=,3 7 2 5 0 10,t(4)=%,將向量,t,第四個元素刪除,,代表空集合,t=,3 7 2 0 10,8/67,建立大小為,mn,矩陣,在每一橫列結尾加上分號(,;,),比如:,A=1 2 3 4;5 6 7 8;9 10 11 12;%,建立,34,矩陣,A,A%,顯示矩陣,A,內容,A=,1 2 3 4,5 6 7 8,9 10 11 12,9/67,mxn,矩,陣各種處理之一,A(2,3)=5,%,將矩陣,A,第二列、第三行元素值,改變為,5,A=,1 2 3 4,5 6 5 8,9 10 11 12,B=A(2,1:3),%,取出矩陣,A,第二橫列、第一至第三直行,並儲存成矩陣,B,B=,5 6 5,10/67,mxn,矩,陣各種處理之二,A=A B,%,將矩陣,B,轉置後、再以行向量併入矩陣,A,A=,1 2 3 4 5,5 6 5 8 6,9 10 11 12 5,A(:,2)=,%,刪除矩陣,A,第二行(:代表全部橫列,,代表空矩陣),A=,1 3 4 5,5 5 8 6,9 11 12 5,11/67,mxn,矩,陣各種處理之三,A=A;4 3 2 1%,在原矩陣,A,中,加入第四列,A=,1 3 4 5,5 5 8 6,9 11 12 5,4 3 2 1,A(1 4,:)=,%,刪除第一、四列(:代表全部直行,,是空矩陣),A=,5 5 8 6,12/67,惯用數學函數,MATLAB,是一個科學計算軟體,所以能够支援很多惯用到數學函數,y=abs(x)%,取,x,絕對值,y=sin(x)%,取,x,正弦值,y=exp(x)%,自然指數,exp(x),y=log(x)%,自然對數,ln(x),MATLAB,也支援複數運算,通常以,i,或,j,代表單位虛數,13/67,向量矩陣運算,有一些函數是特別針對向量而設計,y=min(x)%,向量,x,極小值,y=max(x)%,向量,x,極大值,y=mean(x)%,向量,x,平均值,y=sum(x)%,向量,x,總和,y=sort(x)%,向量,x,排序,14/67,流程控制,while,迴圈(,While-loop,),while,條件式,運算式,;,end,if else end,if,條件式,運算式,;,else,運算式,;,end,15/67,繪圖指令,16/67,基本繪圖指令,Plot:,最基本繪圖指令,對,x,座標及相對應,y,座標進行作圖,範例:,x=linspace(0,2*pi);%,在,0,到,2,間,等分取,100,個點,y=sin(x);%,計算,x,正弦函數值,plot(x,y);%,進行二維平面描點作圖,17/67,Plot,基本繪圖,-1,linspace(0,2*pi),產生從,0,到,2,且長度為,100(,預設值,),向量,x,y,是對應,y,座標只給定一個向量,該向量則對其索引值,(Index),作圖,plot(y),和,plot(1:length(y),y),會得到相同結果,18/67,Plot,基本繪圖,-2(I),一次畫出多條曲線,將,x,及,y,座標依次送入,plot,指令,範例:,x=linspace(0,2*pi);%,在,0,到,2,間,等分取,100,個點,plot(x,sin(x),x,cos(x),x,sin(x)+cos(x);%,進行多條曲線描點作圖,19/67,Plot,基本繪圖,-2(II),Plot(x,sin(x),x,cos(x),x,sin(x)+cos(x);,畫出多條曲線時,會自動輪換曲線顏色,20/67,Plot,基本繪圖,-3(I),若要以不一样線標,(Marker),來作圖,範例:,x=linspace(0,2*pi);%,在,0,到,2,間,等分取,100,個點,plot(x,sin(x),o,x,cos(x),x,x,sin(x)+cos(x),*);,21/67,Plot,基本繪圖,-3(II),22/67,Plot,基本繪圖,-4(I),只給定一個矩陣,y,對矩陣,y,每一個行向量,(Column Vector),作圖,範例:,y=peaks;%,產生一個,4949,矩陣,plot(y);%,對矩陣,y,每一個行向量作圖,23/67,Plot,基本繪圖,-4(II),peaks,指令產生一個,4949,矩陣,代表二維函數值,plot(y),直接畫出,49,條直線,類似於從側面觀看,peaks,函數,24/67,基本二維繪圖指令,指令,說明,Plot,x,軸和,y,軸均為線性刻度,(Linear Scale),loglog,x,軸和,y,軸均為對數刻度,(Logarithmic Scale),semilogx,x,軸為對數刻度,,y,軸為線性刻度,semilogy,x,軸為線性刻度,,y,軸為對數刻度,plotyy,畫出兩個刻度不一样y軸,25/67,圖形控制,plot,指令,能够接收一個控制字串輸入,用以控制曲線顏色、格式及線標,使用語法,plot(x,y,CLM),C,:曲線顏色,(Colors),L,:曲線格式,(Line Styles),M,:曲線所用線標,(Markers),26/67,圖形控制範例,-1(I),用黑色點線畫出正弦波,每一資料點畫上一個小菱形,範例:,x=0:0.5:4*pi;%x,向量起始與結束元素為,0,及,4,,,%0.5,為各元素相差值,y=sin(x);,plot(x,y,k:diamond)%,其中,k,代表黑色,:代表點,%,線,而,diamond,則指定菱形為曲,%,線線標,27/67,圖形控制範例,-1(II),28/67,plot,指令曲線顏色,Plot指令曲線顏色字串,曲線顏色,RGB,值,b,藍色,(Blue),(0,0,1),c,青藍色,(Cyan),(0,1,1),g,綠色,(Green),(0,1,0),k,黑色,(Black),(0,0,0),m,紫黑色,(Magenta),(1,0,1),r,紅色,(Red),(1,0,0),w,白色,(1,1,1),y,黃色,(Yellow),(1,1,0),29/67,Subplot,subplot,在一個視窗產生多個圖形,(,圖軸,),普通形式為,subplot,(m,n,p),將視窗分為,m n,個區域,下一個,plot,指令繪圖於第,p,個區域,p,算法為由左至右,一列一列,30/67,圖軸控制範例,-4(I),同時畫出四個圖於一個視窗中,範例:,x=0:0.1:4*pi;,subplot(2,2,1);plot(x,sin(x);%,此為左上角圖形,subplot(2,2,2);plot(x,cos(x);%,此為右上角圖形,subplot(2,2,3);plot(x,sin(x).*exp(-x/5);%,此為左下角圖形,subplot(2,2,4);plot(x,x.2);%,此為右下角圖形,31/67,圖軸控制範例,-4(II),Subplot(2,2,1),Subplot(2,2,3),Subplot(2,2,2),Subplot(2,2,4),32/67,圖軸控制範例,-5(I),長寬比,(Aspect Ratio),普通圖軸長寬比是視窗長寬比,可在,axis,指令後加不一样字串來修改,範例:,t=0:0.1:2*pi;,x=3*cos(t);,y=sin(t);,subplot(2,2,1);plot(x,y);axis normal,subplot(2,2,2);plot(x,y);axis square,subplot(2,2,3);plot(x,y);axis equal,subplot(2,2,4);plot(x,y);axis equal tight,33/67,圖軸控制範例,-5(II),axis normal,axis equal,axis square,axis square tight,34/67,改變圖軸長寬比指令,改變当前圖軸長寬比指令,需在,plot,指令之後呼叫才能發揮效用,指令,說明,axis normal,使用預設長寬比,(,等於圖形長寬比,),axis square,長寬百分比為 1,axis equal,長寬百分比不變,但兩軸刻度一致,axis equal tight,兩軸刻度百分比一致,且圖軸貼緊圖形,axis image,兩軸刻度百分比一致(適用於影像顯示),35/67,加入說明文字,在圖形或圖軸加入說明文字,增進整體圖形可讀性,指令,說明,title,圖形標題,xlabel,x 軸說明,ylabel,y 軸說明,zlabel,z 軸說明(適用於立體繪圖),legend,多條曲線說明,text,在圖形中加入文字,gtext,使用滑鼠決定文字位置,36/67,說明文字範例,-1(I),範例:,subplot(1,1,1);,x=0:0.1:2*pi;,y1=sin(x);,y2=exp(-x);,plot(x,y1,-*,x,y2,:o);,xlabel(t=0 to 2pi);,ylabel(values of sin(t)and e-x),title(Function Plots of sin(t)and e-x);,legend(sin(t),e-x);,37/67,說明文字範例,-1(II),legend,指令,畫出一小方塊,包含每條曲線說明,為特殊符號,產生上標、下標、希臘字母、數學符號等,遵照普通,LaTex,或,TeX,數學模式,38/67,說明文字範例,-2(I),text,指令,使用語法:,text(x,y,string),x,、,y,:文字起始座標位置,string,:代表此文字,範例:,x=0:0.1:2*pi;,plot(x,sin(x),x,cos(x);,text(pi/4,sin(pi/4),leftarrow sin(pi/4)=0.707);,text(5*pi/4,cos(5*pi/4),cos(5pi/4)=-0.707rightarrow,HorizontalAlignment,right);,39/67,說明文字範例,-2(II),HorizontalAlignment,及,right,指示,text,指令將文字向右水平靠齊,40/67,矩陣,41/67,矩陣索引或下標,矩陣,A,中,位於第,i,橫列、第,j,直行元素可表示為,A(i,j),i,與,j,即是此元素下標(,Subscript,)或索引(,Index,),MATLAB,中,全部矩陣內部表示法都是以直行為主一維向量,A(i,j),和,A(i+(j-1)*m),是完全一樣,m,為矩陣,A,列數,我們能够使用一維或二維下標來存取矩陣,42/67,矩陣索引或下標,43/67,矩陣索引或下標,能够使用矩陣下標來進行矩陣索引(,Indexing,),A(4:5,2:3)-,取出矩陣,A,第四、五 橫列與 二、三 直行所形成部份矩陣,A(9 14;10 15)-,用一維下標方式來達到同樣目标,用冒號,(,:,),取出一整列或一整行,A(:,5)-,取出矩陣,A,第五個直行,用,end,這個保留字來代表某一維度最大值,A(:,end)-,矩陣,A,最後一個直行,能够直接刪除矩陣某一整個橫列或直行,A(2,:)=,刪除,A,矩陣第二列,A(:,2 4 5)=-,刪除,A,矩陣第二、四、五直行,44/67,特殊用途矩陣,產生各種特殊用途矩陣好用指令,:,指令,說明,zeros(m,n),產生維度為 mn,構成元素全為 0 矩陣,ones(m,n),產生維度為 mn,構成元素全為 1 矩陣,eye(n),產生維度為 nn,對角線各元素全為 1,其它各元素全為 0 單位矩陣,pascal(m,n),產生維度為 mn Pascal 矩陣,vander(m,n),產生維度為 mn Vandermonde 矩陣,hilb(n),產生維度為 nn Hilbert 矩陣,rand(m,n),產生 0,1 均勻分佈亂數矩陣,其維度為 mn,randn(m,n),產生 =0,=1 正規分佈亂數矩陣,其維度為 mn,magic(n),產生維度為 nn 魔方陣,其各個直行、橫列及兩對角線元素和都相等,45/67,矩陣數學運算,矩陣加減與普通純量(,Scalar,)加減類似,相加或相減矩陣必需含有相同維度,範例,:,C=,13 37 58 24,矩陣與純量能够直接進行加減,,MATLAB,會直接將加減應用到每一個元素,A=1 2 3 2 1+5,A=,6 7 8 7 6,A=12 34 56 20;,B=1 3 2 4;,C=A+B,46/67,矩陣乘法與除法,純量對矩陣乘或除,可比照普通寫法,A=123,442;,C=A/3,B=2*A,C=,B=41.0000 147.3333,246 884,欲進行矩陣相乘,必需確認第一個矩陣直行數目(,Column Dimension,)必需等於第二個矩陣橫列數目(,Row Dimension,),範例,:,C=,3 4 5,6 8 10,矩陣除法,常藉由反矩陣或解線性方程式來達成,A=1;2;,B=3,4,5;,C=A*B,47/67,矩陣次方運算,矩陣次方運算,可由,來達成,但矩陣必需是方陣,其次方運算才有意義,範例,9-14:matrix14.m,B=,91 67 67,67 91 67,67 67 91,在,*,,,/,及,之前加上一個句點,,MATLAB,將會執行矩陣內元素對元素,(,Element-by-element,)運算,A=magic(3);,B=A2,A=12;45;,B=2;3;,C=A.*B%注意*前面句點,D=A./B%注意/前面句點,E=A.2%注意前面句點,48/67,音訊讀寫與錄放,49/67,音訊基本介紹,聲音訊號(,Audio Signal,)簡稱音訊,泛指由人耳聽到各種聲音訊號。音訊有些基本特質,可說明以下:,音量(,Volume,):聲音大小稱為音量,又稱為力度、強度(,Intensity,)或是能量(,Energy,)。音量越大,代表音訊波形震幅越大。,音高(,Pitch,):聲音基本頻率(,Fundamental Frequency,)越高,代表音高越高(比如女高音歌聲);反之,聲音基本頻率越低,代表音高越低(比如男低音歌聲)。,音色(,Timbre,):音訊波形在每個週期內變化,就形成了此音訊音色。不一样音色即代表不一样音訊內容,比如不一样字有不一样發音,或是每個歌手都有他們各自特色,這些都是由於音色不一样。,50/67,WAV,檔案讀取範例之一,比如,若要讀取檔案,welcome.wav,,畫出音訊波形並播放出此音訊,可使用以下程式:,範例:,y,fs=wavread(welcome.wav);,sound(y,fs);%,播放此音訊,time=(1:length(y)/fs;%,時間軸向量,plot(time,y);%,畫出時間軸上波形,51/67,WAV,檔案讀取範例之一,執行結果,:,波形圖,52/67,WAV,檔案讀取範例之二,若要知道,welcome.wav,取樣點是由多少個位元來表示,可使用,y,fs,nbits=wavread(welcome.wav),。若要知道音訊長度,則可使用,length(y)/fs,。以下範例能够印出音訊檔,welcome.wav,各種相關資訊:,範例:,fileName=welcome.wav;,y,fs,nbits=wavread(fileName);,fprintf(,音訊檔案,%s,資訊:,n,fileName);,fprintf(,音訊長度,=%g,秒,n,length(y)/fs);,fprintf(,取樣頻率,=%g,取樣點,/,秒,n,fs);,fprintf(,解析度,=%g,位元,/,取樣點,n,nbits);,53/67,WAV,檔案讀取範例之二,範例執行結果,:,音訊檔案,welcome.wav,資訊:,音訊長度,=1.45134,秒,取樣頻率,=11025,取樣點,/,秒,解析度,=8,位元,/,取樣點,54/67,WAV,檔案讀取範例之三,wavread,也能够讀取雙聲道或立體聲(,Stereo,)音訊檔案,此時傳回變數為含有兩直行陣列,每一直行代表一個聲道音訊,比如:,範例:,fileName=flanger.wav;,y,fs=wavread(fileName);%,讀取音訊檔,sound(y,fs);%,播放音訊,left=y(:,1);%,左聲道音訊,right=y(:,2);%,右聲道音訊,subplot(2,1,1),plot(1:length(left)/fs,left);,subplot(2,1,2),plot(1:length(right)/fs,right);,55/67,WAV,檔案讀取範例之三,此範例會讀取雙聲道音訊檔,flanger.wav,,播放此雙聲道音訊,並畫出兩個聲道音訊波形以下:,56/67,WAV,檔案讀取範例之四,假如音訊檔案很大,無法一次讀入記憶體,我們也能够使用,wavread,來讀出音訊檔其中一部份,比如:,範例:,y,fs=wavread(welcome.wav,4001 5000);%,讀取第,4001,至,5000,點,figure;plot(y),57/67,WAV,檔案讀取範例之四,畫出之圖形以下:,58/67,聲音訊號播放,一旦我們能够讀入,wav,檔案,就能够對聲音訊號進行各種處理,比如增大或減小音量、提升或降低音高、消除雜訊等。要確認處理後聲音訊號是否符合所需,就要能夠把音訊直接透過,PC,喇叭播放出來,本節就是要介紹怎样使用,MATLAB,來進行音訊播放。,59/67,WAV,檔案播放範例之一,在前一節中,我們已經知道怎样讀,wav,檔案,一旦,MATLAB,讀入音訊資料,並將之設定成工作空間中變數後,我們就能够使用,wavplay,指令來直接播放此變數。比如:,範例:,load handel.mat%,載入儲存於,handel.mat,音訊,wavplay(y,Fs);%,播放此音訊,60/67,WAV,檔案播放範例之二,我們在第一節提到過,聲音音量是由聲波震幅來決定,所以我們可藉由震幅大小來改變音量,比如:,範例:,y,fs=wavread(welcome.wav);,wavplay(1*y,fs,sync);%,播放,1,倍震幅音訊,wavplay(3*y,fs,sync);%,播放,2,倍震幅音訊,wavplay(5*y,fs,sync);%,播放,3,倍震幅音訊,61/67,WAV,檔案播放範例之三,假如在播放時,改變取樣頻率,就會改變整個音訊時間長度,進而影響到音高。在下例中,我們漸漸提升播放時取樣頻率,聽到聲音就會越來越快、越來越高,最後出現像唐老鴨聲音:,範例:,y,fs=wavread(welcome.wav);,wavplay(y,1.0*fs,sync);%,播放,1.0,倍速度音訊,wavplay(y,1.2*fs,sync);%,播放,1.2,倍速度音訊,wavplay(y,1.5*fs,sync);%,播放,1.5,倍速度音訊,wavplay(y,2.0*fs,sync);%,播放,2.0,倍速度音訊,62/67,聲音訊號錄製,我們在第一節已經說明了怎样讀取,wav,檔案,並在第二節說明怎样播放。,MATLAB,也支援直接由麥克風讀取訊號,所以能够直接進行聲音錄製,所使用指令是,wavrecord,,其基本格式為,:,y=wavrecord(n,fs),63/67,WAV,檔案錄製範例之一,y=wavrecord(n,fs),代表由微軟視窗系統音訊輸入裝置(即麥克風)讀入,n,點資料,取樣頻率是,fs,,並將此音訊資料儲存於變數,y,。舉例來說:,範例:,fs=11025;%,取樣頻率,duration=2;%,錄音時間,fprintf(,按任意鍵後開始,%g,秒錄音:,duration);pause,fprintf(,錄音中,.);,y=wavrecord(duration*fs,fs);%duration*fs,是錄音資料點數,fprintf(,錄音結束,n);,fprintf(,按任意鍵後開始播放:,);pause,wavplay(y,fs);,64/67,Homework,65/67,Homework,錄製一段音檔,不超過五秒,並存成,wav,檔。,請讀入,test.wav,,,downsample by 2,後再播放。,請讀入,test.wav,,,upsample by 2,,最後再播放。,請讀入,test.wav,,將這段音訊前後反轉後再播放。,66/67,繳交作業規範,matlab,檔,(.m),和說明文件,(.doc),上傳至,FTP(,另行公布在,blog),請用,cell mode,將全部題目都寫在同一個,.m,檔裡。,繳交期限,:4/12(,二,)PM 11:00,67/67,
展开阅读全文