版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、<p><b> 摘要</b></p><p> 隨著信息技術的不斷發(fā)展,數字信號處理已成為一個極其重要的學科和技術領域,在通信、語音、圖像、遙感、生物工程等眾多領域得到了廣泛的應用。數字信號處理的核心內容主要是信號的獲取、傳輸和處理、識別及綜合等。信號是信息的載體,系統(tǒng)是信息處理的手段。因此,為了更好的研究信號和系統(tǒng)的基本理論與方法,使同學們更好地理解和掌握數字信號處理的理論
2、知識,在實驗過程中,借助MATLAB這個平臺來進行輔助設計。</p><p> MATLAB是用于算法開發(fā)、數據可視化、數據分析以及數值計算的高級技術計算語言和交互式環(huán)境。作為強大的科學計算平臺,它幾乎滿足所有的計算要求。隨著對仿真和程序設計通用性及可視化需求的日益增加,MATLAB著重改善了圖形用戶界面的制作,極大地滿足了用戶的需求。 </p><p> MATLAB的GUID是專門
3、用于圖形用戶界面的快速開發(fā)環(huán)境,本設計利用MATLAB的GUIDE工具箱制作了一套輔助“數字信號處理”課程教學的實驗軟件包。該實驗軟件包是由一系列形象的圖形用戶界面組成,每個界面以坐標窗口、彈出框、按鍵、動態(tài)文本框等為基本部分,構建了較為完善和友好的人機交互方式,使用便捷。</p><p> 關鍵詞 數字信號處理;GUI;教學實驗;離散傅里葉變換;數字濾波器</p><p><b
4、> 目 錄</b></p><p><b> 摘要1</b></p><p><b> 第1章 3</b></p><p> 1.1設計內容與要求 3</p><p> 1.2 MATLAB GUI的簡介與特點4</p><p>
5、 第2章 基本理論4</p><p> 2.1 離散時間信號和離散時間系統(tǒng)4</p><p> 2.2 離散傅里葉變換及其快速算法5</p><p> 2.3 數字濾波器的原理和設計6</p><p> 2.4 雙音多頻信號檢測和語音濾波7</p><p> 第3章 系統(tǒng)GUI界面設計與實現8&l
6、t;/p><p><b> 3.1 概述8</b></p><p> 3.1.1創(chuàng)建GUI8</p><p> 3.1.2 寫回調函數 CallBack10</p><p> 3.1.3 句柄圖形之間的層次關系11</p><p> 3.1.4 獲取與設置對象屬性11</p&
7、gt;<p> 3.2 用戶登錄界面的設計與實現11</p><p> 3.3 離散時間信號與離散時間系統(tǒng)的GUI界面的設計與實現13</p><p> 3.3.1 離散時間信號的設計與實現14</p><p> 3.3.2 線性卷積的設計與實現16</p><p> 3.3.3 離散時間系統(tǒng)的設計與實現17
8、</p><p> 3.3.4 離散時間信號傅里葉變換及系統(tǒng)頻率響應的設計與實現19</p><p> 3.3.5 信號取樣的設計與實現21</p><p> 3.3.6 Z的正反變換及系統(tǒng)函數的設計與實現23</p><p> 3.4 離散傅里葉變換及其快速算法的GUI界面的設計與實現24</p><p&
9、gt; 3.4.1 離散傅里葉級數(DFS)的設計與實現24</p><p> 3.4.2 離散傅里葉變換(DFT)的設計與實現26</p><p> 3.4.3 循環(huán)卷積的設計與實現28</p><p> 3.4.4 快速傅里葉變換(FFT)30</p><p> 3.4.5 信號譜分析的設計與實現31</p>
10、;<p> 3.5 數字濾波器的GUI界面的設計與實現32</p><p> 3.5.1 巴特沃斯低通濾波器的設計與實現33</p><p> 3.5.2 切比雪夫I型低通濾波器的設計與實現34</p><p> 3.5.3 窗函數法設計FIR低通濾波器的設計與分析35</p><p> 3.5.4 頻率取樣法
11、設計FIR低通濾波器的設計與實現40</p><p> 3.6 雙音多頻信號檢測及語音濾波實驗的GUI界面的設計與實現41</p><p> 3.6.1 雙音多頻(DTMF)信號檢測的設計與實現41 </p><p> 3.6.2語音濾波實驗的設計與實現46
12、 </p><p> 第4章 設計總結和心得47</p><p> 4.1 設計總結..48</p><p> 4.2設計心得..49</p><p><b> 第1章 </b></p><p> 1.1 設
13、計內容與要求</p><p> 本設計任務是利用MATLAB的圖形用戶界面設計向導GUIDE工具箱建立一個與本科數字信號處理理論教學相配套的實驗教學仿真平臺。具體要求如下:</p><p> 1、構建總體結構框架:</p><p> 通過查閱相關資料、熟悉教材(主要針對姚天任,江太輝等編著的《數字信號處理(第3版)》)的內容與結構、研究本課程對實驗的要求,構建
14、一個總體的與教材配套的結構框架;</p><p><b> 2、構建實驗界面:</b></p><p> 要求用MATLAB的GUI中的坐標窗口、彈出框、按鍵、動態(tài)文本框等搭建一系列的仿真友好界面,使得即便不懂MATLAB 語言編程的同學,也可以非常方便地使用和理解;</p><p> 3、實現具體界面的功能:</p>&l
15、t;p> 要求用MATLAB編程語言來實現每一個具體界面的具體實驗功能,以達到對相關內容的仿真。</p><p> 1.2 MATLAB GUI的簡介及特點</p><p> MATLAB 是美國MathWorks公司出品的商業(yè)數學軟件,用于算法開發(fā)、數據可視化、數據分析以及數值計算的高級技術計算語言和交互式環(huán)境,主要包括MATLAB和Simulink兩大部分。MATALB
16、可以創(chuàng)建圖形用戶界面GUI ( GraphicalUser Interface) ,它是用戶和計算機之間交流的工具。MATLAB 將所有GUl 支持的用戶控件都集成在這個</p><p> MATLAB將所有圖形用戶界面(Graphical User Interface,簡稱GUI)支持的用戶控件都集成在GUIDE工具箱中,并提供界面外觀、屬性和行為響應方式的設置方法。圖形用戶界面(GUI)是指由窗口、菜單、對
17、話框等各種圖形對象組成的用戶界面。在MATLAB中,基本的圖形用戶界面對象包含:下拉及彈出式菜單對象,多種界面元素如按鈕(PUSH BUTTON)、選項鈕(RADIO BUTTON)、可編輯文本框(EDIT BOX)、靜態(tài)文本框(STATIC TEXT)、檢查框(CHECK BOXES)、坐標(AXES)等。根據這些圖形對象,可以設計出界面友好、操作方便的圖形用戶界面[9]。</p><p> 在設計一個圖形用
18、戶界面時,只需在GUI設計窗口左邊的控件工具欄中選擇一個所需要的對象,以拖拽的方式在對象設計區(qū)生成該對象,其對象的創(chuàng)建方式方便、簡單。創(chuàng)建了所需要的對象之后,可以在該控件的從callback函數中編寫M程序,以實現對象的功能。 </p><p><b> 第2章 基本理論</b></p><p> 2.1 離散時間信號和離散時間系統(tǒng)</
19、p><p> 離散時間信號和離散時間系統(tǒng)的知識首先包括序列的表示法和基本類型,線性非移變系統(tǒng)以及系統(tǒng)的穩(wěn)定性和因果性問題,卷積;其次包括離散時間信號的傅里葉變換(DTFT)和系統(tǒng)的頻率響應的概念,及離散時間信號的取樣等基本知識;最后,包括z變換的定義和收斂域、Z的正反變換的定理和性質。</p><p> 在離散時間系統(tǒng)中,信號是用離散時間的數字序列表示的。離散時間信號有一些典型常用的基本序
20、列,即單位取樣序列、單位階躍序列、矩形序列、實指數序列、復指數序列、正弦型序列。下面分別介紹這些典型序列的基本形式。</p><p><b> 單位取樣序列</b></p><p><b> ?。?-1)</b></p><p> 注意與之見的區(qū)別,是一個確定的物理量,而不是確定的物理量,而是一種數學抽象。</p
21、><p><b> 單位階躍序列</b></p><p><b> ?。?-2)</b></p><p> 與連續(xù)階躍信號不同,在=0時,單位階躍序列是有定義的。</p><p><b> 矩形序列</b></p><p><b> ?。?-
22、3)</b></p><p> N表示矩形序列的長度。</p><p><b> 實指數序列</b></p><p> 實指數序列有單邊和雙邊實指數序列之分,大多數情況下,所要研究的都是單邊實指數序列,因此這里只介紹單邊實指數序列,單邊實指數序列可表示為:</p><p><b> (2-4
23、)</b></p><p><b> 復指數序列</b></p><p><b> (2-5)</b></p><p> 式中,通常稱為阻尼系數,稱為數字域頻率(單位為弧度)。</p><p><b> 正弦型序列</b></p><p&
24、gt;<b> ?。?-6)</b></p><p> 式中,A為幅度,稱為數字域頻率,為初相(單位為弧度)。</p><p> 信號處理的目的之一就是要把信號變換成人們需要的某種形式。各種離散時間系統(tǒng)就是把輸入序列變換成所需要的輸出序列的系統(tǒng)。如果一個系統(tǒng)滿足疊加原理,且該系統(tǒng)的響應與輸入信號施加于系統(tǒng)的時刻無關,則該系統(tǒng)是線性非移變系統(tǒng)(LSIS)。線性非移變
25、系統(tǒng)有一個重要的特性,它的輸入序列與輸出序列之間存在著線性卷積關系。若和分別為系統(tǒng)的輸入和輸出,為該系統(tǒng)的單位取樣響應,對于線性非移變系統(tǒng)而言,有如下線性卷積關系:</p><p><b> (2-7)</b></p><p><b> 其中*表示卷積。</b></p><p> 與連續(xù)時間信號的傅里葉變換定義相類似
26、,離散時間信號x(n)的傅里葉變換定義為:</p><p><b> ?。?-8)</b></p><p> 系統(tǒng)的單位取樣響應h(n)的DTFT為系統(tǒng)的頻率響應,即</p><p><b> ?。?-9)</b></p><p> 離散時間信號常常是由連續(xù)時間信號經周期取樣得到的。連續(xù)信號經過
27、取樣(理想取樣)后輸出為:</p><p><b> (2-10)</b></p><p> 系統(tǒng)頻域分析方法還有Z變換,Z變換是離散時間信號的一種重要的變換。Z變換的定義為:</p><p><b> (2-11)</b></p><p> 2.2 離散傅里葉變換及其快速算法</p&
28、gt;<p> 這里所要介紹的離散傅里葉變換(DFT)時域和頻域都是離散的,而離散傅里葉變換的快速算法即快速傅里葉變換(FFT)在處理有限長序列時起著極其重要的作用。這部分所包含的知識有:周期序列的傅里葉級數及其性質;有限長序列的傅里葉變換表示——離散傅里葉變換,及離散傅里葉變換的性質,循環(huán)卷積等;快速傅里葉變換,及由FFT進行信號譜分析等。</p><p> 一個周期為N的周期序列可以表示為&
29、lt;/p><p> , (2-12)</p><p> 周期序列的離散傅里葉級數(DFS)變換對如下:</p><p> ?。?-13) (2-14)</p><p> 一個周期序列雖然是無限長的,但是只要知道它的一個周期就可知道它的整個序列。這正是周期序列與有限長序列之間的聯系。</p
30、><p> 有限長序列的傅里葉變換稱為離散傅里葉變換(DFT),DFT的表達式為:</p><p><b> ?。?-15)</b></p><p> 有限長序列的DFT即仍是有限長序列。</p><p> 在MATLAB,我們可以直接調用函數fft( )和ifft( )來計算序列的FFT和IFFT。下圖2-1列出了當
31、N=8時的時間抽選的FFT流程圖,頻率抽選的FFT流程圖與時間抽選的FFT流程圖相差不多,故不再畫出。</p><p> 圖2-1 時間抽選的FFT流程圖(N=8)</p><p> 2.3 數字濾波器的原理和設計</p><p> 本科中我們學習了兩類重要的數字濾波器:IIR數字濾波器和FIR濾波器。這兩類數字濾波器的設計方法是完全不同的。設計IIR濾波器
32、時,通常是先設計一個模擬濾波器,再用沖激響應不變法或雙線性變換法將所設計的模擬濾波器轉換成數字濾波器。模擬濾波器器的設計主要有巴特沃斯濾波器、切比雪夫I型和II型濾波器等。巴特沃斯濾波器的特點是其幅度響應在通帶內具有最平坦的特性,且通帶和阻帶內幅度特性是單調變化的。切比雪夫I型濾波器在通帶內的幅度響應時單調減的,而在阻帶內的幅度響應時等波紋的。FIR濾波器則不可通過模擬濾波器來設計,因此FIR濾波器沒有現成的設計公式,FIR數字濾波器的
33、設計方法主要有窗函數法和頻率取樣法等。在使用窗函數法設計FIR濾波器時,常用的窗有矩形窗(Boxcar)、巴特利特(Bartlett)窗(三角窗)、漢寧(Hanning)窗(升余弦窗)、哈明(Hamming)窗、布萊克曼(Blackman)窗、凱澤(Kaiser)窗等6種。</p><p> 2.4 雙音多頻信號檢測和語音濾波</p><p> 雙音多頻 (Dual Tone Mult
34、i Frequency)信號應用在許多場合,最常見的是電話號碼的撥音。電話機號碼盤上每一個號碼對應一個DTMF音,它包含兩個不同頻率的正弦信號的疊加,檢測DTMF音就是要檢測這兩個正弦信號的頻率,從而判斷出按鍵號碼。</p><p> 表2-1 雙音多頻信號的各個號碼與頻率的對應表</p><p> 電話號碼的雙音多頻信號的兩個頻率的對應情況如表所示。比如按鍵1對應的DTMF音包含頻率
35、分別為和的兩個正弦信號之和,檢測到信號由這兩個頻率組成,就知道號碼為1。</p><p> 本系統(tǒng)模擬了電話機的鍵盤,按電話機鍵盤的順序列出了1到#,并且可以從左邊的坐標中可以看出各個按鍵的DTMF音信號,詳細的實現過程見3.6.1節(jié)。</p><p> 語音濾波實驗, 配合操作系統(tǒng)支持的語音媒體播放器可以很方便地將經過數字處理后的語音效果直觀地體現出來, 這對于學生深刻理解數字信號處
36、理中抽象數學運算的現實物理意義,很有幫助。對于單聲道的語音數據在MATLAB中是一維數組,在MATLAB中有2個處理.wav格式語音的函數, 一個是將語音流文件轉換為數組格式數據的函數wavread, 另一個是將數組格式數據轉換為語音流文件的函數wavwrite[8].</p><p> 第3章 系統(tǒng)GUI界面設計與實現</p><p><b> 3.1 總體框架</b
37、></p><p> 圖3-1 系統(tǒng)結構框圖</p><p> 完成該教學實驗系統(tǒng),總體的制作步驟如下:</p><p> (1) 分析系統(tǒng)所要求實現的主要功能,明確設計任務,構思出一個總體的結構框架。</p><p> (2) 確定該系統(tǒng)包含的數字信號處理教學內容,在稿紙上設計各個界面布局。</p><p
38、> (3) 根據手繪的界面草圖,利用MATLAB的GUIDE工具箱搭建GUI靜態(tài)界面。</p><p> (4) 編寫m程序實現界面功能,即編寫界面上各個控件的回調函數,以達到對相關內容的仿真。</p><p> (5) 系統(tǒng)總體的調試和完善。</p><p> 3.1.1創(chuàng)建GUI</p><p> 創(chuàng)建Matlab GUI
39、界面通常有兩種方式:第一種,在 .m文件中動態(tài)添加,即自己編寫程序,設置參數;第二種,使用GUIDE幫助創(chuàng)建GUI;在Command 里面輸入 GUIDE 或者從菜單里面,或者從快捷按鈕均可進入 GUIDE。</p><p> 新建并且保存后,會生成相應的fig文件和m文件,在Layout編輯視圖中,可以使用如下工具:</p><p> Layout Editor:布局編輯器;<
40、/p><p> Alignment Tool:對齊工具;</p><p> Property Inspector:對象屬性觀察器;</p><p> Object Browser:對象瀏覽器;</p><p> Menu Editor:菜單編輯器。</p><p> 2、新建一個布局(窗口),可以在新窗口中添加如
41、下控件</p><p> 1.靜態(tài)文本(Static Text) 2.編輯框(Edit Text)控件</p><p> 3.列表框(Listbox)控件 4.滾動條(Slider)控
42、件</p><p> 5.按鈕(Push Button)控件 6.開關按鈕(Toggle Button)控件</p><p> 7.單選按鈕(Radio Button)控件 8.按鈕組(Button Group)控件</p><p> 9
43、.檢查框(Check Box)控件 10.列表框(Listbox)控件</p><p> 11.彈出式菜單(Popup Menu)控件 12.坐標軸(Axes)控件</p><p> 13.面板(Panel)控件</p><p> 每一個控件都有自己
44、的屬性常規(guī)屬性。</p><p><b> 1.控件風格和外觀</b></p><p> ?。?)BackgroundColor:設置控件背景顏色,使用[R G B]或顏色定義。</p><p> (2)CData:在控件上顯示的真彩色圖像,使用矩陣表示。</p><p> ?。?)ForegroundColor:文
45、本顏色。</p><p> (4)String屬性:控件上的文本,以及列表框和彈出菜單的選項。</p><p> (5)Visible:控件是否可見。</p><p><b> 2.對象的常規(guī)信息</b></p><p> ?。?)Enable屬性: 表示此控件的使能狀態(tài),設置為on”,表示可選,為“off”時則表
46、示不可。</p><p> ?。?)Style:控件對象類型。</p><p> ?。?)Tag:控件表示(用戶定義)。</p><p> (4)TooltipString屬性:提示信息顯示。當鼠標指針位于此控件上時,顯示提示信息。</p><p> ?。?)UserData:用戶指定數據。</p><p> ?。?
47、)Position:控件對象的尺寸和位置。</p><p> ?。?)Units:設置控件的位置及大小的單位。</p><p> ?。?)有關字體的屬性,如 FontAngle, FontName等。</p><p> 3.控件回調函數的執(zhí)行</p><p> (1)BusyAction:處理回調函數的中斷。有兩種選項:即Cancel:取
48、消中斷事件,queue:排隊(默認設置)。</p><p> (2)ButtonDownFcn屬性:按鈕按下時的處理函數。</p><p> (3)CallBack屬性:是連接程序界面整個程序系統(tǒng)的實質性功能的紐帶。該屬性值應該為一個可以直接求值的字符串,在該對象被選中和改變時,系統(tǒng)將自動地對字符串進行求值。</p><p> ?。?)CreateFcn:在對象
49、產生過程中執(zhí)行的回調函數。</p><p> (5)DeleteFcn:刪除對象過程中執(zhí)行的回調函數。</p><p> ?。?)Interruptible屬性:指定當前的回調函數在執(zhí)行時是否允許中斷,去執(zhí)行其他的函數。</p><p> 4.控件當前狀態(tài)信息</p><p> (1)ListboxTop:在列表框中顯示的最頂層的字符串
50、的索引。</p><p> (2)Max:最大值。</p><p> ?。?)Min:最小值。</p><p> ?。?)Value:控件的當前值。</p><p> 可以使用屬性編輯器來設置屬性</p><p> 3.1.2寫回調函數 CallBack </p><p> 每個控件都有
51、幾種回調函數,右鍵選中的控件一般會有如下菜單:</p><p> 然后就可以跳轉到相應的 Editor中編輯代碼,GUIDE會自動生成相應的函數體,函數名,名稱一般是控件 Tag+ Call類型名參數有三個( hObject, eventdata, handles),其中hObject為發(fā)生事件的源控件,eventdata為事件數據結構,handles為傳入的對象句柄,CreateFcn 是在控件對象創(chuàng)建的時候
52、發(fā)生(一般為初始化樣式,顏色,初始值等),DeleteFcn 實在空間對象被清除的時候發(fā)生,ButtonDownFcn和KeyPressFcn分別為鼠標點擊和按鍵事件Callback,CallBack為一般回調函數,因不同的控件而已異。例如按鈕被按下時發(fā)生,下拉框改變值時發(fā)生,sliderbar 拖動時發(fā)生等等。</p><p> 3.1.3 句柄圖形之間的層次關系</p><p>
53、可以創(chuàng)建圖形句柄的常見函數:</p><p> 1.figure函數:創(chuàng)建一個新的圖形對象。</p><p> 2.newplot函數:做好開始畫新圖形對象的準備。</p><p> 3.axes函數:創(chuàng)建坐標軸圖形對象。</p><p> 4.line函數:畫線。</p><p> 5.patch函數:填充
54、多邊形。</p><p> 6.surface函數:繪制三維曲面。</p><p> 7.image函數:顯示圖片對象。</p><p> 8.uicontrol函數:生成用戶控制圖形對象。 </p><p> 9.uimenu函數:生成圖形窗口的菜單中層次菜單與下一級子菜單。</p><p><b>
55、; 幾個實用的小函數:</b></p><p> uigetfile 選擇文件對話框</p><p> uiputfile 保存文件對話框</p><p> uisetcolor 設置顏色對話框</p><p> fontsetcolor 設置字體對話框</p><p> msgbox
56、; 消息框 </p><p> warndlg 警告框</p><p> 3.1.4 獲取與設置對象屬性</p><p><b> 常用函數:</b></p><p> gcf函數:獲得當前圖形窗口的句柄</p><p> gc
57、a函數:獲得當前坐標軸的句柄</p><p> gco函數:獲得當前對象的句柄</p><p> gcbo函數:獲得當前正在執(zhí)行調用的對象的句柄</p><p> gcbf函數:獲取包括正在執(zhí)行調用的對象的圖形句柄</p><p> delete函數:刪除句柄所對應的圖形對象</p><p> findobj
58、函數:查找具有某種屬性的圖形對象</p><p><b> 設置方法:</b></p><p> ?。?)get函數返回某些對象屬性的當前值。例如:p=get(obj,'Position'); </p><p> ?。?)函數set改變句柄圖形對象屬性,例如:set(obj,'Pos
59、ition',vect);</p><p> 3.2用戶登錄界面的設計與實現</p><p> 登錄界面的設計過程是:首先打開MALAB軟件中的工具箱GUIDE左下角有個點擊鼠標右鍵選擇然后把鼠標點到 MALAB出選擇GUIDE然后進行靜態(tài)界面的設計。登陸靜態(tài)界面設計:在GUI設計窗口左側的工具欄中直接拖拽3個靜態(tài)文本框(static text)、兩個可編輯文本框(edi
60、t text)、一個按鈕到對象設計區(qū),調整好位置,在靜態(tài)文本框及按鈕的string屬性中修改相應的文字,這樣用戶登錄靜態(tài)界面就制作完成,當然為了美觀,也可以先在美圖秀秀里把靜態(tài)文本框里的文字進行處理。接下來只需在“登錄”按鈕的回調(Callback)函數中編寫相應的程序并把背景設置成如下圖所示的背景圖片,登錄界面的制作就完成了。①登陸的靜態(tài)界面 ② 點擊后 </p>
61、<p> ③輸入用戶名 ④登陸成功</p><p> ?、佟暗卿洝卑粹o的callback函數中的m語言代碼如下:</p><p> function pushbutton1_Callback(hObject, eventdata, handles)</p><p> users = ge
62、t(handles.user,'string'); %用戶名的獲取</p><p> codes = get(handles.code,'string');</p><p> if strcmp(users,'盧惠婷')&&strcmp(codes,'1006052240&
63、#39;)</p><p> h = msgbox('登陸成功!');</p><p> uiwait(h);</p><p> close(gcf);</p><p> xuanze(handles)</p><p> else errordlg('用戶名或密碼錯誤!'
64、, '錯誤提示');</p><p><b> end</b></p><p> ?、凇氨尘皥D片”的callback函數如下:</p><p> function untitled_OpeningFcn(hObject, eventdata, handles, varargin)</p><p>
65、ha=axes('units','normalized','position',[0 0 1 1]);</p><p> uistack(ha,'down')</p><p> II=imread('24.jpg');</p><p><b> image(II)<
66、/b></p><p> colormap gray</p><p> set(ha,'handlevisibility','off','visible','off');</p><p> 登錄成功后,用戶可以進入各章的選擇界面,如下圖左所示,用戶可以根據自己的需要選擇點擊相應的按鈕,進入各
67、章的界面。通過點擊“退出實驗系統(tǒng)”可以退出這個界面。這個界面主要是有按鈕控件構成,其靜態(tài)界面的設計步驟與登錄界面的設計步驟相似。</p><p> ①選擇主界面 ②離散時間信號和時間系統(tǒng)的界面</p><p> 該界面上的各個鏈接功能仍主要是通過設置控件的回調函數callback屬性實現的。以“離散時間信號的離散時間系統(tǒng)
68、”的按鈕為例,“離散時間信號和離散時間系統(tǒng)”的按鈕對應的Tag屬性為pushbutton3(tag的設置要與callback里的一致)。在GUIDE編輯界面中選中該控件,點擊右鍵選中View Callback->Callback菜單項就可以打開xuanze.m(這個文件是自動生成的)</p><p> 在function pushbutton3_Callback(hObject, eventdata, h
69、andles)下添加</p><p><b> ?、冁溄哟a:</b></p><p> close(gcf);</p><p> lisan(handles)</p><p> 則點擊“離散時間信號的離散時間系統(tǒng)”按鈕可調用界面 “離散時間信號和離散時間系統(tǒng)”,如上圖右所示。退出實驗系統(tǒng)按鈕的callback為:
70、</p><p><b> ?、谕顺鼋缑娲a:</b></p><p> close(gcf);</p><p> denglu(handles)</p><p> 其他按鈕的實現與“離散時間信號和離散時間系統(tǒng)”的按鈕相似。</p><p> 3.3離散時間信號和離散時間系統(tǒng)的GUI界面的
71、設計與實現</p><p> 1、離散時間信號和離散時間系統(tǒng)靜態(tài)界面的設置于前面相似,</p><p> ?、凫o態(tài)界面 ② 點</p><p> 3.3.1 離散時間信號的設計與實現</p><p> 將Static Text、Edit Text、Push B
72、utton、Axes控件排好位置,調整大小,并修改各個控件的string屬性,就可以制作好“離散時間信號”的靜態(tài)界面,如下圖所示:</p><p> 在靜態(tài)界面設計好之后,編寫各個按鈕的callback函數,就可以實現界面的功能。</p><p> 各個callback函數為:</p><p><b> 取樣序列:</b></p&g
73、t;<p> yi=str2num(get(handles.edit1,'string'));</p><p> fu=str2num(get(handles.edit12,'string'));</p><p> k=(yi-10):(yi+10);</p><p> x1=[(k-yi)==0];</p
74、><p><b> x2=x1*fu;</b></p><p> subplot(3,3,1);stem(k,x2); title('取樣序列的幅度');xlabel('x(n)');ylabel('幅值');</p><p><b> 階躍序列</b&
75、gt;</p><p> yi=str2num(get(handles.edit7,'string'));</p><p> fu=str2num(get(handles.edit13,'string'));</p><p> k=(yi-10):(yi+10);</p><p> x1=[k>=
76、yi];</p><p><b> x2=x1*fu;</b></p><p> subplot(3,3,1);stem(k,x2); title('階躍序列的幅度');xlabel('x(n)');ylabel('幅值');</p><p><b> 3、
77、矩形序列</b></p><p> fu=str2num(get(handles.edit8,'string'));</p><p> l=str2num(get(handles.edit14,'string'));</p><p> k=-10:l+4;</p><p> x1=[k>
78、;=0];</p><p> x2=[k>=l];</p><p><b> x3=x1-x2;</b></p><p><b> x4=x3*fu;</b></p><p> subplot(3,3,1);stem(k,x4); title('矩形序列的
79、幅度');xlabel('x(n)');ylabel('幅值');</p><p><b> 4、復指數序列</b></p><p> global f p%聲明全局變量,f為復指數序列的阻尼系數,p為序列的數字域頻率</p><p> f=str2num(get(handles.edit9
80、,'string')); %從按鈕右邊的edit文本框中獲取用戶輸入的阻尼系數</p><p> p=str2num(get(handles.edit18,'string'));</p><p> n = [-10 :1: 10];</p><p> x=exp(f*n+j*p*n);
81、 %對復指數序列x進行初始化</p><p> subplot(3,3,1); stem(n,abs(x)); </p><p> title('復指數序列的幅值');xlabel('x(n)');ylabel('[x(n)]') %畫出復指數序列x的幅度</p><p&
82、gt; subplot(3,3,4); stem(n,(180/pi)*angle(x));</p><p> title('復指數序列的相位');xlabel('x(n)');ylabel('pha[x(n)]'); %畫出復指數序列x的相位</p><p> set(handles.text3,'string
83、9;,{'復指數序列定義為x(n)=exp(an+jwn)','這里a被稱為阻尼系數,w為數字域頻率,單位為弧度', '復指數序列的幅度|x(n)|=exp(an),相角arg[x(n)]=wn','注意:當w為π的倍數時,輸入時π應寫成pi,乘用*表示,除用/表示'}, 'HorizontalAlignment', 'left' ,'
84、;FontSize',12 )</p><p><b> 5、實指數序列</b></p><p><b> k=-5:20;</b></p><p> a=str2num(get(handles.edit10,'string'));</p><p><b>
85、 x1=a.^k;</b></p><p> subplot(3,3,1);stem(k,x1);</p><p> title('實指數序列');xlabel('x(n)');ylabel('幅值');</p><p><b> 6、正弦序列</b></p>
86、<p> k=0:0.1:39;</p><p> a=str2num(get(handles.edit11,'string'));</p><p> f=str2num(get(handles.edit16,'string'));</p><p> p=str2num(get(handles.edit17,'
87、;string'));</p><p> fk=a*sin(pi*2*k*f+p);</p><p> subplot(3,3,1);stem(k,fk);</p><p> title('正弦序列');xlabel('x(n)/pi');ylabel('幅值');</p><p&g
88、t; 各序列輸入值運行后如下圖所示:</p><p> ?、偃有蛄校?② 階躍序列: ③矩形序列:</p><p> ④實指數序列: ⑤正弦型序列: ⑥復指數序列:</p><p> 3.3.2 線性卷積的設計與實現</p><p&g
89、t; “線性卷積”界面所用到的控件有:若干個靜態(tài)文本框(static text)、三個可編輯文本框(edit text)、三個坐標(Axes)、三個按鈕(push button)以及兩個下拉式菜單(popupmenu).將這些所需要的控件從GUI設計窗口左側的工具欄中直接拖拽到對象設計區(qū),調整好位置并修改各個控件的string屬性(即在string屬性中添加所需要的文字),就可以設計出如下圖的靜態(tài)界面,其中注意在修改下拉式菜單(pop
90、upmenu)的string屬性時每個選項的文字須占一行,兩個選項不能寫在同一行中。在靜態(tài)界面搭建好之后,編寫各個控件的callback函數,就可以實現界面的功能。</p><p><b> 靜態(tài)界面:</b></p><p> 因計算機只能處理有限長序列,因此在本系統(tǒng)中所給出的序列也是有限長的,并且序列的長度可由用戶自定義輸入。各個callback函數如下所示:
91、 </p><p><b> ?、倬矸e:</b></p><p> A=str2num(get(handles.edit3,'string'));</p><p><b> a=A;</b></p><p> x=hand
92、les.y1;</p><p> h=handles.y2;</p><p> y1=conv(x,h);</p><p><b> y=a*y1;</b></p><p> ny=length(y1);</p><p><b> n=0:ny-1;</b><
93、/p><p> axes(handles.axes3);</p><p> stem(n,y);</p><p> ?、诰匦涡蛄泻蛯嵵笖敌蛄?lt;/p><p> global N</p><p> N=str2num(get(handles.edit2,'string')); %從菜單左邊
94、的edit text控件中獲取序列的長度</p><p> val = get(hObject,'Value'); %獲得句柄的value(值) 屬性</p><p> str = get(hObject, 'String'); %獲得句柄的String(內容)屬性</p><p> axes(handles.a
95、xes2);%設置當前圖形繪制在坐標1(axes1)中</p><p> switch val</p><p><b> case 1</b></p><p> n=[0: N-1];</p><p> x1=[n>=0];</p><p> x2=[n>=N];&
96、lt;/p><p> y2=[x1-x2];</p><p> axes(handles.axes2);</p><p> stem(n, y2); %畫出矩形序列y1,并且矩形的長度N是由用戶規(guī)定的case 2</p><p> n=[0: N-1];</p><p> y2=0.5.^n
97、;</p><p> axes(handles.axes2);</p><p> stem(n,y2); </p><p><b> end</b></p><p><b> ③退出</b></p><p> close(gcf);</p><p
98、> lisan(handles)</p><p> 輸入值后如下個圖所示:</p><p> ①矩形序列*矩形序列: ② 實指數序列*矩形序列:③實指數序列*實指數: </p><p> 3.3.3 離散時間系統(tǒng)的設計與實現</p><p> 離散時間系統(tǒng)的靜態(tài)界面如下圖所示,與上一個界面相似,將界面上所用到的控件
99、從GUI設計窗口左側的工具欄中直接拖拽到對象設計區(qū),并調整大小、位置及修改各個控件的string屬性,就制作好了離散時間系統(tǒng)的靜態(tài)界面。在靜態(tài)界面設計好之后,編寫各個按鈕的callback函數,就可以實現界面的功能。</p><p><b> 靜態(tài)界面:</b></p><p> 各個callback函數如下:</p><p> 1、取樣
100、序列、矩形序列、實指數、正弦型序列</p><p> val=get(hObject,'Value');</p><p> str=get(hObject,'String');</p><p> axes(handles.axes1);</p><p> switch val</p>&l
101、t;p><b> case 1</b></p><p> n=[-10:20];</p><p> y1=[zeros(1,10),1,zeros(1,20)];</p><p> stem(n,y1) %矩形序列 </p><p><b> case 2</b&
102、gt;</p><p><b> n1=-10;</b></p><p><b> n2=5;</b></p><p><b> n3=20;</b></p><p><b> n0=0; </b></p><p><
103、b> n=n1:n3; </b></p><p><b> n4=0;</b></p><p> y1=[(n>=n0+n4)&(n<n2+n4)]; </p><p> stem(n,y1); %取樣序列</p><p><b>
104、 case 3</b></p><p><b> n=-10:20;</b></p><p> y1=power(0.5,n); %實指數序列</p><p> stem(n,y1)</p><p><b> case 4</b></p><p&
105、gt; n=[-10:1:20];</p><p> y1=sin(0.5*pi*n) ;%正弦序列</p><p> stem(n,y1)</p><p><b> end</b></p><p> handles.y1=double(y1);</p><p> gu
106、idata(hObject,handles);</p><p> 2、系統(tǒng)響應y(n)</p><p> global b0 b1 a0 a1 a2</p><p> b0=str2num(get(handles.b0,'string')); %從b0的edit text控件中獲取b0的值</p><
107、p> b1=str2num(get(handles.b1,'string'));</p><p> a0=str2num(get(handles.a0,'string'));</p><p> a1=str2num(get(handles.a1,'string'));</p><p> a2=str2nu
108、m(get(handles.a2,'string'));</p><p> A=[a0 a1 a2]; %將序列x的系數向量賦給A</p><p> B=[b0 b1]; </p><p> n = [-10 : 20]; </p><p> x=han
109、dles.y1 ; %將用戶所選擇的序列x(n)賦給x</p><p> y=filter(B,A,x); %通過filter函數求系統(tǒng)的響應</p><p> axes(handles.axes2);</p><p> stem(n,y,
110、39;fill'); %將系統(tǒng)響應y(n)序列繪制在坐標2(axes2)中,線端是實心圓點</p><p> 3、系統(tǒng)的單位取樣響應h(n)</p><p> global b0 b1 a0 a1 a2</p><p> A=[a0 a1 a2];</p><p> B=[b0 b1];</p><p&g
111、t; n = [-10 : 20];</p><p> x=[n==0]; %令序列x(n)為單位取樣序列</p><p> h=filter(B,A,x);%求系統(tǒng)單位取樣響應</p><p> axes(handles.axes2);</p><p> stem(n,h,'fi
112、ll');</p><p> function pushbutton3_Callback(hObject, eventdata, handles)</p><p> close(gcf);</p><p> lisan(handles)</p><p> % hObject handle to pushbutton3 (
113、see GCBO)</p><p> % eventdata reserved - to be defined in a future version of MATLAB</p><p> % handles structure with handles and user data (see GUIDATA)</p><p> global b0 b1
114、 a0 a1 a2</p><p> b0=str2num(get(handles.b0,'string')); %從b0的edit text控件中獲取b0的值</p><p> b1=str2num(get(handles.b1,'string'));</p><p> a0=str2num(get(h
115、andles.a0,'string'));</p><p> a1=str2num(get(handles.a1,'string'));</p><p> a2=str2num(get(handles.a2,'string'));</p><p> A=[a0 a1 a2]; %將
116、序列x的系數向量賦給A</p><p> B=[b0 b1]; </p><p> n = [-10 : 20]; </p><p> x=handles.y1 ; %將用戶所選擇的序列x(n)賦給x</p><p> y=filter(B,A,x); %通過filter函數求系統(tǒng)的響應<
117、/p><p> axes(handles.axes2);</p><p> stem(n,y,'fill');%將系統(tǒng)響應y(n)序列繪制在坐標2(axes2)中,線端是實心圓點</p><p> ?、傧到y(tǒng)響應 ②系統(tǒng)的單位取樣響應</p><p> 3.3.4
118、離散時間信號傅里葉變換及系統(tǒng)頻率響應的設計與實現</p><p> “離散時間信號傅里葉變換及系統(tǒng)頻率響應”的靜態(tài)界面如下圖所示,在靜態(tài)界面設計好之后,編寫各個按鈕的callback函數,就可以實現界面的功能。</p><p><b> 靜態(tài)界面:</b></p><p> 各個callback函數為:</p><p&
119、gt; 1、取樣序列、矩形序列、實指數序列、正弦序列</p><p> global x1 f p</p><p> f=str2num(get(handles.edit6,'string'));</p><p> p=str2num(get(handles.edit7,'string'));</p><p
120、> val = get(hObject,'Value'); %獲得句柄的value(值) 屬性</p><p> str = get(hObject, 'String'); %獲得句柄的String(內容)屬性</p><p> switch val</p><p><b> case 1<
121、;/b></p><p> n = [-10 : 10];</p><p> x=[n==p]; %對取樣序列x進行初始化</p><p><b> x1=f.*x;</b></p><p><b> case 2</b></p&g
122、t;<p> n=[-10:10];</p><p> x=[n>=p]-[n>=p+5];</p><p><b> x1=f.*x;</b></p><p><b> case 3</b></p><p> n=[-10:10];</p><
123、;p> x1=f.*2.^(n+p);</p><p><b> case 4</b></p><p> n=[-10:10];</p><p> x1=f.*sin(2*pi*(n+p));</p><p><b> end</b></p><p> ha
124、ndles.x1 = double(x1)';%將序列y1轉換成double型的數據</p><p> guidata(hObject, handles);%保存句柄</p><p> 2、離散時間信號的傅里葉變換(DTFT)</p><p><b> global X</b></p><p
125、> n = [-10 : 10];</p><p> x = handles.x1; %將用戶所選擇的序列x(n)賦給x</p><p> k=0:500;w=(pi/500)*k; </p><p> X=x'*(exp(-j*pi/500)).^(n'*k);%求序列x(n)的離散傅里
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
評論
0/150
提交評論