馬月紅, 孫曉云, 劉素艷
(石家莊鐵道大學(xué) 電氣與電子工程學(xué)院, 河北 石家莊 050001)
隨著通信科技方面的發(fā)展,以數(shù)字信號處理為基礎(chǔ)的問題隨處都在[1]?!皵?shù)字信號處理”課程是通信工程專業(yè)的一門重要課程,其理論嚴(yán)謹(jǐn)抽象、系統(tǒng)性很強(qiáng),難于理解。其基礎(chǔ)性的知識包括:一些基本概念、離散數(shù)字信號處理的各個域的相關(guān)分析、系統(tǒng)函數(shù)和狀態(tài)變量的分析等等。其中,卷積、傅里葉變換的計算以及一些公式定理的證明過程的工作量過于龐大且繁瑣。這不僅僅增加了學(xué)生學(xué)習(xí)的難度,更是消磨了學(xué)生學(xué)習(xí)的熱情。而且由于教學(xué)的部分局限性教師們很難將這些書本上的基礎(chǔ)性知識讓學(xué)生牢固掌握。
因此本文將Matlab仿真技術(shù)和GUI界面設(shè)計引入到該課程的教學(xué)實踐過程中,開發(fā)了可視化的“數(shù)字信號處理”虛擬實驗平臺,通過一系列的仿真,實現(xiàn)了對信號生成模塊(單位沖激序列、指數(shù)序列等六個序列)、模擬信號抽樣模塊、傅里葉變換模塊(離散信號與周期信號)、卷積分模塊以及FFT的實現(xiàn)與應(yīng)用模塊,可以讓學(xué)生更加直觀地看到原理展示從而進(jìn)一步幫助他們理解和體會抽象難懂的內(nèi)容,以此提高學(xué)生們的學(xué)習(xí)興趣。
Matlab GUI憑借其獨特的圖形化編程優(yōu)勢,不僅能方便學(xué)生對理論知識的理解,還能增強(qiáng)學(xué)生的實驗操作能力[2]。而本系統(tǒng)作為一個幫助教師教學(xué)的手段,它的主要作用就是通過將課件與Matlab的圖形和動態(tài)演示在課堂上結(jié)合起來,使得教師的課堂教學(xué)更加生動、直觀,讓學(xué)生不再對該課程僅僅只有枯燥難懂的感覺,有利于學(xué)生們對數(shù)字信號處理以及通信的學(xué)習(xí)興趣的提高,從而提高整個學(xué)習(xí)的教學(xué)效果。
系統(tǒng)總體設(shè)計中,以自頂向下方式進(jìn)行界面布局設(shè)計,以引導(dǎo)界面、主界面作為設(shè)計前提,在此基礎(chǔ)上開展其他子界面設(shè)計。其中的子界面包括序列信號產(chǎn)生 (單位脈沖序列、指數(shù)序等) 、模擬信號抽樣、卷積和、傅里葉變換 (離散信號與周期信號) 、FFT的實現(xiàn)以及濾波器設(shè)計。當(dāng)用戶完成對每個子系統(tǒng)的設(shè)計后,就可以開始著手創(chuàng)立一個主函數(shù),通過回調(diào)函數(shù)來實現(xiàn)主系統(tǒng)與子系統(tǒng)之間的功能傳遞。系統(tǒng)的結(jié)構(gòu)如圖1所示。
圖1 系統(tǒng)結(jié)構(gòu)
系統(tǒng)具體主界面如圖2所示。在新建窗口中拖入若干個靜態(tài)文本框和若干個按鈕,設(shè)置靜態(tài)文本的String為“基于Matlab GUI的數(shù)字信號處理實驗設(shè)計”,依次設(shè)置另外六個靜態(tài)文本框String為“實驗一基本信號的產(chǎn)生”、“實驗二信號抽樣理論”、“實驗三傅里葉變換(DFT)”、“實驗四卷積和”、“實驗五快速傅里葉變換(FFT)及其應(yīng)用”,點擊每個實驗后點擊確認(rèn)進(jìn)入相應(yīng)的的實驗子界面。主界面設(shè)計完成后的內(nèi)容實現(xiàn)如圖所示。為了美化實驗平臺總界面作者加入了三個信號圖樣。
圖2 主程序前面板
根據(jù)設(shè)計好的系統(tǒng)結(jié)構(gòu)圖,設(shè)置各數(shù)字信號處理實驗?zāi)K,一共設(shè)計了5個實驗?zāi)K,結(jié)合Matlab GUI的軟件特點設(shè)計各個模塊,完善前面板及程序框圖,設(shè)計合理的參數(shù)。為了方便學(xué)生使用,盡量將本虛擬實驗平臺設(shè)計的像實驗室中的實驗箱一樣,在一個界面上就能調(diào)用各個子實驗?zāi)K,因此需要設(shè)計一個主界面,通過這個主界面實現(xiàn)模塊之間的相互跳轉(zhuǎn),運(yùn)行并顯示各子模塊的前面板、能夠進(jìn)行參數(shù)調(diào)整、并能停止實驗返回主界面。
前面板是操作界面,為了方便用戶使用,盡量把布局設(shè)計的像實驗室中的實驗箱一樣,對模塊進(jìn)行分類,排版,并加入一些修飾元素,使其看上去簡潔明了,更方便學(xué)生操作和使用。
利用Matlab GUI的軟件特色,可以實現(xiàn)對波形信號的可視化操作,并能夠改變信號的一些控制量來實現(xiàn)對波形信號的控制,在總界面其相應(yīng)的位置編寫總界面跳轉(zhuǎn)到子界面的實現(xiàn)函數(shù),如圖3所示為實驗一信號生產(chǎn)的子界面。
圖3 基本信號生成程序框圖
前面板分為輸入和顯示兩大部分,輸入部分可以選擇信號的類型、對信號頻率、相位等進(jìn)行設(shè)置。顯示部分是時域信號波形圖。輸出所設(shè)參數(shù)的對應(yīng)輸出時域波形。并添加了布爾停止控件,點擊停止按鈕便能停止實驗。根據(jù)設(shè)置好序列參數(shù),生成常用序列,以生成的單位階躍序列和指數(shù)序列為例,如圖4所示。
從以往的學(xué)習(xí)中可以得到:當(dāng)一個時間連續(xù)信號f(t)的頻帶限制在(0,fn)內(nèi),當(dāng)以時間間隔T≤2/(2fm)(fm為連續(xù)信號的最高頻率)對這個連續(xù)信號f(t)進(jìn)行抽樣時,那么這個時間連續(xù)信號就可以根據(jù)那些抽樣值被完全恢復(fù)出來?;蛘哒f存在一個,當(dāng)它頻譜中的最高頻率小于等于fn的時候,這個連續(xù)信號f(t)從性質(zhì)來看,肯定是一個周期信號??梢岳^續(xù)假設(shè),當(dāng)抽樣頻率fs≥2fh時,由抽樣定理可以知道,原來的連續(xù)信號的全部信息就都會被抽樣后的信號所包含進(jìn)去,并且不可能出現(xiàn)混疊現(xiàn)象。當(dāng)在后面需要原來的連續(xù)信號時,可以根據(jù)這些抽樣信號的樣本值來還原出原始信號。根據(jù)這一特性,可以完成信號的DA轉(zhuǎn)換與AD轉(zhuǎn)換。由上可以看出,程序中分別給出了參數(shù)的范圍和彼此之間的關(guān)系,這樣在用戶在使用實驗平臺系統(tǒng)時便可手動調(diào)節(jié)Ts的大小,這時其余參數(shù)值都會隨著Ts的值發(fā)生改變。從而在圖像上給出直觀的變現(xiàn)。抽樣示意圖和抽樣后頻譜,如圖5所示。
圖5 抽樣理論圖
通過對抽樣周期大小的改變可以看到抽樣定理的三種情況:臨界抽樣、不發(fā)生混疊、發(fā)生混疊。通過圖像直觀的觀察可以清楚地看到抽樣定理的內(nèi)涵,并對抽樣的過程、結(jié)果都有了更加深刻的理解。
DFT就是對一個離散信號進(jìn)行傅里葉變換,這樣信號就從時域信號變換為頻域信號,對頻域信號可以進(jìn)行幅度和相位分析。Matlab中有兩種計算傅里葉變換的方法:①利用符號進(jìn)行運(yùn)算的方法:在Matlab的Symbolic Math Toolbox提供了傅里葉變換函數(shù)(fourier),F(xiàn)=fourier(f)作為符號函數(shù)f通過此變換式,就可以得到其傅里葉變換;②利用數(shù)字進(jìn)行計算的方法:要求傅里葉變換時所需信號必須是時限信號,也就是說,當(dāng)時間∣t∣大于給定的某個時間時,其值將會衰減為零或近乎為零,計算機(jī)只能處理有限大小和有限數(shù)量的數(shù)。用戶可以通過設(shè)置不同的序列來進(jìn)行傅里葉變換。結(jié)果如圖6所示。
圖6 離散傅里葉變換面板
在學(xué)習(xí)中為了計算LTI離散系統(tǒng)零狀態(tài)響應(yīng)以及離散信號的分解,一般采用的是卷積運(yùn)算,并且它是解決上述問題的基本工具。
卷積模塊,一般包括兩個模塊:離散卷積和連續(xù)卷積,在離散卷積部分,由于序列處于無限長狀態(tài),無法在Matlab直接應(yīng)用下進(jìn)行卷積計算,但Matlab中的內(nèi)部函數(shù)conv,在計算卷積方面可發(fā)揮重要作用。對于連續(xù)卷積,也需借助該函數(shù)完成連續(xù)信號的計算。實驗中設(shè)置的參數(shù):
x=str2num(get(handles。edit_x,'String'));nx=0:1:length(x)-1;
h=str2num(get(handles。edit_h,'String'));nh=0:1:length(h)-1;
y=conv(x,h);ny=0:1:length(y)-1;
運(yùn)行結(jié)果如圖7所示:
圖7 卷積積分面板
當(dāng)遇到兩個時域特性相同的信號,這兩個信號不一定就完全相同,此時就需要對信號進(jìn)行頻域分析,通過傅里葉變換將時域信號變換為頻域信號,進(jìn)而分析信號的頻率和相位特性。傳統(tǒng)的離散傅里葉變換的算法過程過于繁瑣,計算量龐大,因此引進(jìn)了一種快速算法,即FFT變換,在本質(zhì)上與傅里葉變換并無差異,只是通過一些方法巧妙地減少了運(yùn)算量。
FFT算法一般分為兩類,一類就是按偶奇來區(qū)分并對頻域信號序列進(jìn)行排序的按頻率抽取。另一類就是按奇偶來區(qū)別并對時域信號序列進(jìn)行排列的按時間抽取。它們的計算中都借助了 的周期性和對稱性這兩個特點。這樣就可以把FFT計算分成若干步進(jìn)行,計算效率大為提高。
假設(shè)輸入信號具有N個抽樣點,則輸入信號就會有N個原始數(shù) ,可以由以前的學(xué)習(xí)中得知在經(jīng)過一級的計算后就會產(chǎn)生新的N個數(shù)據(jù) 。根據(jù)歸納演繹法,最后會得到x(k)= =X(k),可以發(fā)現(xiàn)在一級級的計算的過程中,作為每個蝶形運(yùn)算的輸出數(shù)據(jù)的存放位置就是原來的輸入數(shù)據(jù)的存放位置,這就是平時運(yùn)算中所說的“即位計算”,這樣可以節(jié)省大量存放中間數(shù)據(jù)的寄存器。
而每一級的蝶形運(yùn)算中加權(quán)系數(shù)是不同的,它是隨迭代級數(shù)成倍增加。如圖8是一個蝴蝶運(yùn)算的基本運(yùn)算單元,可以看出每一級運(yùn)算中輸入數(shù)據(jù)與輸出數(shù)據(jù)之間加權(quán)系數(shù)的關(guān)系。并且每一個輸入數(shù)據(jù)其實就是上一級的輸出數(shù)據(jù),而每一級的輸出數(shù)據(jù)就是下一級的輸入數(shù)據(jù)。由此我們可以得到蝴蝶運(yùn)算的加權(quán)系數(shù)的關(guān)系:每級迭代的不同加權(quán)系數(shù)的數(shù)目比前一級迭代增加一倍;跨度間隔也增大一倍。
N=8的蝶形運(yùn)算示意圖如圖9所示,使用者在使用系統(tǒng)時可以通過修改序列值來進(jìn)行不同序列的FFT運(yùn)算。與用戶在傳統(tǒng)的教學(xué)方法有很大的不同并且十分的快捷。這大大的節(jié)省了教育工作者的教學(xué)時長,給學(xué)生減少繁瑣枯燥的運(yùn)算過程,增加了學(xué)生的學(xué)習(xí)興趣。
本課題設(shè)計是針對國內(nèi)“數(shù)字信號處理”課程的教學(xué)現(xiàn)狀進(jìn)行的課題設(shè)計。(馬月紅等文)
圖8 FFT基本運(yùn)算單元
圖9 蝶形運(yùn)算示意圖
Matlab GUI軟件強(qiáng)大的功能使得該虛擬實驗平臺不僅能夠降低教師的教學(xué)難度,豐富教學(xué)內(nèi)容,對學(xué)生的學(xué)習(xí)過程也有很大的幫助,通過流程圖的形式,幫助學(xué)生理解相關(guān)理論,并達(dá)到實驗操作的基本要求。