數(shù)字信號處理(第9章MATELAB的實現(xiàn))_第1頁
數(shù)字信號處理(第9章MATELAB的實現(xiàn))_第2頁
數(shù)字信號處理(第9章MATELAB的實現(xiàn))_第3頁
數(shù)字信號處理(第9章MATELAB的實現(xiàn))_第4頁
數(shù)字信號處理(第9章MATELAB的實現(xiàn))_第5頁
已閱讀5頁,還剩83頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

1、第8章 MATLAB程序設計語言在信號處理中的應用 編輯課件第8章 MATLAB程序設計語言 在信號處理中的應用 8.1 概述概述 8.2 基本數(shù)值運算基本數(shù)值運算 8.3 基本語句基本語句 8.4 MATLAB函數(shù)函數(shù) 8.5 MATLAB在信號處理中的應用舉例在信號處理中的應用舉例 第8章 MATLAB程序設計語言在信號處理中的應用 編輯課件8.1 概概 述述 8.1.1 MATLAB程序設計語言簡介程序設計語言簡介 MATLAB,Matrix Laboratory的縮寫,是由Mathworks公司開發(fā)的一套用于科學工程計算的可視化高性能語言,具有強大的矩陣運算能力。 與大家常用的Fort

2、ran和C等高級語言相比,MATLAB的語法規(guī)則更簡單,更貼近人的思維方式,被稱之為“草稿紙式的語言”。截至目前,MATLAB已經(jīng)發(fā)展到12.1版, 適用于所有32位的Windows操作系統(tǒng), 按NTFS(NT文件系統(tǒng))格式下完全安裝約需 850 MB。MATLAB軟件主要由主包、仿真系統(tǒng)和工具箱三大部分組成。 第8章 MATLAB程序設計語言在信號處理中的應用 編輯課件8.1.2 MATLAB應用入門應用入門 1. MATLAB的安裝與卸載的安裝與卸載MATLAB軟件在用戶接口設計上具有較強的親和力,其安裝過程比較典型, 直接運行光盤中的安裝向?qū)е纬绦騍ETUP.exe, 按其提示一步步選

3、擇即可。MATLAB自身帶有卸載程序,在其安裝目錄下有uninstall子目錄,運行該目錄下的uninstall.exe即可; 也可以通過Windows系統(tǒng)的安裝卸載程序進行卸載。 第8章 MATLAB程序設計語言在信號處理中的應用 編輯課件 2. MATLAB的啟動與退出的啟動與退出 MATLAB安裝完成后,會自動在Windows桌面上生成一個快捷方式, 它是指向安裝目錄下binwin32matlab.exe的鏈接, 雙擊它即可來到MATLAB集成環(huán)境的基本窗口,通常稱之為命令窗口。 MATLAB的退出與普通WIN32的程序一樣, 值得一提的是它有一個自身專有的快捷鍵Ctrl+Q。 第8章

4、MATLAB程序設計語言在信號處理中的應用 編輯課件3. MATLAB界面簡介界面簡介 圖 8-1 MATLAB基本界面命令窗口 標題欄菜單欄工具欄命令行區(qū)狀態(tài)欄垂直和水平滾動條第8章 MATLAB程序設計語言在信號處理中的應用 編輯課件 1) 菜單欄 菜單欄中包括、View、Web、Window和Help六個菜單項。這里著重介紹File項。 File項是數(shù)據(jù)輸入/輸出的接口, 包括10個子項, 這里重點介紹其中的5個子項: New: 新建文件項。 有四個選擇: M,文本格式的MATLAB程序文件, 可以直接通過文件名的方式在MATLAB環(huán)境下解釋運行); Figure(圖形); Model(

5、仿真模型文件)和GUI(可視化界面文件)。 第8章 MATLAB程序設計語言在信號處理中的應用 編輯課件 Open: 打開所有MATLAB支持的文件格式,系統(tǒng)將自動識別并采用相應的程序?qū)ξ募M行處理。例如, 打開一個.m文件, 系統(tǒng)將自動打開M文件編輯器對它進行編輯。 Import Data.: 導入用于MATLAB處理的數(shù)據(jù)函數(shù),包括各種圖像文件、聲音文件和.mat文件。 Save Workspace As.: 將工作空間的變量以.mat(二進制)或ASCII文本的形式存入文件。 Set Path.: 設置工作路徑??梢源蜷_路徑設置(Set Path)對話框(圖8-2),將用戶自己建立的目錄

6、加入MATLAB的目錄系統(tǒng)中, 以便所編制的文件能夠在MATLAB環(huán)境中直接調(diào)用。 第8章 MATLAB程序設計語言在信號處理中的應用 編輯課件圖圖 8-2 路徑設置對話框路徑設置對話框 第8章 MATLAB程序設計語言在信號處理中的應用 編輯課件 單擊Add Folder. 按鈕可以將你的一個文件夾加入到系統(tǒng)路徑中; Add with Subfolders. 允許把一個文件夾包括其所有的子文件夾加入到系統(tǒng)路徑中。這兩種操作均可以直觀地在右側(cè)的路徑欄內(nèi)看到結(jié)果。 選中一個加入的文件夾, 你可以利用Move to Top(移至所有路徑的最前面), Move Up(上移一個), Move Down

7、(下移一個), Move to Bottom(移至所有路徑的最后面)等四個按鈕將改變文件在系統(tǒng)路徑中的排列位置以利于對文件的搜索使用, 也可以利用Remove按鈕將其刪除。對路徑操作完畢后,按Save按鈕予以保存; 按Close按鈕關閉本對話框; 按Revert按鈕取消所有未保存的改動; 按Default按鈕將還原到MATLAB安裝時的路徑設置; 按Help按鈕則啟動幫助系統(tǒng)解答疑難。 第8章 MATLAB程序設計語言在信號處理中的應用 編輯課件2) 命令行區(qū)對輸入命令的解釋MATLAB按以下順序進行: 檢查它是否是工作空間中的變量, 是則顯示變量內(nèi)容。 檢查它是否是嵌入函數(shù), 是則運行之。

8、檢查它是否是子函數(shù)。 檢查它是否是私有函數(shù)。 檢查它是否是位于MATLAB搜索路徑范圍內(nèi)的函數(shù)文件或腳本文件。 請注意,如果有兩個以上的方案與輸入的命令相匹配, MATLAB將只執(zhí)行第一個匹配。 第8章 MATLAB程序設計語言在信號處理中的應用 編輯課件4. MATLAB常用命令常用命令 表表8-1 MATLAB常用命令常用命令 第8章 MATLAB程序設計語言在信號處理中的應用 編輯課件第8章 MATLAB程序設計語言在信號處理中的應用 編輯課件8.2 基本數(shù)值運算基本數(shù)值運算 8.2.1 MATLAB內(nèi)部特殊變量和常數(shù)內(nèi)部特殊變量和常數(shù) MATLAB內(nèi)部有很多變量和常數(shù), 用以表達特殊含

9、義。常用的有: (1) 變量ans: 指示當前未定義變量名的答案。 (2) 常數(shù)eps:表示浮點相對精度, 其值是從1.0到下一個最大浮點數(shù)之間的差值。該變量值作為一些MATLAB函數(shù)計算的相對浮點精度,按IEEE標準, eps=2-52,近似為2.2204e-016。 第8章 MATLAB程序設計語言在信號處理中的應用 編輯課件 (3) 常數(shù)Inf: 表示無窮大。 當輸入或計算中有除以0時產(chǎn)生Inf。 (4) 虛數(shù)單位i,j: 表示復數(shù)虛部單位, 相當于 。 (5) NaN: 表示不定型值, 是由 0/0 運算產(chǎn)生的。 (6) 常數(shù)pi: 表示圓周率, 其值為3.141 592 653 58

10、9 7。 1第8章 MATLAB程序設計語言在信號處理中的應用 編輯課件8.2.2 變量類型變量類型 1 變量命名規(guī)則變量命名規(guī)則 MATLAB中對變量的命名應遵循以下規(guī)則: (1) 變量名可以由字母、數(shù)字和下劃線混合組成, 但必須以字母開頭。 (2) 字符長度不能大于31。 (3) 變量命名區(qū)分大小寫。 第8章 MATLAB程序設計語言在信號處理中的應用 編輯課件 2 局部變量和全局變量局部變量和全局變量 局部變量是指那些每個函數(shù)體內(nèi)自己定義的,不能從其他函數(shù)和MATLAB工作空間訪問的變量。 全局變量是指用關鍵字“global”聲明的變量。 全局變量名應盡量大寫,并能反映它本身的含義。如果

11、需要在工作空間和幾個函數(shù)中都能訪問一個全局變量,必須在工作空間和這幾個函數(shù)中都聲明該變量是全局的。 第8章 MATLAB程序設計語言在信號處理中的應用 編輯課件8.2.3 矩陣及其運算矩陣及其運算 MATLAB具有強大的矩陣運算和數(shù)據(jù)處理功能, 對矩陣的處理必須遵從代數(shù)規(guī)則。 1 矩陣生成矩陣生成 1) 一般矩陣的生成一般矩陣的生成 對于一般的矩陣MATLAB的生成方法有多種。 最簡單的方法是從鍵盤直接輸入矩陣元素。直接輸入矩陣元素時應注意: 各元素之間用空格或逗號隔開,用分號或回車結(jié)束矩陣行,用中括號把矩陣所有元素括起來。 第8章 MATLAB程序設計語言在信號處理中的應用 編輯課件 例例8

12、-1 在工作空間產(chǎn)生一個33矩陣A可用MATLAB語言描述如下: A=1 2 3; 4 5 6; 7 8 9或 A=1 2 34 5 67 8 9運行結(jié)果: A= 1 2 3 4 5 6 7 8 9 第8章 MATLAB程序設計語言在信號處理中的應用 編輯課件 2) 特殊矩陣的生成 對于特殊的矩陣可直接調(diào)用MATLAB的函數(shù)生成。 用函數(shù)zeros生成全0矩陣:格式 B=zeros(m,n)生成mn的全0陣。 用函數(shù)ones生成全1矩陣:格式 B=ones(m,n)生成mn的全1陣。 用函數(shù)eye生成單位陣:格式 B=eye(m,n)生成mn矩陣, 其中對角線元素全為1,其他元素為0。 第8章

13、 MATLAB程序設計語言在信號處理中的應用 編輯課件 2 矩陣的運算矩陣的運算 矩陣的運算有基本運算和函數(shù)運算兩種類型。基本運算包括矩陣的加、減、乘、除、乘方、求轉(zhuǎn)置、求逆等,其主要特點是通過MATLAB提供的基本運算符、*、/()、等即可完成。函數(shù)運算主要是通過調(diào)用MATLAB系統(tǒng)內(nèi)置的運算函數(shù)來求取矩陣的行列式(det(A)), 求秩(rank(A)), 求特征值和特征向量(V, Deig(A)), 求Jordan標準形(jordan(A))和矩陣分解等。需要用時可以參閱聯(lián)機幫助和相關參考書。 第8章 MATLAB程序設計語言在信號處理中的應用 編輯課件 例例 8-2 矩陣的基本運算。A

14、=1, 2, 3; 4, 5, 6;B =6, 5, 4; 3, 2, 1;C =A+B %計算兩個矩陣的和D =B %計算矩陣B的轉(zhuǎn)置E=A*D %做矩陣乘法,必須要滿足矩陣乘法的基本要求 %E應該是2階方陣 F=det(E) %求E的行列式值 G=E(-1) %求E的逆 第8章 MATLAB程序設計語言在信號處理中的應用 編輯課件輸出結(jié)果: C= 7 7 7 7 7 7D= 6 35 24 1E= 28 1073 28F=54G= 0.5185 -0.1852 -1.3519 0.5185 第8章 MATLAB程序設計語言在信號處理中的應用 編輯課件8.3 基本語句基本語句 8.3.1 程

15、序控制語句程序控制語句 1.循環(huán)語句循環(huán)語句 MATLAB的循環(huán)語句包括for循環(huán)和while循環(huán)兩種類型。 1) for循環(huán) 語法格式: for 循環(huán)變量 = 起始值: 步長: 終止值 循環(huán)體 end第8章 MATLAB程序設計語言在信號處理中的應用 編輯課件 起始值和終止值為一整形數(shù),步長可以為整數(shù)或小數(shù),省略步長時,默認步長為1。執(zhí)行for循環(huán)時,判定循環(huán)變量的值是否大于(步長為負時則判定是否小于)終止值,不大于(步長為負時則小于)則執(zhí)行循環(huán)體, 執(zhí)行完畢后加上步長, 大于(步長為負時則小于)終止值后退出循環(huán)。 第8章 MATLAB程序設計語言在信號處理中的應用 編輯課件例例 8-3 給

16、矩陣A、B賦值。 MATLAB 語句及運行結(jié)果如下: k=5; a=zeros(k, k) %矩陣賦零初值 for m=1 k for n=1 k a(m,n)=1/(m+n-1); endendfor i=m -1 1 b(i)=i; end 第8章 MATLAB程序設計語言在信號處理中的應用 編輯課件運行結(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.2000 0.1667 0.1429 0.125

17、0 0.2000 0.1667 0.1429 0.1250 0.1111b= 1 2 3 4 5 第8章 MATLAB程序設計語言在信號處理中的應用 編輯課件 2) while循環(huán) 語法格式: while 表達式 循環(huán)體 end 其執(zhí)行方式為:若表達式為真(運算值非0),則執(zhí)行循環(huán)體; 若表達式為假(運算結(jié)果為0),則退出循環(huán)體,執(zhí)行end后的語句。 第8章 MATLAB程序設計語言在信號處理中的應用 編輯課件例例 8-4 a=3; while a a=a-1 end輸出: a=2 a=1 a=0第8章 MATLAB程序設計語言在信號處理中的應用 編輯課件 2. 條件轉(zhuǎn)移語句條件轉(zhuǎn)移語句 條件

18、轉(zhuǎn)移語句有if和switch兩種。 1) if語句 MATLAB中if語句的用法與其他高級語言相類似, 其基本語法格式有以下幾種: 格式一: if 邏輯表達式 執(zhí)行語句 end 第8章 MATLAB程序設計語言在信號處理中的應用 編輯課件格式二: if 邏輯表達式 執(zhí)行語句1 else 執(zhí)行語句2 end格式三: if 邏輯表達式1 執(zhí)行語句1 else if 邏輯表達式2 執(zhí)行語句2 end 第8章 MATLAB程序設計語言在信號處理中的應用 編輯課件2) switch語句switch語句的用法與其他高級語言相類似, 其基本語法格式為: switch表達式(標量或字符串) case 值1 語

19、句1 case 值2 語句2 otherwise 語句n end 第8章 MATLAB程序設計語言在信號處理中的應用 編輯課件8.3.2 繪圖語句繪圖語句 常用的MATLAB繪圖語句有figure、plot、subplot、stem等, 圖形修飾語句有title、axis、text等。 1 figure figure有兩種用法,只用一句figure命令,會創(chuàng)建一個新的圖形窗口,并返回一個整數(shù)型的窗口編號。figure(n)表示將第n號圖形窗口作為當前的圖形窗口, 并將其顯示在所有窗口的最前面; 如果該圖形窗口不存在, 則新建一個窗口,并賦以編號n。 第8章 MATLAB程序設計語言在信號處理中

20、的應用 編輯課件 2 plot 線型繪圖函數(shù)。用法為plot(x,y,s)。參數(shù)x為橫軸變量,y為縱軸變量,s用以控制圖形的基本特征如顏色、粗細等,通??梢允÷?,常用方法如表8-2所示。 表表8-2 常用繪圖參數(shù)的含義常用繪圖參數(shù)的含義 第8章 MATLAB程序設計語言在信號處理中的應用 編輯課件 3 Stem 繪制離散序列圖,常用格式stem(y)和stem(x,y)分別和相應的plot函數(shù)的繪圖規(guī)則相同,只是用stem命令繪制的是離散序列圖。 4 subplot subplot(m,n,i) 圖形顯示時分割窗口命令,把一個圖形窗口分為m行,n列,mn個小窗口,并指定第i個小窗口為當前窗口。

21、 第8章 MATLAB程序設計語言在信號處理中的應用 編輯課件 5 繪圖修飾命令繪圖修飾命令 在繪制圖形時,我們通常需要為圖形添加各種注記以增加可讀性。 在plot語句后使用title(標題)可以在圖形上方添加標題, 使用xlabel(標記)或ylabel(標記)為X軸或Y軸添加說明,使用text(X值、Y值、想加的標示)可以在圖形中任意位置添加標示。 第8章 MATLAB程序設計語言在信號處理中的應用 編輯課件例例 8-5 畫圖基本語句如圖 8 - 3 所示。 圖 8-3 例8-5中繪制的幾種正弦波形 正弦線10105101010510注記05101015010101sin(x)第8章 MA

22、TLAB程序設計語言在信號處理中的應用 編輯課件MATLAB 語句及運行結(jié)果如下: x=0:0.1*pi:2*pi; %定義x向量figure(1); %創(chuàng)建一個新的圖形窗口, 編號為1subplot(2,2,1); %將窗口劃分為2行, 2列, 在第1個窗口中作圖plot(x,sin(x); %畫圖title(正弦線); %給圖形加標題subplot(2,2,2); %在第2個窗口中作圖plot(x,sin(x),r); %畫一正弦波, 紅色xlabel(X); %給x軸加說明第8章 MATLAB程序設計語言在信號處理中的應用 編輯課件ylabel(SIN(X); %給y軸加說明subplo

23、t(2,2,3); %在第2個窗口中作圖plot(x,sin(x),-); %畫一正弦波, 破折線subplot(2,2,4); %在第2個窗口中作圖plot(x,sin(x),r+); %畫一正弦波, 紅色破折線text(4,0,注記); 第8章 MATLAB程序設計語言在信號處理中的應用 編輯課件8.4 MATLAB函數(shù)函數(shù)8.4.1 函數(shù)及其調(diào)用方法函數(shù)及其調(diào)用方法 在MATLAB語言中,M文件有兩種形式:腳本和函數(shù)。 腳本沒有輸入/輸出參數(shù),只是一些函數(shù)和命令的組合。它可以在MATLAB環(huán)境下直接執(zhí)行,也可以訪問存在于整個工作空間內(nèi)的數(shù)據(jù)。 由腳本建立的變量在腳本執(zhí)行完后仍將保留在工作

24、空間中可以繼續(xù)對其進行操作,直到使用clear命令對其清除為止。 函數(shù)是MATLAB語言的重要組成部分。MATLAB提供的各種工具箱中的M文件幾乎都是以函數(shù)的形式給出的。函數(shù)接收輸入?yún)?shù),返回輸出參數(shù),且只能訪問該函數(shù)本身工作空間中的變量,從命令窗或其他函數(shù)中不能對其工作空間的變量進行訪問。 第8章 MATLAB程序設計語言在信號處理中的應用 編輯課件 1 函數(shù)結(jié)構(gòu)函數(shù)結(jié)構(gòu) MATLAB語言中提供的函數(shù)通常由以下五個部分組成: (1) 函數(shù)定義行;(2) H1行;(3) 函數(shù)幫助文件;(4) 函數(shù)體;(5) 注釋。 第8章 MATLAB程序設計語言在信號處理中的應用 編輯課件 這五個部分中最重

25、要的是函數(shù)定義行和函數(shù)體。 函數(shù)定義行:MATLAB語言在M文件的第一行用關鍵字“function”把M文件定義為一個函數(shù),并指定它的名字(必須和文件名相同),同時也定義了函數(shù)的輸入和輸出參數(shù)。 函數(shù)定義行是一個MATLAB函數(shù)所必需的,其他各部分的內(nèi)容可以沒有, 這種函數(shù)稱為空函數(shù)。 例如: 求最大值函數(shù)“max”的定義行可描述為 function Y,I=max(x) 第8章 MATLAB程序設計語言在信號處理中的應用 編輯課件 其中, “max”為函數(shù)名, 輸入?yún)?shù)為“x”, 輸出參數(shù)為“Y”和“I”。 函數(shù)體:函數(shù)體是函數(shù)的主體部分,它包括進行運算和賦值的所有MATLAB程序代碼。函數(shù)

26、體中可以包括流程控制、輸入/輸出、計算、賦值、注釋以及函數(shù)調(diào)用和腳本文件調(diào)用等。 在函數(shù)體中完成對輸出參數(shù)的計算。 第8章 MATLAB程序設計語言在信號處理中的應用 編輯課件 2 函數(shù)調(diào)用函數(shù)調(diào)用 函數(shù)調(diào)用的過程實際上就是參數(shù)傳遞的過程。例如,在一個腳本文件里調(diào)用函數(shù)“max”可采用如下方式: n=1:20; a=sin(2*pi*n/20); Y,I=max(a); 該調(diào)用過程把變量“a”傳給了函數(shù)中的輸入?yún)?shù)“x”,然后把函數(shù)運算的返回值傳給輸出參數(shù)“Y”和“I”。其中,Y是a序列的最大值,I是最大值Y對應的坐標值。 第8章 MATLAB程序設計語言在信號處理中的應用 編輯課件8.4.2

27、 常用數(shù)字信號處理函數(shù)常用數(shù)字信號處理函數(shù) 1 信號產(chǎn)生函數(shù)信號產(chǎn)生函數(shù) 1) 三角波或鋸齒波發(fā)生函數(shù): sawtooth() 語法格式:sawtooth(t,width)。產(chǎn)生以2 為周期幅值范圍在-1,+1之間的三角波或鋸齒波。參數(shù)t為時間向量; width是0,1之間的數(shù), 它決定函數(shù)在一個周期內(nèi)上升部分和下降部分的比例。width=0.5產(chǎn)生三角波,width=1產(chǎn)生鋸齒波,此時函數(shù)可簡寫為:sawtooth(t)。 第8章 MATLAB程序設計語言在信號處理中的應用 編輯課件 2)方波發(fā)生函數(shù):)方波發(fā)生函數(shù): square() 語法格式:square(t)。產(chǎn)生以2為周期幅值范圍在

28、-1, +1之間的方波,參數(shù)t為時間向量。 3)sinc發(fā)生函數(shù): sinc() 語法格式: sinc(t) 1)/()sin()(sintpitpitct0 t=0 第8章 MATLAB程序設計語言在信號處理中的應用 編輯課件例例 8-6 信號產(chǎn)生舉例 clear allt=0:0.0001:0.1;x1=sawtooth(2*pi*50*t); %在0, 0.1之間產(chǎn)生5個周期的鋸齒波subplot(221)plot(t,x1)x2=sawtooth(2*pi*50*t,0.5); %在0, 0.1之間產(chǎn)生5個周期的三角波subplot(222)plot(t,x2)x3=square(2*

29、pi*50*t); %在0, 2之間產(chǎn)生10個周期的方波 第8章 MATLAB程序設計語言在信號處理中的應用 編輯課件subplot(223)plot(t,x3)axis(0,0.1,-1.2,1.2)t=-4:0.1:4;x4=sinc(t); %產(chǎn)生抽樣函數(shù)subplot(224)plot(t,x4) 運行結(jié)果如圖 8 - 4 所示。 第8章 MATLAB程序設計語言在信號處理中的應用 編輯課件圖 8-4 常用信號 (a) 鋸齒波; (b) 三角波; (c) 方波; (d) 抽樣函數(shù) 10100.050.110100.050.1(a)(b)10100.050.110.500.505(c)(

30、d)5第8章 MATLAB程序設計語言在信號處理中的應用 編輯課件2常用窗的常用窗的MATLAB函數(shù)表示函數(shù)表示 表表 8-3 常用窗的常用窗的MATLAB函數(shù)表示函數(shù)表示 窗名稱 MATLAB函數(shù) 窗名稱 MATLAB函數(shù) 矩形窗 boxcar(N) 哈明窗 hamming(N) 三角窗 triang(N) 布萊克曼窗 blackman(N) 漢寧窗 hanning(N) 凱塞-貝爾窗 kaiser(N, BETA) 第8章 MATLAB程序設計語言在信號處理中的應用 編輯課件 說明:除凱塞-貝爾窗外其他窗函數(shù)的使用方法相同。 函數(shù)的參數(shù)N是窗長度,調(diào)用結(jié)果為一個列向量。 例 產(chǎn) 生5 0

31、點 的 哈明窗可用 M AT L A B 語 言 表 示 為 : y=hamming(50);plot(y)凱塞-貝爾窗函數(shù)是一組可調(diào)窗函數(shù)。其語法格式為: Kaiser(N, BETA), 返回一個N點的Kaiser窗,參數(shù)BETA是窗函數(shù)表達式中的參數(shù),其含義參照前面的理論部分介紹。 第8章 MATLAB程序設計語言在信號處理中的應用 編輯課件 3 濾波器分析與實現(xiàn)函數(shù)濾波器分析與實現(xiàn)函數(shù) 1) 取絕對值: abs() 語法格式: abs(x)。 當x為實數(shù)時計算x的絕對值;x為復數(shù)時得到的是復數(shù)的模值;x為字符串時得到各字符的ASCII碼。 2) 取相角:angle() 語法格式:ang

32、le(z)。 求復矢量或復矩陣的相角,結(jié)果為一個以弧度為單位介于-和+之間的值。 第8章 MATLAB程序設計語言在信號處理中的應用 編輯課件 3) 求線性卷積:求線性卷積: conv() 語法格式:conv(x,y)。 求矢量x和y的卷積,若x(n)和y(n)的長度分別為M和N, 則返回值是長度為M+N-1的矢量。 例例 8-7 x(n)=3 4 5; y(n)=2 6 7 8,求其線性卷積。 MATLAB語句如下: x=3 4 5;y=2 6 7 8;z=conv(x,y)運行結(jié)果: z= 6 26 55 82 67 40 第8章 MATLAB程序設計語言在信號處理中的應用 編輯課件 4)

33、 利用指定的數(shù)字濾波器對數(shù)據(jù)進行濾波:filter() 常用語法格式:y=filter(b,a,x)。函數(shù)filter利用數(shù)字濾波器對數(shù)據(jù)進行濾波時,采用直接型結(jié)構(gòu)實現(xiàn),因而適用于IIR和FIR兩種濾波器。參數(shù):a=a0 a1 a2 aM, b=b0 b1 b2 bN是濾波器系數(shù),x為輸入序列矢量,y為濾波后的輸出。即: 濾波器的系統(tǒng)函數(shù)為: 標準形式中取a0=1,若輸入濾波系數(shù)a中a01時, MATLAB會自動歸一化系數(shù);若a=0,系統(tǒng)給出出錯信息。 MMNnzazaazbzbbzXzYzH110110)()()(第8章 MATLAB程序設計語言在信號處理中的應用 編輯課件 例例 8-8 在

34、語音信號處理中,常利用周期脈沖信號通過AR(10)模型來近似合成濁音信號。若信號周期T=46,AR模型的系數(shù)a=1, -1.7218, 1.2594, -0.6157, 0.7754, -0.6496, 0.3651,-0.4547, 0.3339, 0.0975, -0.1851, 試合成5個周期的濁音信號。 用MATLAB語句實現(xiàn)如下: T=46;a= 1,-1.7218,1.2594, -0.6157, 0.7754,-0.6496,0.3651,-0.4547,0.3339, 0.0975, -0.1851; for i=0:5 x(i*T+1)=1; endy=filter(1,a,

35、x);plot(y) 第8章 MATLAB程序設計語言在信號處理中的應用 編輯課件圖 8-5 合成濁音波形 y21012050100150200250 x第8章 MATLAB程序設計語言在信號處理中的應用 編輯課件 5) 計算數(shù)字濾波器H(z)的頻率響應H(ej):freqz() 語法格式:H,W=freqz(B,A,N) 得到數(shù)字濾波器的N點的頻率向量W和與之相對應的N點的頻率響應向量H,計算所得的N個頻率點均勻的分布在0, 上。參數(shù)=a0 a1 a2 aM, B=b0 b1 b2 bN是濾波器系數(shù), 即濾波器H(z)形式如下: MMNnzazaazbzbbzAzBzH110110)()()

36、(第8章 MATLAB程序設計語言在信號處理中的應用 編輯課件 參數(shù)N(與上式中階次N的含義不同)最好選用2的整數(shù)次冪, 以便使用FFT進行快速運算,N的缺省值為512。freqz(B,A,N)直接繪制頻率響應圖,而不返回任何值。 H=freqz(B,A,W) 返回W向量中指定的頻率范圍內(nèi)的頻率響應。其中,W以弧度為單位在0, 范圍內(nèi)。 H,F=freqz(B,A,N,Fs) 對H(ej)在0,Fs/2上等間隔采樣N點,采樣點頻率及相應的頻率響應值分別記錄在F和H中。 第8章 MATLAB程序設計語言在信號處理中的應用 編輯課件 6) 計算數(shù)字濾波器H(z)的單位脈沖響應h(n):impz()

37、 語法格式:H,T=impz(B,A)。 濾波器用傳遞函數(shù)模型限定,參數(shù)B, A分別為H(z)分子分母多項式的系數(shù),函數(shù)返回濾波器的沖擊響應列向量H和時間即采樣間隔列向量T。 第8章 MATLAB程序設計語言在信號處理中的應用 編輯課件 4 變換函數(shù)變換函數(shù) 1) 一維快速離散Fourier變換: fft() 語法格式:y=fft(x)。 y是計算信號x的快速離散傅里葉變換。 當x為矩陣時,計算x中每一列信號的離散傅里葉變換。當x的長度為2的冪時,用基2算法;否則,采用較慢的分裂基算法。 y=fft(x,n)。計算n點的FFT。當x的長度大于n時,截斷x; 否則補零。 第8章 MATLAB程序

38、設計語言在信號處理中的應用 編輯課件 2) 一維快速離散Fourier逆變換: ifft() 語法格式:y=ifft(x)。y是計算信號x的快速離散傅里葉變換的逆變換。 y=ifft(x,n)。計算n點的快速離散傅里葉變換的逆變換。 3) 離散余弦變換(DCT): dct() 語法格式: y=dct(x)。 計算信號x的離散余弦變換。 y=dct(x,n)。 計算n點的離散余弦變換。 當x的長度大于n時, 截斷x; 否則補零。 離散余弦逆變換可由函數(shù)idct實現(xiàn)。 第8章 MATLAB程序設計語言在信號處理中的應用 編輯課件例例 8-9 計算信號 , n=1, 2, , 100 的DCT。 用

39、MATLAB語言可實現(xiàn)如下: N=100; n=1:N;x=n+20*sin(2*pi*n/20);y=dct(x);z=idct(y);subplot(311); stem(x,.); ylabel(原始信號);subplot(312); stem(y,.); ylabel(DCT信號);subplot(313); stem(z,.); ylabel(IDCT信號) 202sin20)(nnnx第8章 MATLAB程序設計語言在信號處理中的應用 編輯課件圖 8-6 信號的DCT和IDCT變換 20002000201000010002000200原始信號DCT信號IDCT信號406080100

40、 n020406080100 n020406080100 n第8章 MATLAB程序設計語言在信號處理中的應用 編輯課件8.5 MATLAB在信號處理中的應用舉例在信號處理中的應用舉例 8.5.1 線性卷積與圓周卷積的計算線性卷積與圓周卷積的計算 例例 8-10 已知兩序列: 08 . 0)(nnx0n11 其他 01)(nh0n5 其他 求它們的線性卷積yl(n)=h(n)*x(n)和N點的圓周卷積y(n)=h(n)N x(n), 并研究兩者之間的關系。 N第8章 MATLAB程序設計語言在信號處理中的應用 編輯課件實現(xiàn)程序: 計算圓周卷積的函數(shù)。 function yc=circonv(x

41、1,x2,N)%直接計算圓周卷積 y=circonv(x1,x2,N)%輸出參數(shù): 圓周卷積結(jié)果y%輸入?yún)?shù): 需要計算圓周卷積的序列x1,x2和圓周卷積的點數(shù)Nif length(x1)N error(N must not be less than length of x1);endif length(x2)N error(N must not be less than length of x2);end 第8章 MATLAB程序設計語言在信號處理中的應用 編輯課件%以上語句判斷兩個序列的長度是否小于Nx1=x1,zeros(1,N-length(x1); %填充序列x1(n)使其長度為N1

42、+N2-1(序列x1(n)的長度為N1, 序列x2(n)的長度為N2)x2=x2,zeros(1,N-length(x2); %填充序列x2(n)使其長度為N1+N2-1n=0:1:N-1;x2=x2(mod(-n,N)+1); %生成序列x2(-n)NH=zeros(N,N);for n=1:1:N H(n,:)=cirshiftd(x2,n-1,N); %該矩陣的k行為x2(k-1-n)Nendyc=x1*H; %計算循環(huán)卷積 第8章 MATLAB程序設計語言在信號處理中的應用 編輯課件function y=cirshiftd(x,m,N)%directly realize circula

43、r shift for sequence x%y=cirshiftd(x,m,N);%x:input sequence whose length is less than N%m:how much to shift%N:circular length%y:output shifted sequenceif length(x)N error(the length of x must be less than N);endx=x,zeros(1,N-length(x);n=0:1:N-1;y=x(mod(n-m,N)+1); 第8章 MATLAB程序設計語言在信號處理中的應用 編輯課件(2)研究兩

44、者之間的關系。clear all;n=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)yln=conv(xn,hn); %直接用函數(shù)conv計算線性卷積 第8章 MATLAB程序設計語言在信號處理中的應用 編輯課件ycn=circonv(xn,hn,N1); %用函數(shù)circonv計算N1點圓周卷積ny1=0:1:length(yln)-1;ny2=0:1:length(ycn)-1;subplot(2,1,1); %畫圖stem(ny1,yln);ylabel(線性卷積)subpl

45、ot(2,1,2);stem(ny2,ycn);ylabel(圓周卷積)axis(0,16,0,4); 第8章 MATLAB程序設計語言在信號處理中的應用 編輯課件圖 8-7 線性卷積和圓周卷積的比較 4線性卷積321043圓周卷積10216 n02468101214161820 n02468101214第8章 MATLAB程序設計語言在信號處理中的應用 編輯課件8.5.2 利用離散傅里葉變換(利用離散傅里葉變換(DFT)分析信號的頻譜)分析信號的頻譜 例例 8-11 已知序列x(n)=2 sin(0.48n)+cos(0.52n) 0n100, 試繪制x(n)及它的離散傅里葉變換|X(k)|

46、圖。 MATLAB實現(xiàn)程序: clear allN=100;n=0:N-1;xn=2*sin(0.48*pi*n)+cos(0.52*pi*n);XK=fft(xn,N);magXK=abs(XK);phaXK=angle(XK);subplot(1,2,1) 第8章 MATLAB程序設計語言在信號處理中的應用 編輯課件plot(n,xn)xlabel(n);ylabel(x(n);title(x(n) N=100);subplot(1,2,2)k=0:length(magXK)-1;stem(k,magXK,.);xlabel(k);ylabel(|X(k)|);title(X(k) N=1

47、00); 第8章 MATLAB程序設計語言在信號處理中的應用 編輯課件圖8-8 信號及其離散傅里葉變換 nx(n)kX(k)3210123100806040200501000050100 x(n) N100X(k) N100第8章 MATLAB程序設計語言在信號處理中的應用 編輯課件8.5.3 利用利用FFT實現(xiàn)線性卷積實現(xiàn)線性卷積 若序列x1(n)、x2(n)為長度分別為N1、N2的有限長序列,yc(n)=x1(n)x2(n),yl(n)=x1(n) * x2(n)。由DFT的性質(zhì)可知:當NN1+N2-1時有yl(n)=yc(n)=IDFTDFTx1(n)DFTx2(n)。序列較長時DFT運

48、算通常用快速算法FFT實現(xiàn)。在MATLAB的信號處理工具箱中函數(shù)FFT和IFFT用于快速傅里葉變換和逆變換。 第8章 MATLAB程序設計語言在信號處理中的應用 編輯課件 例例 8-12 用FFT實現(xiàn)例 8- 10中兩序列的線性卷積。 實現(xiàn)程序: n=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); 第8章 MATLAB程序設計語言在信號處理中的應用 編輯課件HK=fft(hn,N);YK=XK.*HK;yn=ifft(YK,N);if

49、all(imag(xn)=0)&(all(imag(hn)=0) %實序列的循環(huán)卷積仍然為實序列 yn=real(yn);endx=0:N-1;stem(x,yn,.) 第8章 MATLAB程序設計語言在信號處理中的應用 編輯課件圖 8-9 利用FFT實現(xiàn)線性卷積 05152010n線性卷積43210第8章 MATLAB程序設計語言在信號處理中的應用 編輯課件8.5.4 FIR濾波器的設計與實現(xiàn)濾波器的設計與實現(xiàn) FIR濾波器的設計方法有窗函數(shù)法和頻率采樣法兩種,在MATLAB的數(shù)字信號處理工具箱中提供了函數(shù)fir1。fir1是采用經(jīng)典窗函數(shù)法設計線性相位FIR數(shù)字濾波器,且具有標準低通、帶通

50、、高通和帶阻等類型。 語法格式: B=fir1(n,Wn) B=fir1(n,Wn,ftype) B=fir1(n,Wn,window) B=fir1(n,Wn,ftype,window) 第8章 MATLAB程序設計語言在信號處理中的應用 編輯課件 其中,n為FIR濾波器的階數(shù),對于高通、帶阻濾波器n取偶數(shù)。Wn為濾波器截止頻率,取值范圍01。對于帶通、帶阻濾波器,Wn=W1,W2,且W1W2。 ftype為濾波器類型。 缺省時為低通或帶通濾波器, 為high時是高通濾波器, 為stop時是帶阻濾波器。 window為窗函數(shù),列向量,其長度為n+1; 缺省時,自動取hamming窗。輸出參數(shù)B為FIR濾波器系數(shù)向量, 長度為n+1。 第8章 MATLAB程序設計語言在信號處理中的應用 編輯課件 例例 8-13 用窗函數(shù)法設計一個線性相位FIR低通濾波器,性能指標:通帶截止頻率Wp=0.2,阻帶截止頻率Ws=0.3,阻帶衰減不小于40 dB,通帶衰減不大于3 dB。 實現(xiàn)程序: wp=0.2*pi;ws=0.3*pi;wdelta=ws-wp;N=ceil(8*pi/wdelta);Wn=(0.2+0.

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論