找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3723|回復(fù): 0
打印 上一主題 下一主題
收起左側(cè)

《數(shù)字信號處理》Matlab實驗指導(dǎo)書

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:264237 發(fā)表于 2017-12-20 14:21 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
《數(shù)字信號處理》實驗指導(dǎo)書
編    寫: 張大鵬
適用專業(yè):電子信息工程

專    業(yè):      電子信息工程           
姓    名:      江凱倫           
學(xué)    號:       198840009            
指導(dǎo)教師:         張大鵬              
完成日期:      2017年 12月 3日      

信息與電氣工程學(xué)院
目        錄
概述          3
實驗一 Matlab基本操作        7
實驗二 序列        11
實驗三  Z變換        18
實驗四  FFT        21

概述
Matlab是一種功能強(qiáng)大的工具軟件,在數(shù)字信號處理領(lǐng)域有著廣泛的應(yīng)用,因此數(shù)字信號處理課程的實驗主要是在Matlab環(huán)境下進(jìn)行的。
MATLAB語言是一種廣泛應(yīng)用于工程計算及數(shù)值分析領(lǐng)域的新型高級語言,自1984年由美國 MathWorks 公司推向市場以來,歷經(jīng)十多年的發(fā)展與競爭,現(xiàn)已成為國際公認(rèn)的最優(yōu)秀的工程應(yīng)用開發(fā)環(huán)境。MATLAB功能強(qiáng)大、簡單易學(xué)、編程效率高,深受廣大科技工作者的歡迎。
MATLAB特點:
1. 數(shù)值計算和符號計算功能
    MATLAB的數(shù)值計算功能包括:矩陣運(yùn)算、多項式和有理分式運(yùn)算、數(shù)據(jù)統(tǒng)計分析、數(shù)值積分、優(yōu)化處理等。符號計算將得到問題的解析解。
2.MATLAB語言
    MATLAB除了命令行的交互式操作以外,還可以程序方式工作。使用MATLAB可以很容易地實現(xiàn)C或FORTRAN語言的幾乎全部功能,包括Windows圖形用戶界面的設(shè)計。
3.圖形功能
MATLAB提供了兩個層次的圖形命令:一種是對圖形句柄進(jìn)行的低級圖形命令,另一種是建立在低級圖形命令之上的高級圖形命令。利用MATLAB的高級圖形命令可以輕而易舉地繪制二維、三維乃至四維圖形,并可進(jìn)行圖形和坐標(biāo)的標(biāo)識、視角和光照設(shè)計、色彩精細(xì)控制等等。
4.應(yīng)用工具箱
基本部分和各種可選的工具箱。
基本部分中有數(shù)百個內(nèi)部函數(shù)。
    其工具箱分為兩大類:功能性工具箱和學(xué)科性工具箱。功能性工具箱主要用來擴(kuò)充其符號計算功能、可視建模仿真功能及文字處理功能等。學(xué)科性工具箱專業(yè)性比較強(qiáng),如控制系統(tǒng)工具箱、信號處理工具箱、神經(jīng)網(wǎng)絡(luò)工具箱、最優(yōu)化工具箱、金融工具箱等,用戶可以直接利用這些工具箱進(jìn)行相關(guān)領(lǐng)域的科學(xué)研究。 MATLAB集成環(huán)境
MATLAB  7.X是一個高度集成的語言環(huán)境,在該環(huán)境下既可以進(jìn)行交互式的操作,又可以編寫程序、運(yùn)行程序并跟蹤調(diào)試程序。
1. MATLAB的啟動
啟動MATLAB有兩種常見方法:
     (1)通過“開始”按鈕,選擇“程序”菜單項,然后打開“MATLAB”菜單中的“MATLAB”程序,就可啟動MATLAB系統(tǒng)
    (2) 利用Windows 建立快捷方式的功能,將MATLAB程序以快捷方式放在桌面上。只要在桌面上雙擊該圖標(biāo)即可啟動MATLAB
  2. MATLAB命令窗口
(1)  命令窗口的菜單欄
菜單欄共包含F(xiàn)ile、Edit、Window和Help四項。
File菜單項:
    New命令:用于建立M文件、圖形窗口。
    Open命令:打開一個已經(jīng)建立的M文件。
    Run Script命令:執(zhí)行一個命令文件。
    Load Workspace命令:將變量裝入當(dāng)前空間。
    Save Workspace As命令:把當(dāng)前工作空間的所有變量用后綴為.mat的文件保存起來。
    Show Workspace命令:打開變量瀏覽器。
    Set Path命令:打開MATLAB的路徑瀏覽器。
    Preferences命令:打開命令窗口的顯示格式。
    Print Setup命令:設(shè)置打印機(jī)的參數(shù)。
    Print命令:打印和設(shè)置一些打印參數(shù)。
    Print Selection命令:打印選中的內(nèi)容。
    Exit MATLAB命令:退出MATLAB系統(tǒng)。
Edit菜單項:
    Undo、Cut、Copy和Paste等命令:分別用于撤銷上一次操作、剪切、復(fù)制和粘貼。
    Clear命令:刪除內(nèi)容。
    Select All命令:用于選定所有文本內(nèi)容。
    Clear Session命令:清除命令編輯區(qū)的全部內(nèi)容,但并不刪除工作空間中的變量。
    Help菜單項:
Help Window命令:打開MATLAB的幫助窗口。
Help Tips命令:打開幫助窗口,并首先顯示MATLAB的幫助系統(tǒng)的分類和使用方法。
Help Desk(HTML)命令:打開系統(tǒng)WWW瀏覽器,并顯示MATLAB的幫助桌面。    Examples and Demos命令:可以通過演示MATLAB提供的例子來熟悉相關(guān)部分的用法。
About MATLAB命令:打開關(guān)于MATLAB的版本和版權(quán)等信息。
Subsribe命令:打開機(jī)器上的WWW瀏覽器,用戶可過填寫相關(guān)的表格來獲得MathWorks公司的產(chǎn)品。
    MATLAB運(yùn)算量
   1.變量和賦值語句
MATLAB賦值語句有兩種形式:
    (1) 變量=表達(dá)式  
    (2) 表達(dá)式
其中“表達(dá)式”是用運(yùn)算符將有關(guān)運(yùn)算量連接起來的式子,其結(jié)果是一個矩陣。[注] 第二種語句形式下,將表達(dá)式的值賦給MATLAB的永久變量ans。如果在語句的最后加分號,那么,MATLAB僅僅執(zhí)行賦值操作,不再顯示運(yùn)算的結(jié)果。在一條語句中,如果表達(dá)式太復(fù)雜,一行寫不下,可以加上三個小黑點(續(xù)行符)并按下回車鍵,然后接下去再寫。例如 s=1-1/2+1/3-1/4+1/5-1/6+1/7-…- 1/8+1/9-1/10+1/11-1/12。
   2.MATLAB表達(dá)式
算術(shù)表達(dá)式。
運(yùn)算符有:+(加)、-(減)、*(乘)、/(右除)、\(左除)、^(乘方)
對于矩陣來說,左除和右除表示兩種不同的除數(shù)矩陣和被除數(shù)矩陣的關(guān)系。關(guān)系表達(dá)式。
運(yùn)算符有:<(小于)、<=(小于或等于)、>(大于)、>=(大于或等于)、==(等于)、~=(不等于)
邏輯表達(dá)式。
運(yùn)算符有:&(與)、|(或)和~(非)
   運(yùn)算法則:
(1)在邏輯運(yùn)算中,確認(rèn)非零元素為真,用1表示,零元素為假,用0表示。   
(2)參與邏輯運(yùn)算的可以是兩個標(biāo)量、兩個同維矩陣或參與邏輯運(yùn)算的元素一個為標(biāo)量,另一個為矩陣。
    (3)在算術(shù)、關(guān)系、邏輯運(yùn)算中,算術(shù)運(yùn)算優(yōu)先級最高,邏輯運(yùn)算優(yōu)先級最低。

實驗1 Matlab基本操作
1. 實驗?zāi)康?br /> 初步掌握Matlab中的矩陣生成方法和繪圖方法。
2. 實驗內(nèi)容和步驟
(1) 矩陣的生成與察看
在工作區(qū)鍵入以下命令
>>x=[1 2 3 4;1 2 3 4;1 2 3 4;1 2 3 4];
           可以看到工作區(qū)的變量窗口出現(xiàn)了x,雙擊察看可以看到這是一個4x4的矩陣。
>>x=[1 2 3 4;1 2 3 4;1 2 3 4;1 2 3 4]
           可以在工作區(qū)看到x的內(nèi)容
                 x =

                      1     2     3     4
                      1     2     3     4
                      1     2     3     4
                      1     2     3     4
           當(dāng)鍵入以下命令的的時候
              >> x([2,3],:)
              >> x(:,[1,2])
           將會出現(xiàn)指定行或列的信息。
          請自己輸入一個4x4可逆矩陣,并且用inv()函數(shù)來求解逆陣,最后將逆陣第2,3列的信息顯示出來。
(2) 幫助的獲取
Matlab的幫助功能非常強(qiáng)大,雖然其內(nèi)容都是英文,只要使用者有一定的英文閱讀能力,獲取信息的可能性還是很大的。
實驗的第3部分內(nèi)容是畫圖,在畫圖之前鍵入
>>help plot
           察看其基本用法。
(3) 畫圖命令
首先生成一個一維矩陣x
>> x = 0:0.01:10
           然后產(chǎn)生一個一維矩陣y
             >>y = sin(x)
           
畫出相應(yīng)的圖形。生成z=cos(x)矩陣,并把兩個函數(shù)畫在一張圖上。
3.實驗結(jié)果
4. 實驗分析
MATLAB具有強(qiáng)大的畫圖功能,可以將各種信號表示出來

5.思考題
Matlab是否對大小寫敏感,請舉例說明。
敏感

實驗2 序列
1. 實驗?zāi)康?掌握Matlab中基本信號的生成方法和序列的運(yùn)算方法
2. 實驗內(nèi)容和步驟
(1) 實際應(yīng)用中,常把一個列向量作為一路信號,先構(gòu)造一個行向量
        >> x=[4 3 7 -9 1]
   然后轉(zhuǎn)置
        >> x=x'
   利用轉(zhuǎn)置后的x生成一個三通道信號
        >>y=[x  2*x  x/pi]
(2) 許多不同的工具箱都可以產(chǎn)生信號波形,其中大部分都要求時間向量作為參數(shù),如果以1000Hz抽樣頻率產(chǎn)生的波形,適宜的時間向量如下
        >>t=(0:0.001:1)'
(3) 基本序列生成
        δ(n)   :
        >> n=1;
        >> x=[1 zeros(1,n-1)]  
        u(n)    :
        >>n= 一個指定長度(計算機(jī)無法處理無窮的數(shù)據(jù))
        >>x=ones(1,N)
        anu(n)  :
       >>n= 一個指定長度(計算機(jī)無法處理無窮的數(shù)據(jù))
        >> b=[0:n-1]
>> x=a.^b
exp((σ+jω)*n):
>> u=1
>> w=2
>> x=exp((u+j*w)*b)
(4) 基本周期波形
        方波:
         
       正弦波:
           
             鋸齒波:
                 
                 
(5) sinc波形
           
(6) 序列的運(yùn)算
               信號加
                   >>x=x1+x2
              信號乘
                   >>x=x1.*x2
              比例
                   >>y=k*x
              折疊
                   >>y=fliplr(x)
              抽樣和
                   >>y=sum(x(n1:n2))
              抽樣積
                   >>y=prod(x(n1:n2))
              信號能量
                   >>Ex=sum(abs(x).^2)
              信號功率
                   >>Px=(sum(abs(x).^2)/n
3. 實驗結(jié)果

4.思考題
          >>t=(0:0.001:1)’;
          >>x1=sin(2*pi*50*t)+2*sin(2*pi*120*t);
          >>x=x1+0.5*randn(size(t));
(1) 求x(1)~x(50)的抽樣和抽樣積。
(2) 求x的能量和功率。
(3) 把結(jié)果用圖形表示出來。

實驗3  Z變換
1. 實驗?zāi)康模赫莆帐褂肕atlab處理Z變換、Z反變換的方法。
2. 實驗原理
   z變換定義
     利用差分方程可求離散系統(tǒng)的結(jié)構(gòu)及瞬態(tài)解。為了分析系統(tǒng)的另外一些重要特性,如穩(wěn)定性和頻率響應(yīng)等,需要研究離散時間系統(tǒng)的z變換(類似于模擬系統(tǒng)的拉氏變換),它是分析離散系統(tǒng)和離散信號的重要工具。
    一個離散序列x(n)的Z變換定義為
     其中z為復(fù)變量,是一個以實部為橫坐標(biāo),虛部為縱坐標(biāo)構(gòu)成的平面上的變量,這個平面也稱z平面。
    常用Z[x(n)]表示對序列x(n)的z變換,即
     這種變換也稱為雙邊z變換,與此相應(yīng)還有單邊z變換,單邊z變換只是對單邊序列(n>=0部分)進(jìn)行變換的z變換,其定義為
     可以把單邊z變換看成是雙邊z變換的一種特例,即因果序列情況下的雙邊z變換。
    Z變換收斂域
      一般,序列的Z變換并不一定對任何z值都收斂,z平面上使上述級數(shù)收斂的區(qū)域稱為“收斂域”。我們知道,級數(shù)一致收斂的條件是絕對值可和,因此z平面的收斂域應(yīng)滿足
因為對于實數(shù)序列, ,因此,|z|值在一定范圍內(nèi)才能滿足絕對可和條件,這個范圍一般表示為
Rx-〈|z|〈Rx+     
這就是收斂域,一個以Rx-和Rx+為半徑的兩個圓所圍成的環(huán)形區(qū)域,Rx-和Rx+稱為收斂半徑,Rx-和Rx+的大小,即收斂域的位置與具體序列有關(guān),特殊情況為Rx-或Rx+等于0,這時圓環(huán)變成圓或空心圓。
    Z變換收斂域的特點:
· 收斂域是一個圓環(huán),有時可向內(nèi)收縮導(dǎo)原點,有時可向外擴(kuò)展到∞,只有x(n)=δ(n)的收斂域是整個z平面;
· 在收斂域內(nèi)沒有極點,x(z)在收斂域內(nèi)每一點上都是解析函數(shù)。
    Z變換表示法:
· 級數(shù)形式;
· 解析表達(dá)式(注意只表示收斂域上的函數(shù),同時要注明收斂域)。

3. 實驗內(nèi)容和步驟
(1) 已知一個Z變換的表達(dá)式
      
請使用residuez函數(shù)來計算反變換后的序列。
(2) 已知一個因果線性移不變系統(tǒng)
y(n) = 0.81y(n-2) + x(n) – x(n-2)  求
a.H(z)
提示:直接筆算即可
  在Matlab中,一個分式可以以下形式表示:
               H(z) =B(z)/A(z)
  對于已知條件B(z)=1 – z^-2 , A(z)=1 – 0.81z^-2。
  在Matlab中將B按照z^-1的升冪表示成向量形式為[1 0 -1 ],同理A表示成[1 0 -0.81]。
b.沖擊響應(yīng)
提示:  對于數(shù)字系統(tǒng)的沖擊響應(yīng),可使用函數(shù)dimpulse。
  為與后面的階躍響應(yīng)呼應(yīng),可把二者畫在一幅圖上,可使用函數(shù)subplot。
c.階躍響應(yīng)
提示: 對于數(shù)字系統(tǒng)的階躍響應(yīng),可使用函數(shù)dimpulse。
d.H(ejw) 的幅頻相頻曲線
提示:可使用函數(shù)freqz,時間向量按照下式設(shè)定:
              t=[0:1:500]*pi/500;
(3) 解差分方程
       y(n) = 1/3[x(n) + x(n-1) + x(n-2)] + 0.95y(n-1) – 0.9025y(n-2)   n>=0
其中 x(n) = cos(pi*n/3),y(-1) = -2,y(-2) = -3,x(-1) = 1,x(-2) = 1。程序如下:
         b=[1,1,1]/3;
         a=[1,-0.95,0.9025];
         Y=[-2,-3];
         X=[1,1];
         xic=filtic(b,a,Y,X);
         bxplus=[1,-0.5];
         axplus=[1,-1,1];
         ayplus=conv(a,axplus);
         byplus=conv(b,bxplus) + conv(xic,axplus)
         [R,p,C]=residuez(byplus,zxplus);
         Mp=abs(p),A(p)=angle(p)/pi
         n=[0:50];
         x=cos(pi*n/3);
         y=filter(b,a,x,xic);
       plot(n,y)
請詳細(xì)分析程序,在每行加上注解。
4. 實驗結(jié)果
Z變換

Z反變換

實驗4  FFT
1. 實驗?zāi)康?br />         掌握在Matlab下進(jìn)行付立葉變換的方法。
2.實驗原理
(一)基—2按時間抽取FFT算法

對于有限長離散數(shù)字信號{x[n]},0 £ n £ N-1,其離散譜{x[k]}可以由離散付氏變換(DFT)求得。DFT的定義為

可以方便的把它改寫為如下形式:

不難看出,WN是周期性的,且周期為N,即
WN的周期性是DFT的關(guān)鍵性質(zhì)之一。為了強(qiáng)調(diào)起見,常用表達(dá)式WN取代W以便明確其周期是N。
由DFT的定義可以看出,在x[n]為復(fù)數(shù)序列的情況下,完全直接運(yùn)算N點DFT需要(N-1)2次復(fù)數(shù)乘法和N(N-1)次加法。因此,對于一些相當(dāng)大的N值(如1024)來說,直接計算它的DFT所作的計算量是很大的。FFT的基本思想在于,將原有的N點序列序列分成兩個較短的序列,這些序列的DFT可以很簡單的組合起來得到原序列的DFT。例如,若N為偶數(shù),將原有的N點序列分成兩個(N/2)點序列,那么計算N點DFT將只需要約[(N/2)2 ·2]=N2/2次復(fù)數(shù)乘法。即比直接計算少作一半乘法。因子(N/2)2表示直接計算(N/2)點DFT所需要的乘法次數(shù),而乘數(shù)2代表必須完成兩個DFT。上述處理方法可以反復(fù)使用,即(N/2)點的DFT計算也可以化成兩個(N/4)點的DFT(假定N/2為偶數(shù)),從而又少作一半的乘法。這樣一級一級的劃分下去一直到最后就劃分成兩點的FFT運(yùn)算的情況。比如,一個N = 8點的FFT運(yùn)算按照這種方法來計算FFT可以用下面的流程圖來表示:
關(guān)于蝶形結(jié)運(yùn)算的具體原理及其推導(dǎo)可以參照講義,在此就不再贅述。按頻率抽取的FFT的原理也可查閱相關(guān)資料,這里就不再推導(dǎo)了
3.實驗內(nèi)容和步驟

        (1) 設(shè)定一信號并計算它的FFT變換
              >> t = (0:1/99:1);
              >>x = sin(2*pi*15*t) + sin(2*pi*40*t);
              >>y = fft(x);
              >>m=abs(y);
              >>p=unwrap(angle(y));
              >>f=(0:length(y)-1) * 99/length(y);
              >>subplot(1,2,1);
              >>plot(f,m);
              >>set(gca,’XTick’,[15 40 60 85]);
              >>subplot(1,2,2);
              >>plot(f, p*180/pi);
              >>set(gca,’XTick’,[15 40 60 85]);
       (2) x(t) = 2sin(4πt) + 5cos(8πt),求x(t)的N點幅度譜和相位譜
       (3) 比較原序列和經(jīng)過FFT和IFFT后的序列。

4.實驗結(jié)果

5.實驗分析
在圖1中明顯能看到整個頻譜圖關(guān)于Nyquist頻率對稱,不過Nyquist頻率右邊的譜圖實際上是負(fù)頻部分,沒有意義,從中看到,該信號包含兩個頻率15Hz和40Hz。由于使用的采樣頻率fs=100Hz,所以Nyquist頻率為50Hz。
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏2 分享淘帖 頂 踩
回復(fù)

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表