黃曉輝, 唐慧豐, 余文濤, 王 博
(解放軍外國語學(xué)院, 河南 洛陽 471003)
“數(shù)字信號處理”是電子信息與計算機(jī)專業(yè)的一門重要專業(yè)基礎(chǔ)課,該課程理論性強(qiáng),概念抽象,數(shù)學(xué)公式繁多,公式推導(dǎo)復(fù)雜,其內(nèi)容較難理解與掌握[1],因此在教授該課程時,除了課堂講授、公式推導(dǎo)和理論作業(yè)之外,必要的動態(tài)演示、實驗驗證是幫助學(xué)生理解、掌握知識的有效方法[2]。當(dāng)前,有條件的高校通常會使用Matlab作為輔助工具,通過增加課堂演示、課程實驗以及課程設(shè)計來輔助教學(xué),這樣既豐富了課程教學(xué)內(nèi)容,同時又增加了教學(xué)方法的靈活性與交互性,因而取得了不錯的教學(xué)效果[3,4,5]。
作為集數(shù)值分析、矩陣運(yùn)算、信號處理和圖形展示于一體的科學(xué)計算平臺,Matlab具有豐富的科學(xué)計算工具包,可以方便地實現(xiàn)數(shù)字信號處理的理論驗證和系統(tǒng)設(shè)計仿真,使學(xué)生從繁重的手工數(shù)學(xué)運(yùn)算中解脫出來,將學(xué)習(xí)重點(diǎn)轉(zhuǎn)向?qū)φn程基本概念、原理的理解與運(yùn)用上[6]。然而在實際教學(xué)實踐中發(fā)現(xiàn),使用Matlab作為輔助教學(xué)工具存在較多的現(xiàn)實問題,主要有以下幾點(diǎn):①M(fèi)atlab是一款付費(fèi)軟件,其授權(quán)費(fèi)用相當(dāng)昂貴,對于一般學(xué)生來說較難承受,即便對于獲得授權(quán)的高校來講,由于Matlab體量具大,建立一個供多人實驗用的Matlab環(huán)境需要很大的硬件和軟件投入,對學(xué)生自帶電腦的性能要求也較苛刻。雖有很多高校和學(xué)生選擇使用公開的簡化免費(fèi)版本,但其功能、性能都與正版不可同日而語,總體來講Matlab的使用成本較高;②盡管Matlab支持腳本以及面向過程和面向?qū)ο蟮木幊?,但在代碼風(fēng)格、數(shù)據(jù)定義、語法規(guī)則等方面都與C/C++有顯著的差別。即便學(xué)生已學(xué)習(xí)過C/C++語言,但在使用Matlab時仍要耗費(fèi)相當(dāng)多的精力去重新學(xué)習(xí),因此普遍感覺入門較難;③Matlab提供的大部分函數(shù)庫不開源,學(xué)生在使用過程中只能單純的調(diào)用,而無法獲知其內(nèi)部實現(xiàn),因此在幫助學(xué)生深入理解與應(yīng)用所學(xué)知識上也并沒有起到預(yù)期的作用;④Matlab的設(shè)計初衷是為了方便科學(xué)計算問題的建模,這與“數(shù)字信號處理”課程內(nèi)容強(qiáng)調(diào)的基礎(chǔ)性、應(yīng)用性并不匹配。同時在現(xiàn)實中,Matlab也主要面向高層次的科研人員,而在工業(yè)界的應(yīng)用領(lǐng)域相對較窄,這對于大多數(shù)以滿足現(xiàn)實應(yīng)用、適應(yīng)工作需求為學(xué)習(xí)目標(biāo)的本科學(xué)生來講沒有足夠的吸引力,學(xué)生只把其當(dāng)作是一種臨時的工具,在課程結(jié)束后就無用武之地,導(dǎo)致學(xué)生學(xué)習(xí)Matlab的積極性不高,同樣影響到該課程的教學(xué)質(zhì)量。
以上都是教學(xué)過程中實際存在的問題,已經(jīng)成為進(jìn)一步提升“數(shù)字信號處理”課程教學(xué)質(zhì)量亟待解決的問題。近年來,隨著Python語言的快速發(fā)展與壯大,使用Python取代Matlab、建立基于Python的“數(shù)字信號處理”課程教學(xué)體系成為解決以上問題的可行方案。
Python是一種解釋型高級程序設(shè)計語言,支持腳本以及面向過程和面向?qū)ο蟮木幊?,并且具有代碼簡潔、語法簡單、可擴(kuò)展性好的特點(diǎn)[7]。Python多樣化的編程方式使之具有與Matlab同樣出色的交互性和靈活性,同時比具有Matlab更純粹的面向?qū)ο筇匦浴W鳛橐环N通用編程語言,Python程序可以不加修改地在Linux、Windows、Mac、Palm等多種系統(tǒng)平臺上運(yùn)行,其源代碼可輕易的嵌入到C/C++程序之中,而C/C++程序也可作為第三方庫供Python程序直接調(diào)用,而這些功能是Matlab難以實現(xiàn)的。Python的科學(xué)計算生態(tài)比Matlab要豐富得多,語言也更加簡潔,入門更容易。對于數(shù)字信號處理來講,Python的第三方庫numpy可提供高效的數(shù)據(jù)組織、處理功能;scipy可提供多種數(shù)值計算功能,包括頻譜分析、濾波器設(shè)計等典型的數(shù)字信號處理方法;matplotlib可提供豐富多樣的圖形繪制功能,構(gòu)建優(yōu)美的圖形交互界面。針對現(xiàn)實應(yīng)用中普遍存在的語音、圖像等數(shù)字信號,Python標(biāo)準(zhǔn)庫中的wave以及pyaudio可以完成.wav格式音頻文件的處理,還有更多的第三方函數(shù)庫可以實現(xiàn)各種變換域分析與處理;而圖像處理庫PIL可以處理常見格式的數(shù)字圖像數(shù)據(jù),再利用numpy、scipy以及matplotlib就可以完成對真實數(shù)字信號的譜分析、濾波以及圖形展示。與Matlab數(shù)GB的軟件體積相比,這些第三方函數(shù)庫加上Python標(biāo)準(zhǔn)庫的總體量還不到200MB。因此,將Python引入“數(shù)字信號處理”的教學(xué),并基于Python設(shè)計系統(tǒng)的教學(xué)改革方案有以下優(yōu)點(diǎn):①減輕高校以及個人對實驗環(huán)境的投入成本;②編程的簡潔性以及開放的項目社區(qū)為初學(xué)者提供了較低的學(xué)習(xí)門檻和豐富的學(xué)習(xí)資源;③開源的第三方函數(shù)倉庫為學(xué)生深入研究課程內(nèi)容并應(yīng)用所學(xué)知識解決實際問題提供了有力支撐;④廣闊的應(yīng)用前景為學(xué)生學(xué)習(xí)Python并進(jìn)行深層次的研究與項目開發(fā)提供了學(xué)習(xí)動力。
本文基于Python進(jìn)行“數(shù)字信號處理”課程的教學(xué)改革,教學(xué)效果在實踐中得到了檢驗。
當(dāng)前,我院“數(shù)字信號處理”課程教學(xué)分為課堂教學(xué)和課下自學(xué)兩部分,課堂教學(xué)包括理論教學(xué)和實驗教學(xué),課下自學(xué)包括課程設(shè)計和網(wǎng)絡(luò)課程自學(xué)。
課堂教學(xué)中,理論教學(xué)與實驗教學(xué)穿插進(jìn)行,根據(jù)教學(xué)內(nèi)容定期安排實驗課程,以做到現(xiàn)學(xué)現(xiàn)用;課程設(shè)計的選題采用任課教師提供與學(xué)生自主選題相結(jié)合的方式進(jìn)行,在課程教學(xué)完成后由學(xué)生自主完成,并提交課程設(shè)計報告,成績計入最終考核成績;網(wǎng)絡(luò)課程自學(xué)主要依托校園網(wǎng)網(wǎng)絡(luò)課程接口,其上具有在線答疑、文檔資料上傳下載、作業(yè)布置與提交、教學(xué)視頻觀看等功能,提供豐富多彩的自主學(xué)習(xí)環(huán)境。
課堂理論教學(xué)主要分四步實施,首先是課程引入,主要通過教師口述和PPT展示對關(guān)鍵知識點(diǎn)進(jìn)行直觀展現(xiàn),使學(xué)生建立初步的整體印象,激發(fā)學(xué)習(xí)興趣;接著是理論講授環(huán)節(jié),主要由教師進(jìn)行理論講解、數(shù)學(xué)推導(dǎo)等內(nèi)容,旨在使學(xué)生打牢理論基礎(chǔ);其間穿插著實驗驗證,包括根據(jù)授課內(nèi)容編寫Python源碼進(jìn)行現(xiàn)場演示。由于Python語法簡單,代碼簡潔易懂,又有成熟的第三方開源庫可資利用,因此便于學(xué)生深入理解所學(xué)知識以及掌握如何將所學(xué)知識轉(zhuǎn)化為實際應(yīng)用;最后是總結(jié)答疑,即對課程授課內(nèi)容總結(jié),布置理論和上機(jī)作業(yè),現(xiàn)場輔導(dǎo)答疑。例如,在離散傅里葉變換一節(jié),可通過以下四個階段組織教學(xué):第一階段10分鐘左右,概要介紹授課內(nèi)容,包括DFT的定義、原理、應(yīng)用場景等,再調(diào)用pyaudio庫讀入一段原始語音信號,選取中間1024個樣本構(gòu)成numpy數(shù)組,調(diào)用scipy中FFT函數(shù)對其進(jìn)行傅里葉變換,最后調(diào)用matplotlib展示變換前后的時域、頻域曲線,并對比變換前后信號的特點(diǎn);第二階段20分鐘左右,講解DFT的原理,現(xiàn)場進(jìn)行公式推導(dǎo),并詳細(xì)介紹其基本特點(diǎn);第三階段10分鐘左右,根據(jù)DFT公式的定義編寫Python源碼,并對原始語音信號進(jìn)行傅里葉變換,并與第一階段Python庫函數(shù)變換的結(jié)果進(jìn)行對比。第四階段10分鐘左右,主要是總結(jié)授課內(nèi)容,布置理論作業(yè)和上機(jī)作業(yè)以及現(xiàn)場輔導(dǎo)答疑。
實驗課程教學(xué)以集中安排、隨堂輔導(dǎo)、自主完成的形式進(jìn)行,分三個階段組織實施,同時編寫配套的Python實驗教材供學(xué)生參考使用。第一階段為任務(wù)布置階段,由教師介紹并布置實驗任務(wù),提供實驗材料和參考資料;第二階段為實施階段,由學(xué)生根據(jù)實驗題目自主編寫Python代碼進(jìn)行實驗,記錄實驗數(shù)據(jù)并分析實驗結(jié)果。由于Python軟件體積較小,安裝過程簡單,因此極大地方便了學(xué)生搭建實驗環(huán)境。另外,其語法與CC++類似,入門較Matlab容易,降低了學(xué)習(xí)門檻,便于學(xué)生學(xué)習(xí)使用;第三階段為實驗總結(jié)階段,由學(xué)生整理并撰寫實驗報告,任課教師作總結(jié)講評。課程共設(shè)置離散信號時頻分析、離散系統(tǒng)時頻分析、數(shù)字濾波器設(shè)計、數(shù)字信號濾波處理和語音信號數(shù)字濾波共5個大項實驗,要求學(xué)生自己按照實驗教材編程實現(xiàn),并與所提供的Python庫函數(shù)作對比,以加深學(xué)生對所學(xué)知識的理解程度。
課程設(shè)計以培養(yǎng)學(xué)生運(yùn)用所學(xué)知識解決實際問題為目標(biāo),由任課教師依據(jù)科研課題中遇到過的信號處理需求設(shè)置相應(yīng)的課題,學(xué)生根據(jù)興趣自主選題并獨(dú)立完成,最后提交Python源碼和課程設(shè)計報告。由于Python的開源屬性,網(wǎng)上有眾多系統(tǒng)而全面的學(xué)習(xí)資料供學(xué)生查閱,可以避免學(xué)生因遇到困難無法及時找到解決方案而消極應(yīng)付。例如,對機(jī)房低噪音環(huán)境下錄制的語音信號進(jìn)行降噪處理,要求學(xué)生根據(jù)給定的公式,編寫源碼對語音信號進(jìn)行時域的分幀、加窗、預(yù)加重以及某項特征參數(shù)提取,并將最終結(jié)果與Python庫函數(shù)的處理效果作對比。在此過程中,學(xué)生對于在實驗課程中已經(jīng)實現(xiàn)過的公式可調(diào)用Python庫函數(shù),對于沒有實現(xiàn)過的公式要求自己手動實現(xiàn)。
網(wǎng)絡(luò)課程依托校園網(wǎng)網(wǎng)絡(luò)課程接口為學(xué)生提供課下自主學(xué)習(xí)服務(wù),包括在線答疑、文檔資料上傳下載、作業(yè)在線布置與提交以及教學(xué)視頻觀看等功能。在線答疑可及時解決學(xué)生學(xué)習(xí)過程中遇到的問題,避免問題堆積過多,使學(xué)生失去學(xué)習(xí)興趣。與課程相關(guān)的Python資料會及時上傳到網(wǎng)絡(luò)課程相應(yīng)欄目供學(xué)生下載學(xué)習(xí),包括教學(xué)課件、參考教材、基礎(chǔ)教程、學(xué)習(xí)網(wǎng)站等。網(wǎng)絡(luò)課程在師生之間建立了便捷的課下溝通平臺,為學(xué)生自主學(xué)習(xí)提供了豐富的學(xué)習(xí)資源,彌補(bǔ)了課堂教學(xué)時間緊、任務(wù)多、不能面面俱到的不足。由于Python應(yīng)用廣泛,新的開發(fā)項目層出不窮,因此對學(xué)生學(xué)習(xí)前沿知識、提升動手實踐能力會有較強(qiáng)的吸引力。
將Python引入“數(shù)字信號處理”課程教學(xué),豐富了課程教學(xué)內(nèi)容,拓展了教學(xué)方法,便于學(xué)生理解教學(xué)內(nèi)容并開展自主學(xué)習(xí),有利于培養(yǎng)學(xué)生的動手實踐能力,為將來走向工作崗位打下良好的基礎(chǔ)。需要注意的是,Python完全開源的特點(diǎn)也可能為學(xué)生抄襲網(wǎng)上答案提供方便,因此在教學(xué)過程中要著力強(qiáng)調(diào)誠信的治學(xué)態(tài)度。實驗教學(xué)只提供必要的實驗平臺和輔助材料,而更重要的是嚴(yán)格把控課程設(shè)計的選題和完成質(zhì)量,從思想上和行動上杜絕可能發(fā)生的抄襲行為。
本文所提的基于Python的“數(shù)字信息處理”課程教改方案從2014年得到學(xué)院立項資助并開始部署實施,在學(xué)院所有開設(shè)該課程的本科專業(yè)進(jìn)行試點(diǎn)。(黃曉輝等文)
試點(diǎn)過程中,2011級學(xué)生仍然用Matlab為工具展開教學(xué),2012級學(xué)生分為兩個班次分別以Matlab和Python為工具展開教學(xué),而2013級全部使用Python實施教學(xué),根據(jù)教學(xué)過程中學(xué)生的學(xué)習(xí)態(tài)度和作業(yè)完成情況,以及考核成績及格率、優(yōu)良率、課下自主學(xué)習(xí)時間等統(tǒng)一綜合性指標(biāo),調(diào)查問卷的統(tǒng)計數(shù)據(jù)結(jié)果顯示,使用Python的課程教學(xué)效果明顯好于使用Matlab的教學(xué)效果,證明本次教學(xué)改革方案科學(xué)合理,解決了之前遇到的現(xiàn)實問題,有效提升了教學(xué)質(zhì)量。
參考文獻(xiàn):
[1]王艷芬,史良,王剛.基于Matlab實驗環(huán)境的《數(shù)字信號處理》課程新實驗開發(fā)[J].北京:實驗技術(shù)與管理,2002,19(3):61-68.
[2]張曉光,王艷芬,王剛.基于Matlab的數(shù)字信號處理課程教學(xué)探索[J].武漢:高等教育研究,2007,24(2):45-46.
[3]陳俊杰,周暉.數(shù)字信號處理課程教學(xué)改革初探[J]. 北京:中國教育技術(shù)裝備,2016(12):99-100.
[4]羅忠亮. 數(shù)字信號處理課程教學(xué)改革實踐探索[J]. 福州:教育評論,2015(2):124-126.
[5]王艷芬,張曉光,王剛.電子信息類專業(yè)信號處理課程群的建設(shè)與改革實踐[J].北京:實驗技術(shù)與管理,2015,32(4):11-14.
[6]黃永平. 數(shù)字信號處理精品課程建設(shè)的探索[J]. 北京:教育與職業(yè),2014(32):188-189.
[7]張俊生,郭彩平,樓國紅. Python在數(shù)字信號處理中的應(yīng)用[J].南京:電氣電子教學(xué)學(xué)報,2015,37(4):115-117.
[8]張若愚.Python科學(xué)計算[M]. 北京:清華大學(xué)出版社,2016年4月.