MATLAB及其信號處理基礎


1.實驗目的

(1)掌握MATLAB基本語法

(2)掌握使用MATLAB進行圖像、音頻文件的基本使用與分析方法

2.實驗內容

(1)MATLAB基本語法;

(2)MATLAB信號處理基礎;

3.實驗原理

(1)MATLAB基本語法

  MATLAB的變量名以字母打頭,后最多可跟19個字母或數字,不能使用內部函數或命令名作為變量名;MATLAB中的變量名區分大小寫。

  MATLAB的基本單位是矩陣。

常用命令:

dir:列出當前目錄下的所有文件

clc:清除命令窗

clear all:清除環境(從內存中清除所有變量)

who:將內存中的當前變量以簡單形式列出

close all:關閉所有的Figure窗口

(2)MATLAB信號處理基礎

  離散傅里葉、離散余弦和離散小波變換是圖像、音頻信號常用基礎操作,時域信號轉換到不同變換域以后,會導致不同程度的能量集中,信息隱藏利用這個原理在變換域選擇適當位置系數進行修改,嵌入信息,並確保圖像、音頻信號經處理后感官質量無明顯變化。

4.實驗記錄

(1)MATLAB基本語法

1、變量賦值

1)表達式賦值

圖1.1.1 表達式賦值

2)矩陣賦值

  數值通常按行輸入,行之間用分號隔開。

圖1.1.2 矩陣賦值

3)通過引用特定的位置可以單獨改變某個矩陣元素

圖1.1.3 通過特定的位置單獨改變某個矩陣元素

4)引用已定義的矩陣,重新定義一個新矩陣

S為3)步驟定義的矩陣

圖1.1.4 引用已定義的矩陣,重新定義一個新矩陣

2.整數操作

1)fix(x):截尾取整

圖1.2.1 將3.12的小數部分去除只保留整數部分3

2)floor(x):不超過x的最大整數(高斯取整)

圖1.2.2 通過高斯取整將3.12、-3.12取沒有超過他們的整數

3)ceil(x):大於x的最小整數

圖1.2.3 取3.12、-3.12比它們大的最小整數

3.隨機序列常用命令

1)rand:均勻分布隨機矩陣

rand       無變量輸入時只產生一個隨機數

y=rand(n)    生成n*n隨機矩陣,其元素在(0,1)內

y=rand(m,n)     生成m*n隨機矩陣,其元素在(0,1)內

圖1.3.1 生成一個3*4的隨機矩陣

2)randn:正態分布隨機矩陣

randn                           無變量輸入時只產生一個正態分布隨機數

y=randn(n)                   生成n*n正態分布隨機矩陣

y=randn(m,n)                    生成m*n正態分布隨機矩陣

圖1.3.2 產生一個均值為0.6,方差為0.1的4階矩陣

3)randsrc:產生均勻分布數組

randsrc                      無變量輸入時只產生一個隨機數1或者-1

y=randsrc(n)                生成n*n隨機數組,其元素為1或者-1

y=randsrc(m,n)            生成m*n隨機數組,其元素為1或者-1

圖1.3.3 產生一個2*3的隨機矩陣

4.矩陣常用操作命令

  MATLAB的基本單位是矩陣,掌握矩陣的輸入、各種數值運算以及矩陣函數是學好MATLAB的關鍵。

1)矩陣的輸入

  *直接輸入創建矩陣

  以"["和"]"作為首尾,同行的元素用","或空格隔開,不同行的元素用";"或按Enter鍵來分隔;矩陣的元素可以是數字也可以是表達式,如果是數值計算,表達式中不可包含未知變量。

圖1.4.1-1 創建矩陣

  *用矩陣函數來生成矩陣

  MATLAB提供了大量的函數來創建特殊矩陣,表1.1給出MATLAB常用的矩陣函數。

函數名稱

函數功能

zero(m,n)

m行n列零矩陣

eye(n)

n階方矩陣

ones(m,n)

m行n列元素為1的矩陣

rand(m,n)

m行n列隨機矩陣

randn(m,n)

m行n列正態隨機矩陣

magic(n)

n階魔方矩陣

圖1.4.1-2 生成3*3矩陣全為1

圖1.4.1-3 生成2*5矩陣全為0

圖1.4.1-4 生成3階的魔方矩陣

2)操作符":"的說明

j:k

表示步長為1的等差數列構成的數組:[j,j+1,j+2,……,k]

j:i:k

表示步長為i的等差數列構成的數組:[j,j+i,j+2*I,…,k]

A(i:j)

表示A(i),A(i+1),…,A(j)。

3)對矩陣元素的操作

設A是一個矩陣,則在MATLAB中用如下符號表示它的元素:

A(i,j)

表示矩陣A的第i行第j列元素

A(:,j)

表示矩陣A的第j列。

A(i,:)

表示矩陣A的第i行。

A(:,:)

表示A的所有元素構造2維矩陣

A(:)

表示以矩陣A的所有元素按列構成的一個列矩陣

A(i)

表示矩陣A(:)的第i個元素

[ ]

表示空矩陣

4)矩陣的運算

A+B:

矩陣加法

A-B:

矩陣減法

A*B:

矩陣乘法

A':

A的轉置

k*A:

數k乘以A

det(A):

A的行列式

rank(A):

A的秩

   
5)數組

  在MATLAB中數組是一行或者一列的矩陣,對矩陣輸入、修改和保存都適用於數組,同時MATLA還提供了一些創建數組的特殊指令。

  *特殊數組的創建

linspace(a,b,n)            給出區間[a,b]的n個等分點數據

圖1.4.5-1 區間[0,1]的6個等分點數據

 

*數組運算

 

  數組運算除作為1*n的矩陣應遵循矩陣的運算規則外,MATLAB中還為數組提供了一些特殊的運算:乘法為:.*、乘冪為:.^。數組運算強調元素對元素的運算。

圖1.4.5-2 數組運算

5.位操作

1)bitand:按位與

  C=bitand(A,B)命令將返回兩個非負整數數組A和B的相應元素按位與操作的結果。為了確保A和B的元素都是整數,可以使用ceil、fix、floor和round函數來生成A和B。

圖1.5.1 按位與操作

2)bitor:按位或

  C=bitor(A,B)命令將返回兩個非負整數數組A和B的相應元素按位或操作的結果。為了確保A和B的元素都是整數,可以使用ceil、fix、floor和round函數來生成A和B。

圖1.5.2 按位或操作

3)  bitxor:按位異或

  C=C=bitxor(A,B)返回兩個非負整數數組 A 和 B 的相應元素進行按位異或的結果,為了確保 A 和 B 的元素都是整數,可以使用 ceil、fix、floor 和 round 函數來生成 A 和 B。

圖1.5.3 按位異或

4)  bitset:設置指定位的值

  C=bitset(A,bit,v)命令將 A 中元素第 bit 位設為 v,其中 v 必須為 0 或 1,A 中的元素必須為非負整數,bit 必須為 1 到 A 中元素浮點整數表示法的位數之間的一個數字。

圖1.5.4 設置指定位的值

 

5)bitget:獲取指定位的值

 

  C=bitget(A,bit)命令將返回 A 中元素用 bit 指定位的值,A 中的元素必須為非負整數,bit 必須為 1 到 A 中元素浮點整數表示法位數之間的一個數字。

圖1.5.5 獲取指定位的值

6.繪圖操作

1)圖形標注

title('string','屬性名','屬性值',…)------給圖形加標題

xlabel('string','屬性名','屬性值',…)------給x軸加標注

ylabel('string','屬性名','屬性值',…)------給y軸加標注

legend('string1','string2',…)------添加圖例,其順序對應於繪圖指令中的順序

axis([xmin,xmax,ymin,ymax])------控制坐標軸的刻度范圍

2)二維圖像

 

  * plot(x,y)

 

  功能:以向量x,y為軸,繪制曲線。

   注:plot(x,y)命令可用來繪制函數f(x)圖形,此時可通過向量x常用命令x=a:h:b的形式獲得f(x)函數在繪圖區間[a,b]上的自變量點向量數據,對應的函數向量值取位y=f(x)。步長h可以任意選取,一般步長越小,曲線越光滑,但是步長太小,會增加計算量,運算速度也要降低。通常步長h取值0.1可達到較好的繪圖效果。

例:繪制函數y = sin x2 在-5 x 5的圖形。

圖1.6.2-1 命令

圖1.6.2-2 生成的繪圖

 

* plot(x1,y1,x2,y2,x3,y3…)

 

功能:在同一圖形窗口繪制多條不同顏色曲線,曲線關系為

y1 =f(x1),y2=f(x2),y3=f(x3)

例:在同一圖形窗口畫出三個函數y=cos2x,y=x2,y=x的圖形,-2 x 2

圖1.6.2-3 腳本代碼

圖1.6.2-4 生成的繪圖結果

3)二維特殊圖形

 

  * bar

 

圖1.6.3-1 代碼

圖1.6.3-2 直方圖顯示結果

 

  * Hist表示生成直方圖

 

  M=hist(N)表示將N中的最大最小值找出來,然后,平均取十個等間隔點,看以每個間隔點為中心,向兩邊各擴展1/2間隔的范圍內,包括N的元素個數,因此M返回值都是1*10大小。

圖1.6.3-3 代碼

圖1.6.3-4 生成直方圖

7.文件操作

1)fopen打開文件

fopen函數的調用格式為:fid=fopen(文件名,打開方式)

  其中文件名用字符串形式,表示待打開的數據文件。常見的打開方式有:'r'表示對打開的文件讀數據,'w'表示對打開的文件寫數據,'a'表示在打開的文件末尾添加數據。fid用於存儲文件句柄值,句柄值用來表示該數據文件,其他函數可利用它對該數據文件進行操作。文件數據格式有兩種形式,一種是二進制文件,另一種是文本文件。在打開文件時需要進一步指定文件格式類型,即指定是二進制文件還是文本文件。

2)fclose關閉文件

  文件讀、寫等操作完成后,應及時關閉。關閉文件用fclose函數,調用格式為:sta=fclose(fid),該函數關閉fid所表示的文件。sta表示關閉文件操作的返回代碼,若關閉成功,返回0,否則返回-1.

3)二進制文件的讀寫操作

 

  * fread讀二進制文件

 

  fread函數可以讀取二進制文件的數據,並將數據存入矩陣。其調用格式為:[A,COUNT]=fread(fid,size,precision)。

  其中A用於存放讀取的數據,COUNT返回所讀取的數據元素個數。fid為文件句柄,size為可選項,若不選用則表示讀取整個文件內容,若選用則它的值可為以下選項:N表示讀取N個元素到一個列向量;Inf表示讀取整個文件;[M,N]表示讀數據到M*N的矩陣中,數據按列存放。precision代表讀寫數據的類型。

 

  * fwrite寫二進制文件

 

  fwrite函數按照指定的數據類型將矩陣中的元素寫入文件中。其調用格式為:COUNT=fwrite(fid,A,precision),其中COUNT返回所寫的數據元素個數,fid為文件句柄,A用來存放寫入文件的數據,precision用於控制所寫數據的類型,其形式與fread函數相同。

8.M文件的建立與使用

  M文件有命令文件和函數文件兩種形式,這兩種文件的拓展名相同,都是.m。當用戶要運行的命令較多時,直接從鍵盤上逐條輸入較為繁瑣。可利用命令文件來解決多行輸入問題。用戶可將一組相關命令編輯在同一個命令文件中,運行時只需輸入文件名字,MATLAB就會自動按順序執行文件中的命令。函數文件是另一種形式的M文件,它的第一句可執行語句是以function引導的定義語句,在函數文件中的變量都是局部變量。

 

1)命令文件

 

  M文件有兩種運行方式:一是在命令窗口直接輸入文件名,按Enter鍵;二是在編輯窗口打開菜單TOOLS,再單擊Run。M文件保存的路徑一定要在搜索路徑上,否則M文件不能運行。

圖1.8.1-1 showlena.m文件

圖1.8.1-2 在命令行輸入showlena,可以正常打開圖像

 

2)函數文件

 

M函數文件的一般形式為:function<因變量>=<函數名>(<自變量>)

M函數文件可以有多個因變量和多個自變量,當有多個因變量時用[]括起來。

圖1.8.2-1 showimage.m文件

圖1.8.2-2 命令行命令

圖1.8.2-3 成功打開圖像文件

(2)信號處理基礎

1.用離散傅里葉變換分析合成音頻和圖像

1)分析合成音頻文件包括以下步驟:

 

  * 讀取音頻文件數據

 

 

  * 一維離散傅里葉變換

 

 

  * 一維離散傅里葉逆變換

 

 

  * 觀察結果

 

圖2.1.1-1 example11.m文件代碼

uigetfile是文件對話框函數,提供圖像界面供用戶選擇所需文件,返回目標的目錄名和文件名。

函數原型:y=wavread(FILE)

功能:讀取微軟音頻格式(wav)文件內容

輸入參數:file表示音頻文件名,字符串

返回參數:y表示音頻樣點給,浮點型

圖2.1.1-2 example12.m文件代碼

fft函數對輸入參數進行一維離散傅里葉變換並返回其系數,對應頻率從0到fs(采樣頻率),使用fftshift將零頻對應系數移至中央。上述代碼還計算了離散樣點對應的頻率值,以便更好地觀察頻譜。

圖2.1.1-3 example13.m文件代碼

ifft函數對輸入參數進行一維離散傅里葉逆變換並返回其系數。

圖2.1.1-4 example14.m 文件代碼

figure(n)表示創建第n個圖形窗;

  subplot 是子繪圖函數,第一、二個參數指明子圖像布局方式,例如,若參數為 2,3 則表示畫面共分為 2 行,每行有 3 個子圖像。第三個參數表明子圖像序號,排序順序為從左至右,從上至下。

  plot 是繪圖函數,默認使用方式為 plot(y),參數 y 是要繪制的數據;如果需要指明圖像橫軸顯示序列,則命令行為 plot(x, y),默認方式等同於 plot([0..len-1], y),len 為序列 y 的長度。

圖2.1.1-5 用離散傅里葉變換分析合成音頻文件

2)分析合成圖像文件包括以下步驟:

 

  * 讀取圖像文件數據

 

 

  * 二維離散傅里葉變換

 

 

  * 二維離散傅里葉逆變換

 

 

  * 觀察結果

 

圖2.1.2-1 example21.m文件代碼

函數原型:A=imread(filename,fmt)

功能:讀取fmt指定格式的圖像文件內容

輸入參數:filename表示圖像文件名,字符串

fmt表示圖像文件格式名,字符串,函數支持的圖像格式包括:JPEGG,TIFF,GIF,BMP等等,當參數中不包括文件格式名時,函數嘗試推斷出文件格式。

返回參數;A表示圖像數據內容,整型

rgb2gray將RGB圖像轉換為灰度圖。

圖2.1.2-2 example22.m文件代碼

fft2函數對輸入參數進行二維離散傅里葉變換並返回其系數,使用fftshift將零頻對應系數移至中央。

圖2.1.2-3 example23.m文件代碼

ifft2函數對輸入參數進行二維離散傅里葉逆變換並返回其系數。

圖2.1.2-4 example24文件代碼

imshow時二維數據繪圖函數,mesh通過三維平面顯示數據。

圖2.1.2-5 用離散傅里葉變換分析合成圖像文件

2.用離散余弦變換分析合成音頻和圖像

1)分析合成音頻文件包括以下步驟:

  * 讀取音頻文件數據

  * 一維離散余弦變換

  * 一維離散余弦逆變換

  * 觀察結果

先運行example11.m文件,用來打開音頻。

圖2.2.1-1 example31.m文件代碼

dct函數對輸入參數進行一維離散余弦變換並返回其系數,對應頻率從0到fs(采樣頻率)。

圖2.2.1-2 example32.m文件代碼

idct函數對輸入參數進行一維離散余弦逆變換並返回其系數。離散余弦變換常用於圖像壓縮,可以嘗試只使用部分系數重構語言,通過觀察可發現,原始音頻和合成后音頻兩者差別不大。

圖2.2.1-3 example33.m文件代碼

圖2.2.1-4 用離散余弦變換分析合成音頻文件

2)分析合成圖像文件包括以下步驟:
  * 讀取圖像文件數據

  * 二維離散余弦變換

  * 二維離散余弦逆變換

  * 觀察結果

先通過example21.m文件打開圖像。

圖2.2.2-1 example41.m文件代碼

dct2函數對輸入參數進行二維離散余弦變換並返回其系數。

圖2.2.2-2 example42.m文件代碼

idct2 函數對輸入參數進行二維離散余弦逆變換並返回其系數。可以嘗試使用部分系數重構圖像,本例中使用了系數矩陣中 4/5 的數據,其它部分置零。為了保證圖像能正確顯示,使用 uint8 對重構圖像原始數據進行了數據類型轉換,確保其取值范圍在 0 到 255 之間。

圖2.2.2-3 example43.m文件代碼

圖2.2.2-4 用離散余弦變換分析合成圖像文件

3.用離散小波變換分析合成音頻和圖像

1)分析合成音頻文件包括以下步驟:

  * 讀取音頻文件數據

  * 一維離散小波變換

  * 一維離散小波逆變換

  * 觀察結果

先使用example11.m文件打開音頻文件

圖2.3.1-1 example51.m文件代碼

wavedec函數對輸入參數進行一維離散小波變換並返回其系數C和各級系數長度L。第二個參數指明小波變換的級數,第三個參數指明小波變換使用的小波基名稱。

圖2.3.1-2 example52.m文件代碼

waverec 函數對輸入參數進行一維離散小波逆變換並返回其系數。appcoef 返回小波系數近似分量,第一個參數 C、第二個參數 L 是 wavedec 的返回參數,為各級小波系數和其長度,第三個參數指明小波基名稱,第四個參數指明級數。detcoef返回小波系數細節分量,第一個參數 C、第二個參數 L 是 wavedec 的返回參數,為各級小波系數和其長度,第三個參數指明級數。

圖2.3.1-3 example53.m文件代碼

圖2.3.1-4 用離散小波變換分析合成音頻文件

2)分析合成圖像文件包括以下步驟:

  * 讀取圖像文件數據

  * 二維離散小波變換

  * 二維離散小波逆變換

  * 觀察結果

先使用example21.m文件打開圖像。

圖2.3.2-1 example61.m文件代碼

dwt2 函數對輸入參數進行二維一級離散小波變換並返回近似分量,水平細節分量,垂直細節分量和對角線細節分量。如果要對圖像進行多級小波分解,使用wavedec2 函數。

圖2.3.2-2 example62文件代碼

idwt2 函數對輸入參數進行二維離散小波逆變換並返回其系數。可以嘗試僅使用近似分量、水平細節分量、垂直細節分量或對角線細節分量重構圖像。

圖2.3.2-3 example63文件代碼

輸入命令顯示六個子圖,分別是原始圖像、使用全部系數恢復的圖像、小波系數近似分量、水平細節分量、垂直細節分量和對角線細節分量。

圖2.3.2-4 用離散小波變換分析合成圖像文件


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM