喬 有 田
(揚(yáng)州職業(yè)大學(xué), 江蘇 揚(yáng)州 225009)
“信號(hào)與系統(tǒng)”是電子信息類(lèi)專(zhuān)業(yè)的一門(mén)專(zhuān)業(yè)基礎(chǔ)課,該課程的特點(diǎn)是概念多且抽象和難以理解,書(shū)中涉及的數(shù)學(xué)知識(shí)和公式多,系統(tǒng)分析中的時(shí)域圖和頻域圖難以繪制,學(xué)習(xí)過(guò)程比較枯燥,學(xué)生學(xué)習(xí)的積極性不高。針對(duì)“信號(hào)與系統(tǒng)”的課程特點(diǎn)和傳統(tǒng)教學(xué)方法的局限性,對(duì)“信號(hào)與系統(tǒng)”課程與Python語(yǔ)言編程進(jìn)行融合,將書(shū)中的理論通過(guò)計(jì)算機(jī)編程以圖形、動(dòng)畫(huà)的形式展示,讓學(xué)生在享受計(jì)算機(jī)編程樂(lè)趣的同時(shí)對(duì)書(shū)中的概念、知識(shí)和公式有比較直觀的認(rèn)識(shí)。
Python是一種面向?qū)ο蟮慕忉屝?、弱?lèi)型腳本語(yǔ)言,它也是一種功能強(qiáng)大而完善的通用型語(yǔ)言。Python具有腳本語(yǔ)言中最豐富和強(qiáng)大的類(lèi)庫(kù),這些類(lèi)庫(kù)覆蓋了文件 I/O、GUI、網(wǎng)絡(luò)編程、數(shù)據(jù)庫(kù)訪(fǎng)問(wèn)、文本操作等絕大部分應(yīng)用場(chǎng)景。Python借助擴(kuò)展模塊可以輕松完成從字符串處理到復(fù)雜的3D圖形編程等多種任務(wù)[1-2]。
“信號(hào)與系統(tǒng)”這門(mén)課程中有些概念比較抽象難懂,例如卷積、周期信號(hào)的傅里葉級(jí)數(shù)分解、信號(hào)頻譜等,在教學(xué)實(shí)踐中,將這些知識(shí)點(diǎn)用Python語(yǔ)言編寫(xiě)出相關(guān)的程序,使用圖像、文字、和動(dòng)態(tài)畫(huà)面有機(jī)融合的方式,幫助學(xué)生加深對(duì)知識(shí)點(diǎn)的理解。
所謂創(chuàng)新型實(shí)驗(yàn),就是鼓勵(lì)學(xué)生對(duì)書(shū)后的一些綜合性的題目,用Python語(yǔ)言來(lái)進(jìn)行解答,利用Python語(yǔ)言強(qiáng)大的數(shù)值計(jì)算能力和豐富的圖形功能展示計(jì)算的過(guò)程和結(jié)果,使學(xué)生在享受編程所帶來(lái)的成功喜悅的同時(shí),加深對(duì)理論的理解。
為了加強(qiáng)對(duì)學(xué)生工程思維和工程能力的培養(yǎng),教學(xué)實(shí)驗(yàn)中引入既與理論知識(shí)相關(guān)又具有專(zhuān)業(yè)背景的工程實(shí)例。如在講解濾波器的時(shí)候,通過(guò)Python設(shè)計(jì)不同類(lèi)型的濾波器對(duì)由兩個(gè)頻率的正弦信號(hào)構(gòu)成的合成信號(hào)進(jìn)行濾波,并觀察濾波效果,讓學(xué)生切實(shí)地體會(huì)不同的濾波器對(duì)信號(hào)的影響;同時(shí)也可以使學(xué)生明白在以后的工作中應(yīng)如何應(yīng)用“信號(hào)與系統(tǒng)”課程的知識(shí)點(diǎn)。學(xué)生參與到實(shí)踐操作活動(dòng)中,可以使其動(dòng)手操作能力和解決實(shí)際問(wèn)題的能力得到有效的訓(xùn)練。
本文對(duì)系統(tǒng)的時(shí)域響應(yīng)、信號(hào)卷積運(yùn)算、信號(hào)傅里葉級(jí)數(shù)、信號(hào)濾波器、系統(tǒng)函數(shù)應(yīng)用等進(jìn)行仿真設(shè)計(jì)[3-5]。
對(duì)于線(xiàn)性時(shí)不變系統(tǒng),線(xiàn)性連續(xù)時(shí)間系統(tǒng)的數(shù)學(xué)模型用常系數(shù)微分方程來(lái)描述,線(xiàn)性離散時(shí)間系統(tǒng)的數(shù)學(xué)模型用常系數(shù)差分方程來(lái)描述。如果系統(tǒng)的輸入信號(hào)及初始狀態(tài)已知,通過(guò)數(shù)學(xué)方法便可以求出系統(tǒng)的零輸入響應(yīng)、零狀態(tài)響應(yīng)、沖激響應(yīng)和階躍響應(yīng)。由于運(yùn)用數(shù)學(xué)工具進(jìn)行求解,得出的結(jié)果仍為數(shù)學(xué)表達(dá)式,學(xué)生很難直觀地認(rèn)識(shí)系統(tǒng)的激勵(lì)和響應(yīng)之間的關(guān)聯(lián)。在本虛擬實(shí)驗(yàn)系統(tǒng)中,可以對(duì)激勵(lì)和響應(yīng)進(jìn)行仿真,從而實(shí)現(xiàn)對(duì)其實(shí)時(shí)性、直觀性和逼真性的認(rèn)識(shí)和理解。下面用一個(gè)例子說(shuō)明。
例1:已知描述某連續(xù)系統(tǒng)的方程為:
7y″(t)+4y′(t)+6y(t)=f′(t)+f(t)
試用Python畫(huà)出沖激響應(yīng)和階躍響應(yīng)的波形。
Python針對(duì)線(xiàn)性時(shí)不變系統(tǒng)的沖激響應(yīng)和階躍響應(yīng)提供了scipy.signal.step2(階躍響應(yīng))和scipy.signal.impulse2(沖激響應(yīng))函數(shù)。參考程序如下:
sys=scipy.signal.lti([1, 1], [7, 4, 6]) #構(gòu)造系統(tǒng)
st, sy=scipy.signal.step2(sys)#求系統(tǒng)的階躍響應(yīng)
it, iy=scipy.signal.impulse2(sys)#求系統(tǒng)的沖激響應(yīng)
所得波形如圖1所示。
圖1 沖激響應(yīng)和階躍響應(yīng)波形
卷積計(jì)算在“信號(hào)與系統(tǒng)”理論中占有重要地位,是“信號(hào)與系統(tǒng)”課程中重要且抽象的內(nèi)容,作為一種全新的運(yùn)算,它包含變量替換、反褶、移位、乘積、積分等步驟,比較復(fù)雜和抽象,為了使學(xué)生更好地理解其求解過(guò)程,通過(guò)Python編寫(xiě)程序,設(shè)計(jì)兩個(gè)矩形波相卷積的動(dòng)畫(huà),動(dòng)態(tài)展示卷積的計(jì)算過(guò)程。
Python中使用scipy.signal.convolve計(jì)算卷積,并利用matplotlib.animation.FuncAnimation模塊制作卷積的動(dòng)畫(huà),本文截取3個(gè)時(shí)刻的過(guò)程圖,如圖2所示。
圖2 信號(hào)卷積的波形
圖2從上到下分別顯示了其中一個(gè)被卷積函數(shù)波形、另一個(gè)被卷積函數(shù)反褶后不斷向右平移的波形、一個(gè)函數(shù)與另一個(gè)反褶平移后的函數(shù)乘積,最終得到積分的結(jié)果。動(dòng)態(tài)圖很好地展示了卷積的運(yùn)算過(guò)程。
傅里葉變換是信號(hào)處理領(lǐng)域非常重要的一種變換,是整個(gè)信號(hào)處理課程的核心,由于學(xué)生首次從時(shí)域和頻域兩個(gè)角度來(lái)認(rèn)識(shí)信號(hào),認(rèn)知上有難度。用Python軟件設(shè)計(jì)的方波合成動(dòng)畫(huà)程序,學(xué)生可以自己調(diào)整,改變參數(shù),得到合成的效果圖,幫助學(xué)生更好地理解周期信號(hào)的傅里葉級(jí)數(shù)分解。一個(gè)周期信號(hào),可以分解成傅里葉級(jí)數(shù)的形式,理論上包含無(wú)窮多個(gè)諧波分量,可以用Python來(lái)演示諧波合成的情況。
例2:一個(gè)周期為T(mén)的方波,其傅里葉級(jí)數(shù)可以表示為:
通過(guò)編程演示方波分解為正弦波的情況。
實(shí)例中用同一個(gè)窗口依次展示基波、疊加2次諧波和疊加8次諧波。為了方便對(duì)比,將各圖分別畫(huà)在不同的窗口中,如圖3所示。圖3很好地展示了方波的合成情況,疊加諧波次數(shù)越多,合成波形越接近方波信號(hào),很好地驗(yàn)證了周期信號(hào)的傅里葉級(jí)數(shù)表示。另外從圖3(c)的前8次諧波合成圖可以看出,當(dāng)用周期方波的前8次諧波進(jìn)行疊加時(shí),所得到的合成波形已接近周期方波的輪廓。
圖3 各次諧波合成
濾波器是“信號(hào)與系統(tǒng)”課程中的重要概念。濾波器按所通過(guò)信號(hào)的頻段分為低通、高通、帶通和帶阻四種。濾波器廣泛應(yīng)用于通信、電力、語(yǔ)音處理、電視雷達(dá)等場(chǎng)合,通過(guò)Python可以編程實(shí)現(xiàn)四種濾波器的濾波功能。
Python設(shè)計(jì)濾波器時(shí),使用scipy.signal.filtfilt和scipy.signal.butter兩個(gè)函數(shù),得到的效果如圖4、圖5所示。
圖4 低通濾波器濾波效果
圖5 高通濾波器濾波效果
通過(guò)兩個(gè)頻率分別為400 Hz和800 Hz的正弦波合成圖形,分別用低通和高通兩個(gè)濾波器進(jìn)行濾波,分別得到低頻和高頻的正弦波。學(xué)生通過(guò)這個(gè)實(shí)驗(yàn)非常直觀地看到濾波器的作用效果,同時(shí)在這個(gè)實(shí)驗(yàn)基礎(chǔ)上,還可進(jìn)行拓展,設(shè)計(jì)驗(yàn)證帶阻和帶通濾波器的程序。
系統(tǒng)函數(shù)是系統(tǒng)的數(shù)學(xué)模型之一,是由系統(tǒng)的本質(zhì)特性確定的,與輸入量無(wú)關(guān)。通過(guò)系統(tǒng)函數(shù)可以得出系統(tǒng)的重要屬性,如系統(tǒng)功能、穩(wěn)定性、因果性等??赏ㄟ^(guò)系統(tǒng)的頻率響應(yīng)曲線(xiàn)大致推斷系統(tǒng)的功能,通過(guò)系統(tǒng)的沖激響應(yīng)或零極點(diǎn)推斷系統(tǒng)的穩(wěn)定性等。通過(guò)類(lèi)似的創(chuàng)新型實(shí)驗(yàn),學(xué)生可以將以前學(xué)過(guò)的孤立的知識(shí)點(diǎn)連貫成一個(gè)有意義的整體,使前后知識(shí)貫通。
例3:已知系統(tǒng)函數(shù):
試判定系統(tǒng)是何種類(lèi)型的濾波器,并判定系統(tǒng)的穩(wěn)定性。
如前所述,系統(tǒng)的功能可以通過(guò)系統(tǒng)的頻率響應(yīng)曲線(xiàn)來(lái)得到,系統(tǒng)的穩(wěn)定性可以通過(guò)系統(tǒng)的沖激響應(yīng)和零極點(diǎn)來(lái)斷定。這里用到Python的函數(shù)是control.pzmap、control.impulse-response和control.freqresp,得到的效果如圖6、圖7所示。
圖6 系統(tǒng)的幅頻特征
圖7 系統(tǒng)的零極點(diǎn)分布和沖激響應(yīng)
從圖6(a)可以看出該系統(tǒng)函數(shù)表征的系統(tǒng)是一個(gè)低通濾波器。從圖7(a)、(b)可以推斷該系統(tǒng)是一個(gè)穩(wěn)定的系統(tǒng)??梢钥闯?該方程不涉及復(fù)雜的數(shù)學(xué)運(yùn)算,就可以得到期望的結(jié)果,這一方面降低了學(xué)習(xí)的難度,提高了學(xué)生的學(xué)習(xí)積極性;另一方面也使學(xué)生對(duì)系統(tǒng)功能的理解和穩(wěn)定性的判斷有一個(gè)直觀、清晰的理解。
隨著計(jì)算機(jī)信息技術(shù)的發(fā)展,虛擬仿真技術(shù)在高職教育中的應(yīng)用變得越來(lái)越重要。本文以“信號(hào)與系統(tǒng)”課程為例,應(yīng)用Python高級(jí)程序設(shè)計(jì)語(yǔ)言,對(duì)“信號(hào)與系統(tǒng)”課程的理論、數(shù)學(xué)公式的推導(dǎo)進(jìn)行精心的設(shè)計(jì)和編程,并通過(guò)其強(qiáng)大的圖形渲染功能使學(xué)生獲得相關(guān)概念直觀的感性認(rèn)識(shí),增加了學(xué)生的學(xué)習(xí)興趣,實(shí)踐證明取得了較好的教學(xué)效果。