數(shù)字信號課程設(shè)計報_第1頁
數(shù)字信號課程設(shè)計報_第2頁
數(shù)字信號課程設(shè)計報_第3頁
數(shù)字信號課程設(shè)計報_第4頁
數(shù)字信號課程設(shè)計報_第5頁
已閱讀5頁,還剩46頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、摘要隨著信息技術(shù)的不斷發(fā)展,數(shù)字信號處理已成為一個極其重要的學(xué)科和技術(shù)領(lǐng)域,在通信、語音、圖像、遙感、生物工程等眾多領(lǐng)域得到了廣泛的應(yīng)用。數(shù)字信號處理的核心容主要是信號的獲取、傳輸和處理、識別與綜合等。信號是信息的載體,系統(tǒng)是信息處理的手段。因此,為了更好的研究信號和系統(tǒng)的基本理論與方法,使同學(xué)們更好地理解和掌握數(shù)字信號處理的理論知識,在實驗過程中,借助MATLAB這個平臺來進行輔助設(shè)計。MATLAB是用于算法開發(fā)、數(shù)據(jù)可視化、數(shù)據(jù)分析以與數(shù)值計算的高級技術(shù)計算語言和交互式環(huán)境。作為強大的科學(xué)計算平臺,它幾乎滿足所有的計算要求。隨著對仿真和程序設(shè)計通用性與可視化需求的日益增加,MATLAB著重

2、改善了圖形用戶界面的制作,極滿足了用戶的需求。 MATLAB的GUID是專門用于圖形用戶界面的快速開發(fā)環(huán)境,本設(shè)計利用MATLAB的GUIDE工具箱制作了一套輔助“數(shù)字信號處理”課程教學(xué)的實驗軟件包。該實驗軟件包是由一系列形象的圖形用戶界面組成,每個界面以坐標(biāo)窗口、彈出框、按鍵、動態(tài)文本框等為基本部分,構(gòu)建了較為完善和友好的人機交互方式,使用便捷。關(guān)鍵詞 數(shù)字信號處理;GUI;教學(xué)實驗;離散傅里葉變換;數(shù)字濾波器 目 錄摘要1第1章31.1設(shè)計容與要求31.2 MATLAB GUI的簡介與特點4第2章基本理論42.1 離散時間信號和離散時間系統(tǒng)42.2 離散傅里葉變換與其快速算法52.3 數(shù)字

3、濾波器的原理和設(shè)計62.4 雙音多頻信號檢測和語音濾波7第3章系統(tǒng)GUI界面設(shè)計與實現(xiàn)83.1 概述83.1.1創(chuàng)建GUI83.1.2寫回調(diào)函數(shù)CallBack103.1.3句柄圖形之間的層次關(guān)系113.1.4獲取與設(shè)置對象屬性113.2 用戶登錄界面的設(shè)計與實現(xiàn)113.3 離散時間信號與離散時間系統(tǒng)的GUI界面的設(shè)計與實現(xiàn)133.3.1 離散時間信號的設(shè)計與實現(xiàn)143.3.2 線性卷積的設(shè)計與實現(xiàn)163.3.3 離散時間系統(tǒng)的設(shè)計與實現(xiàn)173.3.4 離散時間信號傅里葉變換與系統(tǒng)頻率響應(yīng)的設(shè)計與實現(xiàn)193.3.5 信號取樣的設(shè)計與實現(xiàn)213.3.6 Z的正反變換與系統(tǒng)函數(shù)的設(shè)計與實現(xiàn)233.

4、4 離散傅里葉變換與其快速算法的GUI界面的設(shè)計與實現(xiàn)243.4.1 離散傅里葉級數(shù)(DFS)的設(shè)計與實現(xiàn)243.4.2 離散傅里葉變換(DFT)的設(shè)計與實現(xiàn)263.4.3 循環(huán)卷積的設(shè)計與實現(xiàn)283.4.4 快速傅里葉變換(FFT)303.4.5信號譜分析的設(shè)計與實現(xiàn)313.5 數(shù)字濾波器的GUI界面的設(shè)計與實現(xiàn)323.5.1 巴特沃斯低通濾波器的設(shè)計與實現(xiàn)333.5.2 切比雪夫I型低通濾波器的設(shè)計與實現(xiàn)343.5.3 窗函數(shù)法設(shè)計FIR低通濾波器的設(shè)計與分析353.5.4 頻率取樣法設(shè)計FIR低通濾波器的設(shè)計與實現(xiàn)403.6 雙音多頻信號檢測與語音濾波實驗的GUI界面的設(shè)計與實現(xiàn)413.

5、6.1 雙音多頻(DTMF)信號檢測的設(shè)計與實現(xiàn)413.6.2語音濾波實驗的設(shè)計與實現(xiàn)46第4章設(shè)計總結(jié)和心得47 4.1 設(shè)計總結(jié).48 4.2設(shè)計心得.49第1章 1.1設(shè)計容與要求本設(shè)計任務(wù)是利用MATLAB的圖形用戶界面設(shè)計向?qū)UIDE工具箱建立一個與本科數(shù)字信號處理理論教學(xué)相配套的實驗教學(xué)仿真平臺。具體要求如下:1、構(gòu)建總體結(jié)構(gòu)框架:通過查閱相關(guān)資料、熟悉教材(主要針對天任,江太輝等編著的數(shù)字信號處理(第3版)的容與結(jié)構(gòu)、研究本課程對實驗的要求,構(gòu)建一個總體的與教材配套的結(jié)構(gòu)框架;2、構(gòu)建實驗界面:要求用MATLAB的GUI中的坐標(biāo)窗口、彈出框、按鍵、動態(tài)文本框等搭建一系列的仿真友

6、好界面,使得即便不懂MATLAB語言編程的同學(xué),也可以非常方便地使用和理解;3、實現(xiàn)具體界面的功能:要求用MATLAB編程語言來實現(xiàn)每一個具體界面的具體實驗功能,以達到對相關(guān)容的仿真。1.2 MATLAB GUI的簡介與特點MATLAB 是美國MathWorks公司出品的商業(yè)數(shù)學(xué)軟件,用于算法開發(fā)、數(shù)據(jù)可視化、數(shù)據(jù)分析以與數(shù)值計算的高級技術(shù)計算語言和交互式環(huán)境,主要包括MATLAB和Simulink兩大部分。MATALB 可以創(chuàng)建圖形用戶界面GUI ( GraphicalUser Interface) ,它是用戶和計算機之間交流的工具。MATLAB 將所有GUl 支持的用戶控件都集成在這個MA

7、TLAB將所有圖形用戶界面(Graphical User Interface,簡稱GUI)支持的用戶控件都集成在GUIDE工具箱中,并提供界面外觀、屬性和行為響應(yīng)方式的設(shè)置方法。圖形用戶界面(GUI)是指由窗口、菜單、對話框等各種圖形對象組成的用戶界面。在MATLAB中,基本的圖形用戶界面對象包含:下拉與彈出式菜單對象,多種界面元素如按鈕(PUSH BUTTON)、選項鈕(RADIO BUTTON)、可編輯文本框(EDIT BOX)、靜態(tài)文本框(STATIC TEXT)、檢查框(CHECK BOXES)、坐標(biāo)(AXES)等。根據(jù)這些圖形對象,可以設(shè)計出界面友好、操作方便的圖形用戶界面9。在設(shè)計

8、一個圖形用戶界面時,只需在GUI設(shè)計窗口左邊的控件工具欄中選擇一個所需要的對象,以拖拽的方式在對象設(shè)計區(qū)生成該對象,其對象的創(chuàng)建方式方便、簡單。創(chuàng)建了所需要的對象之后,可以在該控件的從callback函數(shù)中編寫M程序,以實現(xiàn)對象的功能。第2章 基本理論2.1 離散時間信號和離散時間系統(tǒng)離散時間信號和離散時間系統(tǒng)的知識首先包括序列的表示法和基本類型,線性非移變系統(tǒng)以與系統(tǒng)的穩(wěn)定性和因果性問題,卷積;其次包括離散時間信號的傅里葉變換(DTFT)和系統(tǒng)的頻率響應(yīng)的概念,與離散時間信號的取樣等基本知識;最后,包括z變換的定義和收斂域、Z的正反變換的定理和性質(zhì)。在離散時間系統(tǒng)中,信號是用離散時間的數(shù)字序

9、列表示的。離散時間信號有一些典型常用的基本序列,即單位取樣序列、單位階躍序列、矩形序列、實指數(shù)序列、復(fù)指數(shù)序列、正弦型序列。下面分別介紹這些典型序列的基本形式。1、 單位取樣序列(2-1)注意與之見的區(qū)別,是一個確定的物理量,而不是確定的物理量,而是一種數(shù)學(xué)抽象。2、 單位階躍序列(2-2)與連續(xù)階躍信號不同,在=0時,單位階躍序列是有定義的。3、 矩形序列 (2-3)N表示矩形序列的長度。4、 實指數(shù)序列實指數(shù)序列有單邊和雙邊實指數(shù)序列之分,大多數(shù)情況下,所要研究的都是單邊實指數(shù)序列,因此這里只介紹單邊實指數(shù)序列,單邊實指數(shù)序列可表示為: (2-4)5、 復(fù)指數(shù)序列 (2-5)式中,通常稱為

10、阻尼系數(shù),稱為數(shù)字域頻率(單位為弧度)。6、 正弦型序列 (2-6)式中,A為幅度,稱為數(shù)字域頻率,為初相(單位為弧度)。信號處理的目的之一就是要把信號變換成人們需要的某種形式。各種離散時間系統(tǒng)就是把輸入序列變換成所需要的輸出序列的系統(tǒng)。如果一個系統(tǒng)滿足疊加原理,且該系統(tǒng)的響應(yīng)與輸入信號施加于系統(tǒng)的時刻無關(guān),則該系統(tǒng)是線性非移變系統(tǒng)(LSIS)。線性非移變系統(tǒng)有一個重要的特性,它的輸入序列與輸出序列之間存在著線性卷積關(guān)系。若和分別為系統(tǒng)的輸入和輸出,為該系統(tǒng)的單位取樣響應(yīng),對于線性非移變系統(tǒng)而言,有如下線性卷積關(guān)系: (2-7)其中*表示卷積。與連續(xù)時間信號的傅里葉變換定義相類似,離散時間信號

11、x(n)的傅里葉變換定義為: (2-8)系統(tǒng)的單位取樣響應(yīng)h(n)的DTFT為系統(tǒng)的頻率響應(yīng),即 (2-9)離散時間信號常常是由連續(xù)時間信號經(jīng)周期取樣得到的。連續(xù)信號經(jīng)過取樣(理想取樣)后輸出為: (2-10)系統(tǒng)頻域分析方法還有Z變換,Z變換是離散時間信號的一種重要的變換。Z變換的定義為: (2-11)2.2 離散傅里葉變換與其快速算法這里所要介紹的離散傅里葉變換(DFT)時域和頻域都是離散的,而離散傅里葉變換的快速算法即快速傅里葉變換(FFT)在處理有限長序列時起著極其重要的作用。這部分所包含的知識有:周期序列的傅里葉級數(shù)與其性質(zhì);有限長序列的傅里葉變換表示離散傅里葉變換,與離散傅里葉變換

12、的性質(zhì),循環(huán)卷積等;快速傅里葉變換,與由FFT進行信號譜分析等。一個周期為N的周期序列可以表示為, (2-12)周期序列的離散傅里葉級數(shù)(DFS)變換對如下: (2-13)(2-14)一個周期序列雖然是無限長的,但是只要知道它的一個周期就可知道它的整個序列。這正是周期序列與有限長序列之間的聯(lián)系。有限長序列的傅里葉變換稱為離散傅里葉變換(DFT),DFT的表達式為: (2-15)有限長序列的DFT即仍是有限長序列。在MATLAB,我們可以直接調(diào)用函數(shù)fft( )和ifft( )來計算序列的FFT和IFFT。下圖2-1列出了當(dāng)N=8時的時間抽選的FFT流程圖,頻率抽選的FFT流程圖與時間抽選的FF

13、T流程圖相差不多,故不再畫出。圖2-1 時間抽選的FFT流程圖(N=8)2.3 數(shù)字濾波器的原理和設(shè)計本科中我們學(xué)習(xí)了兩類重要的數(shù)字濾波器:IIR數(shù)字濾波器和FIR濾波器。這兩類數(shù)字濾波器的設(shè)計方法是完全不同的。設(shè)計IIR濾波器時,通常是先設(shè)計一個模擬濾波器,再用沖激響應(yīng)不變法或雙線性變換法將所設(shè)計的模擬濾波器轉(zhuǎn)換成數(shù)字濾波器。模擬濾波器器的設(shè)計主要有巴特沃斯濾波器、切比雪夫I型和II型濾波器等。巴特沃斯濾波器的特點是其幅度響應(yīng)在通帶具有最平坦的特性,且通帶和阻帶幅度特性是單調(diào)變化的。切比雪夫I型濾波器在通帶的幅度響應(yīng)時單調(diào)減的,而在阻帶的幅度響應(yīng)時等波紋的。FIR濾波器則不可通過模擬濾波器來

14、設(shè)計,因此FIR濾波器沒有現(xiàn)成的設(shè)計公式,F(xiàn)IR數(shù)字濾波器的設(shè)計方法主要有窗函數(shù)法和頻率取樣法等。在使用窗函數(shù)法設(shè)計FIR濾波器時,常用的窗有矩形窗(Boxcar)、巴特利特(Bartlett)窗(三角窗)、漢寧(Hanning)窗(升余弦窗)、哈明(Hamming)窗、布萊克曼(Blackman)窗、凱澤(Kaiser)窗等6種。2.4 雙音多頻信號檢測和語音濾波雙音多頻 (Dual Tone Multi Frequency)信號應(yīng)用在許多場合,最常見的是的撥音。機盤上每一個對應(yīng)一個DTMF音,它包含兩個不同頻率的正弦信號的疊加,檢測DTMF音就是要檢測這兩個正弦信號的頻率,從而判斷出按鍵。

15、表2-1 雙音多頻信號的各個與頻率的對應(yīng)表1209Hz1336Hz1477Hz697Hz123770Hz456852Hz789941Hz*0#的雙音多頻信號的兩個頻率的對應(yīng)情況如表所示。比如按鍵1對應(yīng)的DTMF音包含頻率分別為和的兩個正弦信號之和,檢測到信號由這兩個頻率組成,就知道為1。本系統(tǒng)模擬了機的鍵盤,按機鍵盤的順序列出了1到#,并且可以從左邊的坐標(biāo)中可以看出各個按鍵的DTMF音信號,詳細(xì)的實現(xiàn)過程見3.6.1節(jié)。語音濾波實驗, 配合操作系統(tǒng)支持的語音媒體播放器可以很方便地將經(jīng)過數(shù)字處理后的語音效果直觀地體現(xiàn)出來, 這對于學(xué)生深刻理解數(shù)字信號處理中抽象數(shù)學(xué)運算的現(xiàn)實物理意義,很有幫助。對

16、于單聲道的語音數(shù)據(jù)在MATLAB中是一維數(shù)組,在MATLAB中有2個處理.wav格式語音的函數(shù), 一個是將語音流文件轉(zhuǎn)換為數(shù)組格式數(shù)據(jù)的函數(shù)wavread, 另一個是將數(shù)組格式數(shù)據(jù)轉(zhuǎn)換為語音流文件的函數(shù)wavwrite8. 第3章系統(tǒng)GUI界面設(shè)計與實現(xiàn)3.1總體框架圖3-1 系統(tǒng)結(jié)構(gòu)框圖完成該教學(xué)實驗系統(tǒng),總體的制作步驟如下:(1)分析系統(tǒng)所要現(xiàn)的主要功能,明確設(shè)計任務(wù),構(gòu)思出一個總體的結(jié)構(gòu)框架。(2) 確定該系統(tǒng)包含的數(shù)字信號處理教學(xué)容,在稿紙上設(shè)計各個界面布局。(3) 根據(jù)手繪的界面草圖,利用MATLAB的GUIDE工具箱搭建GUI靜態(tài)界面。(4) 編寫m程序?qū)崿F(xiàn)界面功能,即編寫界面上各

17、個控件的回調(diào)函數(shù),以達到對相關(guān)容的仿真。(5) 系統(tǒng)總體的調(diào)試和完善。3.1.1創(chuàng)建GUI創(chuàng)建Matlab GUI界面通常有兩種方式:第一種,在 .m文件中動態(tài)添加,即自己編寫程序,設(shè)置參數(shù);第二種,使用GUIDE幫助創(chuàng)建GUI;在Command 里面輸入 GUIDE 或者從菜單里面,或者從快捷按鈕均可進入 GUIDE。新建并且保存后,會生成相應(yīng)的fig文件和m文件,在Layout編輯視圖中,可以使用如下工具:Layout Editor:布局編輯器;Alignment Tool:對齊工具;Property Inspector:對象屬性觀察器;Object Browser:對象瀏覽器;Menu

18、Editor:菜單編輯器。2、新建一個布局(窗口),可以在新窗口中添加如下控件1靜態(tài)文本(Static Text)       2編輯框(Edit Text)控件3列表框(Listbox)控件          4滾動條(Slider)控件5按鈕(Push Button)控件       6開關(guān)按鈕(Toggle Button)控件7單選按鈕(Radio Button)控件 &

19、#160;   8按鈕組(Button Group)控件9檢查框(Check Box)控件       10列表框(Listbox)控件11彈出式菜單(Popup Menu)控件    12坐標(biāo)軸(Axes)控件13面板(Panel)控件每一個控件都有自己的屬性常規(guī)屬性。1.控件風(fēng)格和外觀(1)BackgroundColor:設(shè)置控件背景顏色,使用R G B或顏色定義。(2)CData:在控件上顯示的真彩色圖像,使用矩陣表示。(3)ForegroundColor:文本顏色。(4)Str

20、ing屬性:控件上的文本,以與列表框和彈出菜單的選項。(5)Visible:控件是否可見。2.對象的常規(guī)信息(1)Enable屬性: 表示此控件的使能狀態(tài),設(shè)置為on”,表示可選,為“off”時則表示不可。(2)Style:控件對象類型。(3)Tag:控件表示(用戶定義)。(4)TooltipString屬性:提示信息顯示。當(dāng)鼠標(biāo)指針位于此控件上時,顯示提示信息。(5)UserData:用戶指定數(shù)據(jù)。(6)Position:控件對象的尺寸和位置。(7)Units:設(shè)置控件的位置與大小的單位。(8)有關(guān)字體的屬性,如 FontAngle, FontName等。 3.控件回調(diào)函數(shù)的執(zhí)行(1)Bus

21、yAction:處理回調(diào)函數(shù)的中斷。有兩種選項:即Cancel:取消中斷事件,queue:排隊(默認(rèn)設(shè)置)。(2)ButtonDownFcn屬性:按鈕按下時的處理函數(shù)。(3)CallBack屬性:是連接程序界面整個程序系統(tǒng)的實質(zhì)性功能的紐帶。該屬性值應(yīng)該為一個可以直接求值的字符串,在該對象被選中和改變時,系統(tǒng)將自動地對字符串進行求值。(4)CreateFcn:在對象產(chǎn)生過程中執(zhí)行的回調(diào)函數(shù)。(5)DeleteFcn:刪除對象過程中執(zhí)行的回調(diào)函數(shù)。(6)Interruptible屬性:指定當(dāng)前的回調(diào)函數(shù)在執(zhí)行時是否允許中斷,去執(zhí)行其他的函數(shù)。 4.控件當(dāng)前狀態(tài)信息(1)ListboxT

22、op:在列表框中顯示的最頂層的字符串的索引。(2)Max:最大值。(3)Min:最小值。(4)Value:控件的當(dāng)前值??梢允褂脤傩跃庉嬈鱽碓O(shè)置屬性3.1.2寫回調(diào)函數(shù) CallBack每個控件都有幾種回調(diào)函數(shù),右鍵選中的控件一般會有如下菜單:然后就可以跳轉(zhuǎn)到相應(yīng)的 Editor中編輯代碼,GUIDE會自動生成相應(yīng)的函數(shù)體,函數(shù)名,名稱一般是控件 Tag+ Call類型名參數(shù)有三個( hObject, eventdata, handles),其中hObject為發(fā)生事件的源控件,eventdata為事件數(shù)據(jù)結(jié)構(gòu),handles為傳入的對象句柄,CreateFcn 是在控件對象創(chuàng)建的時候發(fā)生(一

23、般為初始化樣式,顏色,初始值等),DeleteFcn 實在空間對象被清除的時候發(fā)生,ButtonDownFcn和KeyPressFcn分別為鼠標(biāo)點擊和按鍵事件Callback,CallBack為一般回調(diào)函數(shù),因不同的控件而已異。例如按鈕被按下時發(fā)生,下拉框改變值時發(fā)生,sliderbar 拖動時發(fā)生等等。3.1.3 句柄圖形之間的層次關(guān)系可以創(chuàng)建圖形句柄的常見函數(shù):1figure函數(shù):創(chuàng)建一個新的圖形對象。2newplot函數(shù):做好開始畫新圖形對象的準(zhǔn)備。3axes函數(shù):創(chuàng)建坐標(biāo)軸圖形對象。4line函數(shù):畫線。5patch函數(shù):填充多邊形。6surface函數(shù):繪制三維曲面。7image函數(shù)

24、:顯示圖片對象。8uicontrol函數(shù):生成用戶控制圖形對象。9uimenu函數(shù):生成圖形窗口的菜單中層次菜單與下一級子菜單。幾個實用的小函數(shù):uigetfile 選擇文件對話框uiputfile 保存文件對話框uisetcolor 設(shè)置顏色對話框fontsetcolor 設(shè)置字體對話框msgbox    消息框warndlg    警告框3.1.4 獲取與設(shè)置對象屬性常用函數(shù):gcf函數(shù):獲得當(dāng)前圖形窗口的句柄gca函數(shù):獲得當(dāng)前坐標(biāo)軸的句柄gco函數(shù):獲得當(dāng)前對象的句柄gcbo函數(shù):獲得當(dāng)前正在執(zhí)行調(diào)用的對象的句柄gcbf函數(shù):

25、獲取包括正在執(zhí)行調(diào)用的對象的圖形句柄delete函數(shù):刪除句柄所對應(yīng)的圖形對象findobj函數(shù):查找具有某種屬性的圖形對象設(shè)置方法:(1)get函數(shù)返回某些對象屬性的當(dāng)前值。例如:pget(obj,'Position');    (2)函數(shù)set改變句柄圖形對象屬性,例如:set(obj,'Position',vect);3.2用戶登錄界面的設(shè)計與實現(xiàn) 登錄界面的設(shè)計過程是:首先打開MALAB軟件中的工具箱GUIDE左下角有個點擊鼠標(biāo)右鍵選擇然后把鼠標(biāo)點到 MALAB出選擇GUIDE然后進行靜態(tài)界面的設(shè)計。登陸靜態(tài)界面設(shè)計:在GU

26、I設(shè)計窗口左側(cè)的工具欄中直接拖拽3個靜態(tài)文本框(static text)、兩個可編輯文本框(edit text)、一個按鈕到對象設(shè)計區(qū),調(diào)整好位置,在靜態(tài)文本框與按鈕的string屬性中修改相應(yīng)的文字,這樣用戶登錄靜態(tài)界面就制作完成,當(dāng)然為了美觀,也可以先在美圖秀秀里把靜態(tài)文本框里的文字進行處理。接下來只需在“登錄”按鈕的回調(diào)(Callback)函數(shù)中編寫相應(yīng)的程序并把背景設(shè)置成如下圖所示的背景圖片,登錄界面的制作就完成了。登陸的靜態(tài)界面 點擊后 輸入用戶名 登陸成功“登錄”按鈕的callback函數(shù)中的m語言代碼如下:function pushbutton1_Callback(hObject

27、, eventdata, handles)users = get(handles.user,'string'); %用戶名的獲取codes = get(handles.code,'string');if strcmp(users,'盧惠婷')&&strcmp(codes,'1006052240')h = msgbox('登陸成功!');uiwait(h);close(gcf);xuanze(handles)else errordlg('用戶名或密碼錯誤!', '錯誤提示

28、9;);end“背景圖片”的callback函數(shù)如下:function untitled_OpeningFcn(hObject, eventdata, handles, varargin)ha=axes('units','normalized','position',0 0 1 1);uistack(ha,'down')II=imread('24.jpg');image(II)colormap grayset(ha,'handlevisibility','off','visi

29、ble','off');登錄成功后,用戶可以進入各章的選擇界面,如下圖左所示,用戶可以根據(jù)自己的需要選擇點擊相應(yīng)的按鈕,進入各章的界面。通過點擊“退出實驗系統(tǒng)”可以退出這個界面。這個界面主要是有按鈕控件構(gòu)成,其靜態(tài)界面的設(shè)計步驟與登錄界面的設(shè)計步驟相似。選擇主界面 離散時間信號和時間系統(tǒng)的界面該界面上的各個功能仍主要是通過設(shè)置控件的回調(diào)函數(shù)callback屬性實現(xiàn)的。以“離散時間信號的離散時間系統(tǒng)”的按鈕為例,“離散時間信號和離散時間系統(tǒng)”的按鈕對應(yīng)的Tag屬性為pushbutton3(tag的設(shè)置要與callback里的一致)。在GUIDE編輯界面中選中該控件,點擊右

30、鍵選中View Callback->Callback菜單項就可以打開xuanze.m(這個文件是自動生成的)在function pushbutton3_Callback(hObject, eventdata, handles)下添加代碼:close(gcf);lisan(handles)則點擊“離散時間信號的離散時間系統(tǒng)”按鈕可調(diào)用界面 “離散時間信號和離散時間系統(tǒng)”,如上圖右所示。退出實驗系統(tǒng)按鈕的callback為:退出界面代碼:close(gcf);denglu(handles)其他按鈕的實現(xiàn)與“離散時間信號和離散時間系統(tǒng)”的按鈕相似。3.3離散時間信號和離散時間系統(tǒng)的GUI界面的

31、設(shè)計與實現(xiàn)1、離散時間信號和離散時間系統(tǒng)靜態(tài)界面的設(shè)置于前面相似,靜態(tài)界面 點3.3.1 離散時間信號的設(shè)計與實現(xiàn)將Static Text、Edit Text、Push Button、Axes控件排好位置,調(diào)整大小,并修改各個控件的string屬性,就可以制作好“離散時間信號”的靜態(tài)界面,如下圖所示:在靜態(tài)界面設(shè)計好之后,編寫各個按鈕的callback函數(shù),就可以實現(xiàn)界面的功能。各個callback函數(shù)為:1、 取樣序列:yi=str2num(get(handles.edit1,'string');fu=str2num(get(handles.edit12,'strin

32、g');k=(yi-10):(yi+10);x1=(k-yi)=0;x2=x1*fu;subplot(3,3,1);stem(k,x2); title('取樣序列的幅度');xlabel('x(n)');ylabel('幅值');2、 階躍序列yi=str2num(get(handles.edit7,'string');fu=str2num(get(handles.edit13,'string');k=(yi-10):(yi+10);x1=k>=yi;x2=x1*fu;subplot(3,3,1);s

33、tem(k,x2); title('階躍序列的幅度');xlabel('x(n)');ylabel('幅值');3、矩形序列fu=str2num(get(handles.edit8,'string');l=str2num(get(handles.edit14,'string');k=-10:l+4;x1=k>=0;x2=k>=l;x3=x1-x2;x4=x3*fu;subplot(3,3,1);stem(k,x4); title('矩形序列的幅度');xlabel('x(n)&#

34、39;);ylabel('幅值');4、復(fù)指數(shù)序列g(shù)lobal f p%聲明全局變量,f為復(fù)指數(shù)序列的阻尼系數(shù),p為序列的數(shù)字域頻率f=str2num(get(handles.edit9,'string'); %從按鈕右邊的edit文本框中獲取用戶輸入的阻尼系數(shù)p=str2num(get(handles.edit18,'string');n = -10 :1: 10;x=exp(f*n+j*p*n); %對復(fù)指數(shù)序列x進行初始化subplot(3,3,1); stem(n,abs(x); title('復(fù)指數(shù)序列的幅值');xla

35、bel('x(n)');ylabel('x(n)') %畫出復(fù)指數(shù)序列x的幅度subplot(3,3,4); stem(n,(180/pi)*angle(x);title('復(fù)指數(shù)序列的相位');xlabel('x(n)');ylabel('phax(n)'); %畫出復(fù)指數(shù)序列x的相位set(handles.text3,'string','復(fù)指數(shù)序列定義為x(n)=exp(an+jwn)','這里a被稱為阻尼系數(shù),w為數(shù)字域頻率,單位為弧度', '復(fù)指數(shù)序列

36、的幅度|x(n)|=exp(an),相角argx(n)=wn','注意:當(dāng)w為的倍數(shù)時,輸入時應(yīng)寫成pi,乘用*表示,除用/表示', 'HorizontalAlignment', 'left' ,'FontSize',12 )5、實指數(shù)序列k=-5:20;a=str2num(get(handles.edit10,'string');x1=a.k;subplot(3,3,1);stem(k,x1);title('實指數(shù)序列');xlabel('x(n)');ylabel(

37、9;幅值');6、正弦序列k=0:0.1:39;a=str2num(get(handles.edit11,'string');f=str2num(get(handles.edit16,'string');p=str2num(get(handles.edit17,'string');fk=a*sin(pi*2*k*f+p);subplot(3,3,1);stem(k,fk);title('正弦序列');xlabel('x(n)/pi');ylabel('幅值');各序列輸入值運行后如下圖所示:

38、取樣序列: 階躍序列: 矩形序列:實指數(shù)序列: 正弦型序列: 復(fù)指數(shù)序列:3.3.2 線性卷積的設(shè)計與實現(xiàn)“線性卷積”界面所用到的控件有:若干個靜態(tài)文本框(static text)、三個可編輯文本框(edit text)、三個坐標(biāo)(Axes)、三個按鈕(push button)以與兩個下拉式菜單(popupmenu).將這些所需要的控件從GUI設(shè)計窗口左側(cè)的工具欄中直接拖拽到對象設(shè)計區(qū),調(diào)整好位置并修改各個控件的string屬性(即在string屬性中添加所需要的文字),就可以設(shè)計出如下圖的靜態(tài)界面,其中注意在修改下拉式菜單(popupmenu)的string屬性時每個選項的文字須占一行,兩個

39、選項不能寫在同一行中。在靜態(tài)界面搭建好之后,編寫各個控件的callback函數(shù),就可以實現(xiàn)界面的功能。靜態(tài)界面:因計算機只能處理有限長序列,因此在本系統(tǒng)中所給出的序列也是有限長的,并且序列的長度可由用戶自定義輸入。各個callback函數(shù)如下所示: 卷積:A=str2num(get(handles.edit3,'string');a=A;x=handles.y1;h=handles.y2;y1=conv(x,h);y=a*y1;ny=length(y1);n=0:ny-1;axes(handles.axes3);stem(n,y);矩形序列和實指數(shù)序列g(shù)lobal NN=str

40、2num(get(handles.edit2,'string'); %從菜單左邊的edit text控件中獲取序列的長度val = get(hObject,'Value'); %獲得句柄的value(值) 屬性str = get(hObject, 'String'); %獲得句柄的String(容)屬性axes(handles.axes2);%設(shè)置當(dāng)前圖形繪制在坐標(biāo)1(axes1)中switch valcase 1n=0: N-1;x1=n>=0;x2=n>=N;y2=x1-x2;axes(handles.axes2);stem(n,

41、 y2); %畫出矩形序列y1,并且矩形的長度N是由用戶規(guī)定的case 2n=0: N-1;y2=0.5.n;axes(handles.axes2);stem(n,y2); end退出close(gcf);lisan(handles)輸入值后如下個圖所示:矩形序列*矩形序列: 實指數(shù)序列*矩形序列:實指數(shù)序列*實指數(shù):3.3.3 離散時間系統(tǒng)的設(shè)計與實現(xiàn)離散時間系統(tǒng)的靜態(tài)界面如下圖所示,與上一個界面相似,將界面上所用到的控件從GUI設(shè)計窗口左側(cè)的工具欄中直接拖拽到對象設(shè)計區(qū),并調(diào)整大小、位置與修改各個控件的string屬性,就制作好了離散時間系統(tǒng)的靜態(tài)界面。在靜態(tài)界面設(shè)計好之后,編寫各個按鈕的

42、callback函數(shù),就可以實現(xiàn)界面的功能。靜態(tài)界面:各個callback函數(shù)如下:1、取樣序列、矩形序列、實指數(shù)、正弦型序列val=get(hObject,'Value');str=get(hObject,'String');axes(handles.axes1);switch val case 1 n=-10:20; y1=zeros(1,10),1,zeros(1,20); stem(n,y1) %矩形序列 case 2n1=-10;n2=5;n3=20;n0=0; n=n1:n3; n4=0;y1=(n>=n0+n4)&(n<n2+n

43、4); stem(n,y1); %取樣序列 case 3 n=-10:20; y1=power(0.5,n); %實指數(shù)序列 stem(n,y1) case 4 n=-10:1:20; y1=sin(0.5*pi*n) ;%正弦序列 stem(n,y1)end handles.y1=double(y1); guidata(hObject,handles);2、系統(tǒng)響應(yīng)y(n)global b0 b1 a0 a1 a2b0=str2num(get(handles.b0,'string'); %從b0的edit text控件中獲取b0的值b1=str2num(get(handles

44、.b1,'string');a0=str2num(get(handles.a0,'string');a1=str2num(get(handles.a1,'string');a2=str2num(get(handles.a2,'string');A=a0 a1 a2; %將序列x的系數(shù)向量賦給AB=b0 b1; n = -10 : 20; x=handles.y1 ; %將用戶所選擇的序列x(n)賦給xy=filter(B,A,x); %通過filter函數(shù)求系統(tǒng)的響應(yīng)axes(handles.axes2);stem(n,y,

45、9;fill'); %將系統(tǒng)響應(yīng)y(n)序列繪制在坐標(biāo)2(axes2)中,線端是實心圓點3、系統(tǒng)的單位取樣響應(yīng)h(n)global b0 b1 a0 a1 a2A=a0 a1 a2;B=b0 b1;n = -10 : 20;x=n=0; %令序列x(n)為單位取樣序列h=filter(B,A,x);%求系統(tǒng)單位取樣響應(yīng)axes(handles.axes2);stem(n,h,'fill');function pushbutton3_Callback(hObject, eventdata, handles)close(gcf);lisan(handles)% hObjec

46、t handle to pushbutton3 (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB% handles structure with handles and user data (see GUIDATA)global b0 b1 a0 a1 a2b0=str2num(get(handles.b0,'string'); %從b0的edit text控件中獲取b0的值b1=str2num(get(handles.b1,'string');a0=str2

47、num(get(handles.a0,'string');a1=str2num(get(handles.a1,'string');a2=str2num(get(handles.a2,'string');A=a0 a1 a2; %將序列x的系數(shù)向量賦給AB=b0 b1; n = -10 : 20; x=handles.y1 ; %將用戶所選擇的序列x(n)賦給xy=filter(B,A,x); %通過filter函數(shù)求系統(tǒng)的響應(yīng)axes(handles.axes2);stem(n,y,'fill');%將系統(tǒng)響應(yīng)y(n)序列繪制在坐

48、標(biāo)2(axes2)中,線端是實心圓點系統(tǒng)響應(yīng) 系統(tǒng)的單位取樣響應(yīng)3.3.4 離散時間信號傅里葉變換與系統(tǒng)頻率響應(yīng)的設(shè)計與實現(xiàn)“離散時間信號傅里葉變換與系統(tǒng)頻率響應(yīng)”的靜態(tài)界面如下圖所示,在靜態(tài)界面設(shè)計好之后,編寫各個按鈕的callback函數(shù),就可以實現(xiàn)界面的功能。靜態(tài)界面:各個callback函數(shù)為:1、取樣序列、矩形序列、實指數(shù)序列、正弦序列g(shù)lobal x1 f pf=str2num(get(handles.edit6,'string');p=str2num(get(handles.edit7,'string');val = get(hObject,

49、9;Value'); %獲得句柄的value(值) 屬性str = get(hObject, 'String'); %獲得句柄的String(容)屬性switch valcase 1n = -10 : 10;x=n=p; %對取樣序列x進行初始化x1=f.*x;case 2n=-10:10;x=n>=p-n>=p+5;x1=f.*x;case 3n=-10:10;x1=f.*2.(n+p);case 4n=-10:10;x1=f.*sin(2*pi*(n+p);endhandles.x1 = double(x1)'%將序列y1轉(zhuǎn)換成double型的數(shù)

50、據(jù)guidata(hObject, handles);%保存句柄2、離散時間信號的傅里葉變換(DTFT)global Xn = -10 : 10;x = handles.x1; %將用戶所選擇的序列x(n)賦給xk=0:500;w=(pi/500)*k; X=x'*(exp(-j*pi/500).(n'*k);%求序列x(n)的離散傅里葉變換(DTFT)magX=abs(X); angX=angle(X);axes(handles.axes1);plot(w/pi,magX);title('幅度響應(yīng)'); %將序列x(n)的DTFT的幅度繪制在坐標(biāo)1(tu1)中

51、,離散時間信號的DTFT是一個復(fù)數(shù),且是頻率 的連續(xù)函數(shù)axes(handles.axes2); plot(w/pi,angX);title('相位響應(yīng)');%將序列x(n)的DTFT的相位繪制在坐標(biāo)2(tu2)中3、系統(tǒng)頻率響應(yīng)global a0 a1 b0a0=str2num(get(handles.edit1,'string'); %從a0的edit text控件中獲取a0的值a1=str2num(get(handles.edit2,'string');a2=str2num(get(handles.edit3,'string'

52、;);b0=str2num(get(handles.edit4,'string');b1=str2num(get(handles.edit5,'string');b=b0 b1; %將序列x的系數(shù)向量賦給ba=a0,a1,a2;H,w=freqz(b,a,400); %利用函數(shù)freqz求系統(tǒng)的頻率響應(yīng)magH=abs(H);angH=angle(H);axes(handles.axes1);plot(w/pi,magH);title('幅度響應(yīng)'); %將系統(tǒng)頻率響應(yīng)的幅度繪制在坐標(biāo)1(tu1)中,系統(tǒng)頻率響應(yīng)是一個復(fù)數(shù),且是頻率 的連續(xù)函數(shù)a

53、xes(handles.axes2);plot(w/pi,angH);title('相位響應(yīng)');輸入之后如下圖所示:離散時間信號的傅里葉變換(DTFT) 系統(tǒng)頻率響應(yīng)3.3.5 信號取樣的設(shè)計與實現(xiàn)“信號取樣”的靜態(tài)界面的制作方法與前面的界面有一點不同的是:它置了一圖片來演示整個信號取樣流程,界面所需要的控件,如按鈕、坐標(biāo)框、下拉菜單等都是按照圖片指定的位置布局的。圖片制作完成后,只需將在GUI對象設(shè)計區(qū)所布置好的幾個控件的string屬性修改完,信號取樣的靜態(tài)界面基本就制作完成了。在靜態(tài)界面設(shè)計好之后,編寫各個按鈕的callback函數(shù),就可以實現(xiàn)界面的功能?!靶盘柸印钡?/p>

54、靜態(tài)界面如下圖所示,界面上展示了信號取樣的詳細(xì)流程,可以讓用戶對信號取樣的過程一目了然。各個callback函數(shù)為:1、取樣信號、矩陣信號、實指數(shù)信號、正弦信號val = get(hObject,'Value'); str = get(hObject, 'String');axes(handles.axes1);switch val case 1t = -5:0.01: 10;y=t>=0; %產(chǎn)生單位階躍信號x=sym('Heaviside(t)'); %將單位階躍信號用sym聲明,便于求其傅里葉變換plot(t,y);case 2t=-5:0.01:10;y=t>=0-t>=2;x=sym('Heaviside(t)');plot(t,y);case 3t=-5:0.01:10;y=3*2.t;x=sym('Heaviside(t)

溫馨提示

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

評論

0/150

提交評論