MATLAB軟件的從入門到精通_第1頁
MATLAB軟件的從入門到精通_第2頁
MATLAB軟件的從入門到精通_第3頁
MATLAB軟件的從入門到精通_第4頁
MATLAB軟件的從入門到精通_第5頁
已閱讀5頁,還剩61頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、目錄前言.1第一章MATLAB基礎(chǔ)知識(shí)1第二章MATLAB基本數(shù)值運(yùn)算4第三章MATLAB的圖形處理功能8第四章MATLAB的程序設(shè)計(jì)11第五章常用數(shù)字信號(hào)處理函數(shù)16第六章MATLAB在數(shù)字信號(hào)處理中的應(yīng)用23實(shí)驗(yàn)一 常見離散信號(hào)的MATLAB產(chǎn)生和圖形顯示33實(shí)驗(yàn)二 離散系統(tǒng)的頻率響應(yīng)分析和零、極點(diǎn)分布37實(shí)驗(yàn)三 序列線性卷積、圓周卷積的計(jì)算及其關(guān)系的研究39實(shí)驗(yàn)四 利用DFT分析信號(hào)的頻譜41實(shí)驗(yàn)五 信號(hào)時(shí)間尺度變換的研究43實(shí)驗(yàn)六 快速傅里葉變換及其應(yīng)用47實(shí)驗(yàn)七 IIR濾波器的實(shí)現(xiàn)與應(yīng)用56實(shí)驗(yàn)八 FIR濾波器的實(shí)現(xiàn)與應(yīng)用6165前言數(shù)字信號(hào)處理研究數(shù)字序列信號(hào)的表示方法,并對(duì)信號(hào)進(jìn)

2、行運(yùn)算,以提取包含在其中的特殊信息。近年來,由于在研究及應(yīng)用兩方面均取得了進(jìn)展,數(shù)字信號(hào)處理領(lǐng)域已經(jīng)日趨成熟。本課程以計(jì)算機(jī)為工具,通過一定量的實(shí)驗(yàn)項(xiàng)目,以驗(yàn)證所學(xué)的概念和算法。由于MATLAB軟件的功能十分強(qiáng)大,使用起來也非常方便,在工程技術(shù)中尤其是信號(hào)處理領(lǐng)域得到了廣泛的應(yīng)用,因此以MATLAB作為本計(jì)算機(jī)實(shí)驗(yàn)課的計(jì)算機(jī)語言工具。希望大家通過本教材的學(xué)習(xí)及上機(jī)實(shí)踐,能基本掌握MATLAB程序設(shè)計(jì)知識(shí),能利用MATLAB進(jìn)行簡(jiǎn)單的數(shù)字信號(hào)處理問題,利用其提供的工具箱能進(jìn)行濾波器的設(shè)計(jì),為理論知識(shí)的實(shí)用化而奠定基礎(chǔ)。第一章 MATLAB基礎(chǔ)知識(shí)§1-1 MATLAB軟件簡(jiǎn)介MATLA

3、B,Matrix Laboratory的縮寫,是由Mathworks公司開發(fā)的一套用于科學(xué)工程計(jì)算的可視化高性能語言,具有強(qiáng)大的矩陣運(yùn)算能力。它集數(shù)值分析、矩陣運(yùn)算、信號(hào)處理和圖形顯示于一體,構(gòu)成了一個(gè)界面友好的用戶環(huán)境,在這個(gè)環(huán)境中,問題與求解都能方便地以數(shù)學(xué)的語言(主要是矩陣形式)或圖形方式表示出來。與大家常用的Fortran 和C等高級(jí)語言相比,MATLAB的語法規(guī)則更簡(jiǎn)單,更貼近人的思維方式,被稱為“草稿紙式的語言”。§1-2 MATLAB應(yīng)用入門1 MATLAB的安裝與卸載MATLAB軟件在用戶接口時(shí)具有較強(qiáng)的親和力,其安裝過程比較典型,直接運(yùn)行光盤中的安裝向?qū)е纬绦騍E

4、TUP.exe,按其提示一步步選擇即可。MATLAB自身帶有卸載程序,在其安裝目錄下有uninstall子目錄,運(yùn)行該目錄下uninstall.exe的即可;也可以通過Windows系統(tǒng)的安裝卸載程序進(jìn)行卸載。 2 MATLAB的啟動(dòng)與退出MATLAB安裝完成后,會(huì)自動(dòng)在Windows桌面上生成一個(gè)MATLAB圖標(biāo),它是指向安裝目錄下binwin32matlab.exe的鏈接,雙擊這個(gè)圖標(biāo)即可來到MATLAB集成環(huán)境的基本窗口;也可以在開始菜單的程序選項(xiàng)中選擇MATLAB快捷方式;還可以在MATLAB的安裝路徑的bin子目錄中雙擊可執(zhí)行文件matlab.exe。MATLAB的退出與普通WIN3

5、2的程序一樣,值得一提的是它有一個(gè)自身專有的快捷鍵Ctrl+Q。初次啟動(dòng)MATLAB后,將進(jìn)入MATLAB默認(rèn)設(shè)置下的桌面平臺(tái)如圖1-1所示。圖1-1 MATLAB默認(rèn)設(shè)置下的桌面平臺(tái)3 MATLAB的桌面平臺(tái)默認(rèn)設(shè)置下的桌面平臺(tái)包括6個(gè)窗口,分別是MATLAB主窗口、命令窗口(Command Window)、歷史窗口Command History)、當(dāng)前目錄窗口Current Directory)、發(fā)行說明書窗口(Launch Pad)和工作間管理窗口(Workspace)。31 MATLAB主窗口MATLAB的其它幾個(gè)窗口都包含在這個(gè)大的主窗口中,主窗口不能進(jìn)行任何計(jì)算任務(wù)的操作,只用來進(jìn)

6、行一些整體的環(huán)境參數(shù)的設(shè)置。主要包括菜單欄(File、Edit、View、Web、Window和Help共6個(gè)下拉菜單)、工具欄(10個(gè)按鈕控件)等。工具欄各按鈕控件及說明如下所示:32 命令窗口(Command Window)MATLAB的命令窗口如圖1-2所示。其中“”為運(yùn)算提示符,表示MATLAB正處在準(zhǔn)備狀態(tài)。當(dāng)在提示符后輸入一段運(yùn)算式或命令并按Enter鍵后,MATLAB將給出計(jì)算結(jié)果,然后再進(jìn)入準(zhǔn)備狀態(tài)。圖1-2 MATLAB的命令窗口33 MATLAB常用命令MATLAB有一些嵌入函數(shù),有時(shí)應(yīng)用這些函數(shù)可以起到事半功倍的效果。MATLAB常用的控制命令見表1-1。表1-1:MAT

7、LAB常用命令命令功能cd顯示或改變當(dāng)前工作目錄,與工具欄中同效dir列出當(dāng)前目錄或指定目錄下的文件和子目錄清單,類似于DOS命令DIRclc、home的所有顯示內(nèi)容,并把光標(biāo)移到命令窗口的左上角clf清除MATLAB當(dāng)前圖形窗口中的圖形clear清除內(nèi)存中的變量和函數(shù)disp顯示變量的內(nèi)容type列出指定文件的全部?jī)?nèi)容,類似于DOS命令TYPEexit、quit退出MATLABwho列出當(dāng)前工作空間中的變量whos列出當(dāng)前工作空間中的變量的更多信息what列出當(dāng)前目錄或指定目錄下的 .M文件、.MAT文件和 .MEX文件which顯示指定函數(shù)或文件的路徑lookfor按照指定的關(guān)鍵字查找所有

8、相關(guān)的 .M文件第二章 MATLAB基本數(shù)值運(yùn)算§2-1 MATLAB內(nèi)部特殊變量和常數(shù)MATLAB內(nèi)部有很多變量和常數(shù),用以表達(dá)特殊含義。常用的有: 變量ans:指當(dāng)前未定義變量名的答案。 常數(shù)eps:表示浮點(diǎn)相對(duì)精度,其值是從1.0到下一個(gè)最大浮點(diǎn)數(shù)之間的差值。該變量值作為一些MATLAB函數(shù)計(jì)算的相對(duì)浮點(diǎn)相對(duì)精度,按IEEE標(biāo)準(zhǔn),eps=2-52,近似為2.2204e-016。 常數(shù)Inf:表示無窮大。當(dāng)輸入或計(jì)算中有除以0時(shí)產(chǎn)生Inf。 虛數(shù)單位i、j:表示復(fù)數(shù)虛部單位,相當(dāng)于。 NaN:表示不定型值,是由0/0運(yùn)算產(chǎn)生的。 常數(shù)pi:表示圓周率,其值為3.141 592 6

9、53 589 7。§2-2 變量類型1變量命名規(guī)則MATLAB中對(duì)變量的命名應(yīng)遵循以下規(guī)則:1) 變量名可以由字母、數(shù)字和下劃線混合組成,但必須以字母開頭。2) 字符長(zhǎng)度不能大于31。3) 變量命名區(qū)分大小寫。2 局部變量和全局變量局部變量是指那些每個(gè)函數(shù)體內(nèi)自己定義的,不能從其它函數(shù)和MATLAB工作空間訪問的變量。全局變量是指用關(guān)鍵字“global”聲明的變量。全局變量名應(yīng)盡量大寫,并能反映它本身的含義。如果需要在工作空間和幾個(gè)函數(shù)中都能訪問一個(gè)全局變量,必須在工作空間和這幾個(gè)函數(shù)中都聲明該變量是全局的。§2-3 向量及其運(yùn)算向量運(yùn)算是矢量運(yùn)算的基礎(chǔ),向量也是組成矩陣的

10、基本元素之一。1 向量的生成11 直接輸入向量生成向量最直接的方法就是在命令窗口中直接輸入。格式上的要求是,向量元素需要用“ ”括起來,元素之間可以用空格、逗號(hào)或分號(hào)分隔;需要注意的是,用空格和逗號(hào)分隔生成行向量,用分號(hào)分隔生成列向量。例 A=1,2,3 或A=1 2 3 %生成行向量 A=1;2;3 %生成列向量12 利用冒號(hào)表達(dá)式生成向量冒號(hào)表達(dá)式的基本形式為x=x0:step:xn,其中x0、step、xn分別為給定數(shù)值,x0表示向量的首元素?cái)?shù)值,xn表示向量尾元素?cái)?shù)值限(只有當(dāng)xn- x0恰為step值的整數(shù)倍時(shí), xn才能成為尾數(shù)),step表示從第二個(gè)元素開始,元素?cái)?shù)值大小與前一個(gè)

11、元素?cái)?shù)值大小的差值。例 在命令窗口,給向量a、b、c賦值。 >> a=1:2:12a = 1 3 5 7 9 11>> b=12:-2:1b = 12 10 8 6 4 2>> c=1:2:13c = 1 3 5 7 9 11 1313 特殊向量的生成對(duì)于特殊的向量可直接調(diào)用MATLAB的函數(shù)生成。如y=linsoace(x1,x2,n)用于生成線性等分的n維行向量,使得y(1)=x1,y(n)=x2。另外,向量還可以從矩陣中提取,還可以把向量看成是1×n階(行向量)或n×1階(列向量)的矩陣,以矩陣形式生成。2 向量的基本運(yùn)算21 加(

12、減)與數(shù)乘計(jì)算例 >> a=1,2,3,4;b=0,1,2,3;c=a-bc = 1 1 1 1>> d=a-3d = -2 -1 0 1>> 4*aans = 4 8 12 1622 對(duì)位乘、點(diǎn)積計(jì)算同維向量a與b的對(duì)位乘用c=a.*b實(shí)現(xiàn),即c的每一個(gè)元素之值是a與b對(duì)應(yīng)元素的乘積。同維向量a與b的點(diǎn)積,一個(gè)方法是利用函數(shù)dot來實(shí)現(xiàn);另一種方法是先生成a與b的對(duì)位乘向量c, 再取c的各元素和即為a與b的點(diǎn)積。例 >> a.*bans = 0 2 6 12>> dot(a,b) %或sum(a.*b)ans = 20§2

13、-4 矩陣及其運(yùn)算MATLAB具有強(qiáng)大的矩陣運(yùn)算和數(shù)據(jù)處理功能,對(duì)矩陣的處理必須遵從代數(shù)規(guī)則。1 矩陣的生成(1)一般矩陣的生成對(duì)于一般的矩陣,MATLAB的生成方法有很多種。最簡(jiǎn)單的方法是從鍵盤直接輸入矩陣元素。直接輸入矩陣元素時(shí)應(yīng)注意:各行的元素之間用空格或逗號(hào)隔開,行與行之間用分號(hào)或回車隔開,用中括號(hào)把矩陣所有的元素括起來。例 在工作空間產(chǎn)生一個(gè)3×3矩陣A可用MATLAB語言描述如下:A=1,2,3;4,5,6;7,8,9或 A= 1 2 34 5 6 7 8 9運(yùn)行結(jié)果為A= 1 2 34 5 67 8 9(2)特殊矩陣的生成對(duì)于特殊的矩陣可直接調(diào)用MATLAB的函數(shù)生成用

14、函數(shù)zeros生成全0矩陣:格式為B=zeros(m,n)生成m×n的全0陣。用函數(shù)ones生成全1矩陣:格式為B=ones(m,n)生成m×n的全1陣。用函數(shù)eye生成單位陣:格式為B=eye(m,n)生成m×n矩陣,其中對(duì)角線元素全為1,其它元素為0。2矩陣的運(yùn)算矩陣的運(yùn)算有基本運(yùn)算和函數(shù)運(yùn)算兩種類型?;具\(yùn)算包括矩陣的加、減、乘、除、冪、轉(zhuǎn)置、逆等,其主要特點(diǎn)是通過MATLAB提供的基本運(yùn)算符+、*、/、等即可完成。函數(shù)運(yùn)算主要是通過調(diào)用MATLAB系統(tǒng)內(nèi)置的運(yùn)算函數(shù)來求取矩陣的,求秩,求特征值和特征相量,等等。需要時(shí)可以參閱聯(lián)機(jī)幫助和相關(guān)參考書。例 矩陣的

15、基本運(yùn)算>> a=1,2,3;4,5,6;>> b=6,5,4;3,2,1;>> c=a+b %計(jì)算兩個(gè)矩陣的和c =7 7 77 7 7>> d=b' %計(jì)算矩陣b的轉(zhuǎn)置d = 6 35 24 1>> e=a*d %做矩陣的乘法,必須滿足矩陣乘法的基本要求e =28 1073 28>> f=det(e) %求矩陣e的行列式f =54>> g=e(-1) %求矩陣e的逆g = 0.5185 -0.1852-1.3519 0.5185 第三章 MATLAB的圖形處理功能 從最原始版本的MATLAB開始,圖

16、形功能就已經(jīng)成為基本的功能之一。隨著MATLAB版本的逐步升級(jí),MATLAB的圖形工具箱從簡(jiǎn)單的點(diǎn)、線、面處理發(fā)展到了集二維圖形、三維圖形甚至四維表現(xiàn)圖和對(duì)圖形進(jìn)行著色、消隱、光照處理、渲染及多視角處理等多項(xiàng)功能于一身的強(qiáng)大功能包。這里只簡(jiǎn)單討論二維基本繪圖命令及圖形修飾命令。常用的繪圖語句有figure、plot、subplot、stem等,圖形修飾語句有title、axis、text等。1figure命令figure有兩種用法,只用一句figure命令,會(huì)創(chuàng)建一個(gè)新的圖形窗口,并返回一個(gè)整數(shù)型的窗口編號(hào)。figure(n)表示將第n號(hào)圖形窗口作為當(dāng)前的圖形窗口,并將其顯示在所有窗口的最前面

17、;如果該圖形窗口不存在,則新建一個(gè)窗口,并賦以編號(hào)n。2 plot命令線性繪圖函數(shù)。用法為plot(x, y,s)。參數(shù)x為橫軸變量,y為縱軸變量,s用以控制圖形的基本特征如顏色、粗細(xì)等的圖形設(shè)置選項(xiàng),通??梢允÷?。MATLAB語言中提供的圖形控制符如表3-1所示。表3-1:MATLAB語言中的圖形設(shè)置選項(xiàng)參數(shù)含義參數(shù)含義參數(shù)含義y黃色·點(diǎn)實(shí)線m紫色O圓:虛線c青色×打叉·點(diǎn)劃線g綠色+加號(hào)-破折線b藍(lán)色*星號(hào)向上的三角形w白色s正方形<向左的三角形k黑色d菱形>向右的三角形r紅色v向下的三角形p五角星形3stem命令繪制離散序列圖,常用格式為stem

18、(x)和stem(x,y)分別和相應(yīng)的plot函數(shù)的繪圖規(guī)則相同,只是用stem命令繪制的是離散序列圖。4subplot命令subplot(m,n,i)圖形顯示時(shí)分割窗口命令,把一個(gè)圖形窗口分為m行,n列,m×n個(gè)小窗口,并指定第i個(gè)小窗口為當(dāng)前窗口。5坐標(biāo)軸標(biāo)注MATLAB中提供了許多關(guān)于坐標(biāo)軸標(biāo)注的函數(shù),常用的函數(shù)有title、xlabel、ylabel等。其中,函數(shù)title是為圖形添加標(biāo)題,并將標(biāo)題置于圖形的頂部;而xlabel、ylabel是為x、y坐標(biāo)軸添加標(biāo)注,并分別將標(biāo)注置于相應(yīng)的坐標(biāo)軸的邊上。這三個(gè)函數(shù)的調(diào)用格式是大同小異的,這里僅以title為例介紹它們的調(diào)用格式

19、。title(標(biāo)記)其中,標(biāo)記可以文字,也可以是數(shù)學(xué)表達(dá)式。6文本標(biāo)注MATLAB語言對(duì)圖形進(jìn)行文本注釋所提供的為text。它的調(diào)用格式為text (x, y,文本)其中,(x, y)給定標(biāo)注文本在圖中添加的位置。7圖例標(biāo)注在數(shù)值計(jì)算結(jié)果的繪圖中,經(jīng)常會(huì)出現(xiàn)在同一張圖形中繪制多條曲線的情況,為了能更好地區(qū)分各條曲線,MATLAB語言提供了圖例標(biāo)注函數(shù)legend。它能為圖形中所有的曲線進(jìn)行自動(dòng)標(biāo)注,以其輸入變量作為標(biāo)注文本,具體的調(diào)用格式為legend(標(biāo)注1,標(biāo)注2,)這里的標(biāo)注1、標(biāo)注2等分別對(duì)應(yīng)繪圖過程中按先后順序所生成的曲線。8坐標(biāo)軸的控制函數(shù)axis函數(shù)axis用來控制坐標(biāo)軸的刻度范

20、圍及顯示形式。其最簡(jiǎn)單的調(diào)用格式為axis(xmin,xmax,ymin,ymax)即繪圖時(shí)變量xxmin,xmax,變量yymin,ymax。 例 繪制信號(hào)圖形。 % fun0.m 定義文件名 x=0:0.1*pi:2*pi; %定義x向量figure(1); %創(chuàng)建一個(gè)新的圖形窗口,編號(hào)為1subplot(2,2,1); %將窗口劃分為2行,2列,在第一個(gè)窗口中作圖plot(x,sin(x); %畫圖title('正弦線'); %給圖形加標(biāo)題subplot(2,2,2); %在第二個(gè)窗口中作圖plot(x,sin(x),'r') ; %畫一正弦波紅色xlab

21、el('X'); %給軸加說明ylabel('SIN(X)'); %給軸加說明subplot(2,2,3); %在第三個(gè)窗口中作圖plot(x,sin(x),'-',x,cos(x),'-.m*');%畫一正弦波破折線%畫一余弦波紫色點(diǎn)劃星線legend('SIN(X)','COS(X)'); %給圖形加圖例標(biāo)注subplot(2,2,4); %在第四個(gè)窗口中作圖plot(x,sin(x),'r+-'); %畫一正弦波紅色破折線text(4,0,'注記');以上內(nèi)容以

22、文件名fun0.m存盤,在MATLAB命令窗口中執(zhí)行>> fun0或?qū)⒁陨蟽?nèi)容直接在MATLAB命令窗口中鍵入并,得到結(jié)果如下:Fig.1第四章 MATLAB的程序設(shè)計(jì)MATLAB作為一種高級(jí)計(jì)算語言,它不僅可以如前面所介紹的那樣,以一種人機(jī)交互式的命令行的方式工作,還可以像BASIC、FORTRAN、C等其它高級(jí)計(jì)算機(jī)語言一樣進(jìn)行控制流的程序設(shè)計(jì),即編制一種以m為擴(kuò)展名的文件,簡(jiǎn)稱為M文件。而且, M文件的編寫具有語法簡(jiǎn)單、可讀性強(qiáng)、調(diào)試容易、調(diào)用方便等許多優(yōu)點(diǎn)。§4-1 M文件介紹1 M文件的特點(diǎn)與形式MATLAB實(shí)質(zhì)上是一種解釋性語言,就MATLAB本身來說,它并不

23、能做任何事情,它就像DOS操作系統(tǒng)的一樣,本身沒有實(shí)現(xiàn)功能而只對(duì)用戶發(fā)出的指令起解釋執(zhí)行的作用,即命令先送到MATLAB系統(tǒng)內(nèi)解釋,再運(yùn)行得到結(jié)果。因此用戶可以把所要實(shí)現(xiàn)的指令羅列編制成文件,再統(tǒng)一送入MATLAB系統(tǒng)中解釋運(yùn)行,這就是以m為擴(kuò)展名的M文件。用戶可以使用任何字處理軟件對(duì)其進(jìn)行編寫或修改。正是M文件的這個(gè)特點(diǎn)造就了MATLAB強(qiáng)大的可開發(fā)性和可擴(kuò)展性,Mathworks公司推出的一系列工具箱就是明證。由于商用的MATLAB軟件用C語言編寫而成,因此,M文件的語法與C語言的十分相似。對(duì)廣大的C語言愛好者來說,M文件的編寫是相當(dāng)容易的。M文件有兩種形式,即命令式和函數(shù)式。并且要注意&

24、#183;文件擴(kuò)展名一定為m。·標(biāo)點(diǎn)符號(hào)的運(yùn)用要恰到好處,建立好的書寫風(fēng)格,保持程序的可讀性。·以符號(hào)%引導(dǎo)的行是注釋行,不可執(zhí)行,可供help命令查詢;·不需要用end語句作為M文件的結(jié)束標(biāo)志;·在運(yùn)行此文件之前,需要把它所在目錄加到MATLAB的搜索路徑上去,或?qū)⑽募谀夸浽O(shè)為當(dāng)前目錄。2命令式文件命令式文件就是命令行的簡(jiǎn)單疊加,MATLAB會(huì)自動(dòng)按順序執(zhí)行文件中的命令,其運(yùn)行相當(dāng)于在命令窗口中逐行輸入并運(yùn)行命令,因此,用戶在編制此類文件時(shí),只需把所要執(zhí)行的命令按行編輯到指定的文件中,且變量不需預(yù)先定義,也不存在文件名對(duì)應(yīng)問題,也可以訪問存在于整個(gè)

25、工作空間內(nèi)的數(shù)據(jù)。但要注意·命令式文件在運(yùn)行中所產(chǎn)生的所有變量均為全局變量。也就是說,這些變量一旦生成,就一直保存在內(nèi)存空間中,直到用戶執(zhí)行clear或quit時(shí)為止。例 打開Medit窗口,編寫如下程序 x=1,3,4,7;y=sum(x)/length(x);以aver.m為文件名存盤。在命令窗口鍵入aver并回車即可運(yùn)行該程序。3函數(shù)式文件為了實(shí)現(xiàn)計(jì)算中的參數(shù)傳遞,需要用到函數(shù)式文件。函數(shù)式文件在MALTAB中應(yīng)用十分廣泛,MALTAB所提供的絕大多數(shù)功能函數(shù)都是由函數(shù)式文件實(shí)現(xiàn)的,這足以說明函數(shù)式文件的重要性。函數(shù)式文件的結(jié)構(gòu)為: function 輸出參數(shù)=函數(shù)名(輸入?yún)?shù)

26、)函數(shù)體 %注釋例 編制用于計(jì)算幾個(gè)數(shù)的平均值的函數(shù)。打開Medit窗口,編寫如下程序function y=lianxi(x)n=length(x);%確定向量x的維數(shù)if n=1 y=x;endif n>=2 y=sum(x)/n;end編寫完畢后,以lianxi.m存盤。函數(shù)式文件的標(biāo)志是第一行必為function語句。函數(shù)式文件可以有返回值如上例中的y,也可以只執(zhí)行操作而無返回值,大多數(shù)函數(shù)式文件有返回值。函數(shù)體是函數(shù)的主體部分,它包括進(jìn)行運(yùn)算和賦值的所有MALTAB程序代碼。函數(shù)體中可以包括流程控制、輸入/輸出、計(jì)算、賦值、注釋以及函數(shù)調(diào)用和命令文件調(diào)用等。在函數(shù)體中完成對(duì)輸出參

27、數(shù)的計(jì)算。函數(shù)式文件執(zhí)行后,只保留最后結(jié)果,不保留任何中間過程,所定義的變量也僅在函數(shù)內(nèi)部起作用,并隨調(diào)用的結(jié)果而被清除。函數(shù)調(diào)用的過程實(shí)際上就是參數(shù)的傳遞過程。例 調(diào)用函數(shù)lianxi.m計(jì)算20,50,90,100,40的平均值。在命令窗口鍵入如下命令并回車即可。 x =20,50,90,100,40; y=lianxi(x);該調(diào)用過程把變量x傳遞給了輸入?yún)?shù),然后把函數(shù)運(yùn)算的返回值傳給了輸出參數(shù)y。在編寫函數(shù)式文件時(shí),要特別注意函數(shù)中的·只有文件名與函數(shù)名一一對(duì)應(yīng),才能保證調(diào)用成功。·function后的語句定義函數(shù)名和輸入、輸出參數(shù),在函數(shù)被調(diào)用過程中將按此輸入、

28、輸出格式執(zhí)行。·要養(yǎng)成良好的注釋習(xí)慣,以方便自己或其它用戶的調(diào)用。§4-2 程序控制語句MALTAB的程序控制語句有循環(huán)語句、條件轉(zhuǎn)移語句兩種類型。1循環(huán)語句MALTAB的循環(huán)語句包括for循環(huán)和while循環(huán)兩種類型。(1)for循環(huán)語法格式:for 循環(huán)變量=起始值:步長(zhǎng):終止值 循環(huán)體end起始值和終止值為一整型數(shù),步長(zhǎng)可以為整數(shù)或小數(shù),省略步長(zhǎng)時(shí),默認(rèn)步長(zhǎng)為1。執(zhí)行for循環(huán)時(shí),判定循環(huán)變量的值是否大于(步長(zhǎng)為負(fù)時(shí)則判定是否小于)終止值,不大于(步長(zhǎng)為負(fù)時(shí)則不小于)則執(zhí)行循環(huán)體,執(zhí)行完畢后,再加上步長(zhǎng),這時(shí)循環(huán)變量的值若大于(步長(zhǎng)為負(fù)時(shí)則小于)終止值后退出循環(huán),否則

29、繼續(xù)。for循環(huán)最大的特點(diǎn)是,在一般情況下,此循環(huán)語句的循環(huán)次數(shù)是預(yù)先設(shè)定好的。例 給矩陣a賦值。function a=chuzhik=5;a=zeros(k,k);for m=1:k for n=1:k a(m,n)=1/(m+n-1); endend以chuzhi.m存盤。然后在MALTAB命令窗口中執(zhí)行以下命令>> a=chuzhi得到結(jié)果為:a = 1.0000 0.5000 0.3333 0.2500 0.2000 0.5000 0.3333 0.2500 0.2000 0.1667 0.3333 0.2500 0.2000 0.1667 0.1429 0.2500 0.

30、2000 0.1667 0.1429 0.1250 0.2000 0.1667 0.1429 0.1250 0.1111 說明:·for語句一定要有end作為結(jié)束標(biāo)志,否則下面的輸入都被認(rèn)為是for循環(huán)之內(nèi)的內(nèi)容。·循環(huán)語句中的分號(hào);可防止中間結(jié)果的輸出。(2)while循環(huán)語法格式: while 表達(dá)式 循環(huán)體end其執(zhí)行方式為:若表達(dá)式為真(運(yùn)算值非0),則執(zhí)行循環(huán)體;若表達(dá)式為假(運(yùn)算結(jié)果為0),則退出循環(huán)體,執(zhí)行end后的語句。while循環(huán)的特點(diǎn)是循環(huán)次數(shù)無法預(yù)先確定,因此在使用中要謹(jǐn)慎,以防止陷入死循環(huán)。例 >> a=3;b=0;while aa=a

31、-1;b=b+a;end>> bb = 3>> aa = 0同for循環(huán)比起來,while語句的判斷控制可以是一個(gè)邏輯判斷語句,因此它的適用范圍會(huì)更廣一些。例 >> a=7;b=1; c=0while (a>=1)&( b<=4) % a1與b4同時(shí)滿足時(shí)執(zhí)行循環(huán)體。a=a-1;b=b+2;c=3*a+2*b +c;end >> a,b,cans = 5 5 492條件轉(zhuǎn)移語句MATLAB中的條件轉(zhuǎn)移語句主要由if語句實(shí)現(xiàn),其用法與其它高級(jí)語言相類似,基本語法格式如下:if 表達(dá)式執(zhí)行語句1else執(zhí)行語句2end在執(zhí)行時(shí),首

32、先計(jì)算緊跟在關(guān)鍵字if后的表達(dá)式,若結(jié)果為真,則執(zhí)行語句;若結(jié)果為假,則執(zhí)行語句2。且else子句中可以嵌套if語句而形成elseif結(jié)構(gòu),從而實(shí)現(xiàn)多路選擇。例 欲實(shí)現(xiàn)一分段函數(shù)的計(jì)算。 。 function f=pdbsline(x)if x<0 f=0;elseif x<1 f=x;elseif x<2 f=2-x;else f=0;end以pdbsline.m存盤。然后在MALTAB命令窗口中執(zhí)行以下命令>> pdbsline (1.36)得到結(jié)果為:ans =0. 6400第五章 常用數(shù)字信號(hào)處理函數(shù) §5-1 波形發(fā)生器1基本信號(hào)序列的表示離散

33、時(shí)間信號(hào)是時(shí)間上不連續(xù)的“序列”,一般直接用x(n)表示。一個(gè)長(zhǎng)度為N的序列x(n)在MATLAB中可以用一個(gè)N維行向量或列向量表示。常用的基本信號(hào)序列產(chǎn)生如下:1) 單位抽樣序列 這一序列可用MATLAB中的zeros函數(shù)實(shí)現(xiàn)x=1,zeros(1,N-1);2) 單位階躍序列 這一序列可用MATLAB中的ones函數(shù)實(shí)現(xiàn)x=ones(1,N);3) 實(shí)指數(shù)序列 MATLAB實(shí)現(xiàn):n=0:N-1;x=a.n;4) 復(fù)指數(shù)序列 MATLAB實(shí)現(xiàn):n=0:N-1;x=exp(c+j*w)*n);5) 隨機(jī)序列rand(1,N)產(chǎn)生在0,1上均勻分布的長(zhǎng)度為N的隨機(jī)序列。randn(1,N)產(chǎn)生長(zhǎng)

34、度為N且均值為0方差為1的高斯隨機(jī)序列,即白噪聲序列。2基本波形的產(chǎn)生1)三角波或鋸齒波發(fā)生函數(shù):sawtooth()語法格式:sawtooth(t,width)。產(chǎn)生以2為周期幅值范圍在-1,+1之間的三角波或鋸齒波。參數(shù)t為時(shí)間向量;width是0,1之間的數(shù),它決定于函數(shù)在一個(gè)周期內(nèi)上升部分和下降部分的比例。width=0.5產(chǎn)生三角波,width=1產(chǎn)生鋸齒波,此時(shí)函數(shù)可簡(jiǎn)寫為sawtooth(t)。2)方波發(fā)生函數(shù)square()語法格式:square(t)。產(chǎn)生以2為周期幅值范圍在-1,+1之間的方波,參數(shù)t為時(shí)間向量。3)sinc發(fā)生函數(shù):sinc()語法格式:sinc(t) 例

35、 信號(hào)產(chǎn)生舉例function fun1clear allt=0:0.0001:0.1;figure(1);x1=sawtooth(2*pi*50*t); %在0,0.1時(shí)間內(nèi)產(chǎn)生5個(gè)周期的鋸齒波subplot(2,2,1)plot(t,x1)x2=sawtooth(2*pi*50*t,0.5);%在0,0.1時(shí)間內(nèi)產(chǎn)生5個(gè)周期的三角波subplot(2,2,2)plot(t,x2)x3=square(2*pi*50*t); %在0,0.1時(shí)間內(nèi)產(chǎn)生5個(gè)周期的方波subplot(2,2,3)plot(t,x3)axis(0,0.1,-1.2,1.2)t=-4:0.1:4;x4=sinc(t);

36、 %產(chǎn)生抽樣函數(shù)subplot(2,2,4)plot(t,x4)運(yùn)行結(jié)果如下:§5-2 序列的操作在數(shù)字信號(hào)處理中基本的序列運(yùn)算及其MATLAB實(shí)現(xiàn)如下表5-1所示:表5-1一些常用的序列運(yùn)算及其matlab實(shí)現(xiàn)序列運(yùn)算其MATLAB實(shí)現(xiàn)信號(hào)加x(n)=x1(n)+x2(n)x=x1+x2信號(hào)乘x(n)=x1(n)×x2(n)x=x1.*x2數(shù)乘y(n)=k×x(n)y=k*x折疊y(n)=x(-n)y=fliplr(x)抽樣和y=sum(x(n1:n2)抽樣積y=prod(x(n1:n2)信號(hào)能量Ex=sum(abs(x).2)信號(hào)功率Px=sum(abs(x)

37、.2)/n§5-3 常用數(shù)字信號(hào)處理函數(shù)對(duì)于線性離散系統(tǒng),其表達(dá)方式有多種:傳遞函數(shù)法 零極點(diǎn)增益法 帶余式的部分分式展開法 差分方程法 數(shù)字信號(hào)處理即研究信號(hào)通過系統(tǒng)后的變化,其中經(jīng)常用到的函數(shù)有:1 x=roots(a)欲求多項(xiàng)式y(tǒng)(z)=a0+a1z 1+a2z 2+ 的根,可用命令x=roots(a)來實(shí)現(xiàn),其中a=a0,a1,a2,是它的系數(shù)向量,x便是y(z)的根向量。例 求多項(xiàng)式y(tǒng)(z)=1-1.6z 1+0.65z 2-0.05z 3的根。編程運(yùn)行如下: >> a=1,-1.6,0.65,-0.05; x=roots(a)x = 1.0000 0.5000

38、0.1000 從而原多項(xiàng)式可表達(dá)為y(z)=(1-z 1)(1-0.5z 1)(1-0.1z 1)。 2 b=poly(x)欲求出y(z)=(z-x1)(z-x2)的多項(xiàng)式表達(dá),可用命令b=poly(x)來實(shí)現(xiàn),其中x=x1,x2,是它的根向量,b是欲求多項(xiàng)式的系數(shù)向量。例 某濾波器的零極點(diǎn)增益法表達(dá)式為,求其傳遞函數(shù)表達(dá)式。MATLAB程序及運(yùn)行結(jié)果如下:function a,b=fun2(x,y,k)b=k*poly(y); a=poly(x);>> y=0.1,0.5,1; x=0.3,2,5; k=1; b, a=fun2(y,x,k)b = 1.0000 -1.6000

39、0.6500 -0.0500a = 1.0000 -7.3000 12.1000 -3.0000從而濾波器的傳遞函數(shù)表達(dá)式為 。3r,p,k=residuez(b,a)由傳遞函數(shù)表達(dá)式求出帶余式的部分分式展開式時(shí)可用命令r,p,k=residuez(b,a) 來實(shí)現(xiàn),其中b、a分別是原系統(tǒng)傳遞函數(shù)表達(dá)式中的分子、分母系數(shù)向量,而r、p、k分別是該系統(tǒng)的帶余式的部分分式展開式中的系數(shù)向量。例 對(duì) 作部分分式展開。程序和顯示輸出如下:>> b=-4,8; a=1,6,8; r,p,k=residuez(b,a)r = -12 8p = -4 -2k = 這就是說,系統(tǒng)的部分分式展開形式

40、為:。4y(n)=conv(x,h)求兩個(gè)序列的線性卷積可直接采用命令y(n)=conv(x,h)來實(shí)現(xiàn)。其中特別要注意的是,函數(shù)conv默認(rèn)序列從n=0開始。若x(n):nx1nnx2,h(n):nh1nnh2,則卷積結(jié)果y(n):ny1nny2,其中ny1= nx1+ nh1,ny2= nx2+ ny2。例 已知x(n)=3,4,5,h(n)=2,6,7,8,求它們的線性卷積。>> x=3,4,5; h=2,6,7,8; n1=-1:1; n2=-1:2; y=conv(x,h) y =6 26 55 82 67 40>>nb3=n1(1)+n2(1); >&

41、gt;ne3=n1(length(x)+n2(length(h); >>n3=nb3:ne3n3 = -2 -1 0 1 2 3即序列x(n)與h(n)的線性卷積為y(n)=6,26,55,82,67,40。5X=fft(x,N) 與x=ifft(X,N)采用FFT算法計(jì)算一維序列x(n)的N點(diǎn)離散Fourier變換(DFT) 可以直接用命令X=fft(x,N)來實(shí)現(xiàn),其逆運(yùn)算用命令x =ifft(X,N)來實(shí)現(xiàn)。計(jì)算中若序列x(或X)的長(zhǎng)度大于N時(shí),截?cái)鄕(或X);否則補(bǔ)零。例 模擬信號(hào)x(t)=2sin(4t)+5cos(8t),求其64點(diǎn)的DFT的幅值譜及相位譜。MATLAB

42、實(shí)現(xiàn):function y=fun3(N)n=0:N-1;t=0.01*n;q=n*2*pi/N;x=fun30(t);y=fft(x,N);subplot(3,1,1);plot(t,x); title('原信號(hào)'); gridsubplot(3,1,2);plot(q,abs(y); title('幅值'); gridsubplot(3,1,3);plot(q,angle(y); title('相位'); gridfunction x=fun30(t)x=2*sin(4*pi*t)+5*cos(8*pi*t);>>y=fun3(6

43、4);6H,w=freqz(b,a,n,Fs)函數(shù)freqz基于FFT算法計(jì)算以傳遞函數(shù)形式表達(dá)的數(shù)字濾波器的頻率響應(yīng)。命令freqz(b,a,N,Fs)能夠自動(dòng)繪制以b、a為系數(shù)的數(shù)字濾波器的N點(diǎn)幅頻和相頻曲線(Fs是抽樣頻率,此項(xiàng)可缺省),命令H,w=freqz(b,a,n)計(jì)算并返回?cái)?shù)字濾波器的N點(diǎn)頻率響應(yīng)H(abs(H)是幅頻響應(yīng),angle(H)是相頻響應(yīng)),相應(yīng)的N個(gè)分布在(0)范圍內(nèi)的頻率點(diǎn)記錄在w中。例 繪制系統(tǒng)的幅頻和相頻特性曲線。>> b=1; a=1,-0.9; freqz(b,a,512) 7y=filter(b,a,x)或y,zf=filter(b,a,x

44、,xic)系統(tǒng)以傳遞函數(shù)的形式表達(dá),b、a為其分子、分母多項(xiàng)式的系數(shù)向量。信號(hào)x通過該系統(tǒng)后的零狀態(tài)響應(yīng)(即該系統(tǒng)對(duì)信號(hào)x的濾波),可用命令y=filter(b,a,x)或y,zf= filter(b,a,x)來完成,其中zf是系統(tǒng)的最后狀態(tài)。由于存儲(chǔ)空間限制常常需要進(jìn)行分布濾波,估算初始和最后條件對(duì)分布濾波來說是非常有用的。假設(shè)現(xiàn)有兩部分?jǐn)?shù)據(jù),每部分有5000個(gè)點(diǎn),如下:x1=randn(5000,1);x2=randn(5000,1);可能第一個(gè)序列x1對(duì)應(yīng)前10分鐘采集的數(shù)據(jù),第二個(gè)序列x2對(duì)應(yīng)后10分鐘采集的數(shù)據(jù)。那么整個(gè)序列為x=x1;x2。如果現(xiàn)在沒有足夠的空間存儲(chǔ)連接起來的序列x

45、。對(duì)x1、x2分別進(jìn)行濾波,為了保證濾波后序列的連續(xù)性,采用濾波x1的最后條件作為濾波x2的初始條件。y1,zf=filter(b,a,x1);y2=filter(b,a,x2,zf);若計(jì)算系統(tǒng)在初始狀態(tài)(Y,X)下的全響應(yīng),可用命令zf=filtic(b,a,Y,X) 將(Y,X)等效成輸入xic,再用命令y,zf=filter(b,a,x,xic)來完成。例 求解差分方程y(n)=x(n)+x(n-1)+x(n-2)/3+0.95y(n-1)-0.9025y(n-2),n0。其中x(n)=cos(n/3),且y(-1)=-2,y(-2)=-3。用MATLAN語句實(shí)現(xiàn)如下: functio

46、n y=chafenb=1,1,1/3;a=1,-0.95,0.9025;Y=-2,-3;X=0,0;xic=filtic(b,a,Y,X); %初始狀態(tài)等效成輸入xicn=0:50;x=cos(pi*n/3);y=filter(b,a,x,xic); %全響應(yīng)plot(n,y) %或stem(n,y)或者: function chafen %用遞推法求解n=0:50; x0=cos(pi*n/3);x=0,0,x0;y=-3,-2,zeros(1,51);for i=3:53 y(i)=(x(i)+x(i-1)+x(i-2)/3+0.95*y(i-1)-0.9025*y(i-2);endz(

47、1:51)=y(3:53);plot(n,z)第六章 MATLAB在數(shù)字信號(hào)處理中的應(yīng)用§6-1圓周卷積的計(jì)算對(duì)于無限長(zhǎng)序列不能用MATLAB直接計(jì)算線性卷積,在MATLAB內(nèi)部只提供了一個(gè)conv函數(shù)計(jì)算兩個(gè)有限長(zhǎng)序列的線性卷積。對(duì)于圓周卷積MATLAB內(nèi)部沒有提供現(xiàn)成的函數(shù),我們可以按照定義式直接編程計(jì)算。例6-1 已知兩序列: 求它們的線性卷積yl(n)=h(n)*x(n)和N點(diǎn)的圓周卷積y(n)=h(n)x(n),并研究?jī)烧咧g的關(guān)系。實(shí)現(xiàn)程序:(1)計(jì)算圓周卷積的函數(shù)function yc=circonv(x1,x2,N) %實(shí)現(xiàn)兩序列x1和x2的圓周卷積if length

48、(x1)>N err0r('N must not be less than length of x1');endif length(x2)>N err0r('N must not be less than length of x2');endx1=x1,zeros(1,N-length(x1); %填充序列x1(n)使其長(zhǎng)度為Nx2=x2,zeros(1,N-length(x2); %填充序列使x2(n)其長(zhǎng)度為Nm=0:1:N-1;x2=x2(mod(-m,N)+1); %生成x2的圓周反轉(zhuǎn)序列H=zeros(N,N);for n=1:1:N %生

49、成計(jì)算圓周卷積的矩陣H(n,:)=cirshiftd(x2,n-1,N); % x2圓周右移n位endyc=x1*H' %計(jì)算圓周卷積function y=cirshiftd(x,m,N) %序列的圓周移位if length(x)>N error('The length of x must be less than N');endx=x,zeros(1,N-length(x); 補(bǔ)零,長(zhǎng)度變?yōu)镹n=0:1:N-1;y=x(mod(n-m,N)+1); %得到輸出(2)研究?jī)烧咧g的關(guān)系function fun5clear all;N,xn,hn=fun50;yln

50、=conv(xn,hn); %直接用函數(shù)conv計(jì)算線性卷積ycn=circonv(xn,hn,N); %用函數(shù)circonv計(jì)算N點(diǎn)的圓周卷積ny1=0:1:length(yln)-1;ny2=0:1:length(ycn)-1;n=0:length(xn)-1;m=0:length(hn)-1;subplot(2,2,1);stem(n,xn); xlabel('xn')subplot(2,2,2);stem(m,hn); xlabel('hn')axis(0,16,0,4);subplot(2,2,3);stem(ny1,yln); xlabel('

51、;線性卷積')subplot(2,2,4);stem(ny2,ycn); xlabel('圓周卷積')function N,xn,hn=fun50n=0:1:11;xn=0.8.n; %生成x(n)hn=ones(1,6); %生成h(n)N=12;運(yùn)行結(jié)果如圖所示:§6-2 利用FFT實(shí)現(xiàn)線性卷積若序列x1(n)、x2(n)是長(zhǎng)度分別為N1、N2的有限長(zhǎng)序列,N點(diǎn)的圓周卷積yc(n)=x1(n)x2(n),長(zhǎng)度為N1+N2-1的線性卷積yl(n)=x1(n)*x2(n)。由DFT的性質(zhì)可知:當(dāng)NN1+N2-1時(shí)有yc(n)=yl(n)=IDFTDFT x1(

52、n)·DFTx2(n)。序列較長(zhǎng)時(shí)DFT運(yùn)算通常用快速算法FFT實(shí)現(xiàn)。例6-2 用FFT實(shí)現(xiàn)上節(jié)例中的兩序列的線性卷積。實(shí)現(xiàn)程序如下:%fun6.mn=0:1:11;m=0:1:5;N1=length(n); N2=length(m);xn=0.8.n; %生成x(n)hn=ones(1,N2); %生成h(n)N=N1+N2-1;xk=fft(xn,N);hk=fft(hn,N);yk=xk.*hk;yn=ifft(yk,N);if all(imag(xn)=0)&(all(imag(hn)=0) yn=real(yn);endx=0:N-1;stem(x,yn,'.');運(yùn)行結(jié)果為:§6-3 系統(tǒng)的單位沖激響應(yīng)線性移不變系統(tǒng)的特性可用它在輸入信號(hào)是單位沖激序列時(shí)的輸出即系統(tǒng)的單位抽樣響應(yīng)h(n)來表征。有了它,就可得到此線性移不變系統(tǒng)對(duì)任意輸入x(n)的輸出y(n)。例6-3 一個(gè)因果線性移不變系統(tǒng):y(n)=0.81y(n-2)+x(n)-x(n-2)。求:(1)單位沖激響應(yīng);(2)單位階躍響應(yīng);(3)繪制系統(tǒng)的幅頻和相頻響應(yīng)。由差分方程直接得出系統(tǒng)函

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(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ǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論