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