应用Python改进信号处理类实验教学
2019-03-14高志斌林和志冯超
高志斌,林和志,冯超
(厦门大学信息科学与技术学院,厦门361005)
0 引言
信息与通信工程一级学科下设通信与信息系统、信号与信息处理、电子与通信工程等硕士点,通信工程、电子信息工程、信息安全等本科二级专业。该学科涉及电磁场、信号处理、无线通信等高技术领域,要求学生掌握信息传输、信息采集和信息处理等基础知识,具备信号检测与估计、信号分析与处理、系统分析与设计等方面的专业知识和技能[1]。其中,信息处理类课程在学生培养中起到至关重要的作用。
大部分高校的信息与通信工程学科的信息处理类课程,包括《信号与系统》、《数字信号处理》、《随机信号分析》、《数字图像处理》和《多媒体技术》等本科课程,《现代信号处理》、《语音信号处理》、《机器视觉》等研究生阶段的课程,向外延伸至《信息论与编码》、《通信原理》、《DSP原理与应用》、《无线通信工程》、《嵌入式系统设计》或《嵌入式项目开发》等相关课程[2-3]。
早期引入实验对信号处理类课程起到极大的推动作用,从这类课程的繁重的数学公式推导和枯燥的理论概念理解,到具有直观信号呈现的实验箱操作,到可以进行相关理论辅助推导、仿真、设计、验证的MAT⁃LAB软件编程,起到很好的教学质量提升。但随着新工科建设的推进,随着人才培养要求的提升,硬件方面从跳线实验箱到FPGA、DSP芯片应用设计,到嵌入式系统设计的发展,给出了在硬件实验教育方面的清晰路线;而软件实验方面,验证式和简单模仿式的,把教师给的例子做参数调整的教学模式,不再适用于新工科背景下的教学任务,单纯地调整课程内容对教学效果依旧很差。这种教学模式迫切需要改革。
本文认为引入Python可以在信号处理类,克服单纯软件仿真难以结合开放式嵌入式系统等硬件开发,达到芯片应用与算法设计实践方面的进一步结合和发展。
1 信息处理类课程与实验特点
信息反映了一个物理系统的状态或特性,是以各种物理量的性质、数量及其相互函数关系或信号来表达的。信号是传载信息的物理量,是信息的表现形式。信号处理就是运用数学或物理的方法对信号进行各种加工或变换,其目的是滤除混杂在信号中的噪声和干扰,将信号变换成易于识别的形式,便于提取它的特征参数。信号处理的本质是信息的变换和提取。目前信号处理已经成为了现代科学技术的支柱之一,已广泛应用于人类生产和生活的各个方面[4]。
针对信号处理类课程,起点较高、公式繁多、推导复杂、概念抽象、难度较大,导致学生兴趣不高的问题,早期的教学方式改革主要围绕教学内容的调整,如强化物理意义,优化数学推导,增加课外材料,调动学生积极性。随着信息化技术的引入,采取多媒体与板书结合,将信号处理实验箱和MATLAB、LabVIEW等软件引入课堂教学,充分调动学生听觉、视觉、触觉等多种感官共同参与[5],二十多年来在中国高校对激发学生兴趣、提高学习效率加强课程理解起到很积极的作用。
当前信号处理类课程的设计均包含理论和实验部分,国际国内大部分高校都考虑理论和实验实践的充分结合。但现有的实验设计上,还存在如下问题:
(1)重视理论,轻视实验。理论课程的课时重,内容繁多,实验课时少,只是对理论理解的辅助。
(2)实验环节简单,验证型项目居多。目前信号处理类课程,如信号与系统、数字信号处理,在实验方面,一般采取实验箱跳线验证,或者MATLAB作为软件仿真工具,做简单验证和模仿实例。
(3)实验环节停留在对理论课程的理解而缺乏应用实践类的项目设计。如基于MATLAB做信号与系统分析或者滤波器设计,而具体的滤波器应用却要在其他带有硬件处理器的课程完成,造成实践类项目设计与课程稍有脱节。
2 Python科学计算
2006年卡内基·梅隆大学Jeannette M.Wing教授提出并阐释了“计算思维”概念,信息类学生在信号处理类课程的教学中培养计算思维能力也应该是很重要的内容。高度概括和理论总结的信号处理理论,在传授学科知识上应该注重应用能力的训练。MATLAB类的软件在分析设计方面能起到很好的作用,在应用方面还未提供友好的接口。
Python语言于1991年发布第一个版本,现已发展到3.x。它是一种解释型、面向对象、动态的高级程序设计语言,具有简洁、易读以及可扩展性强的特点,且因为越来越多的科研工作者选择Python作为开发语言,贡献了众多的开源科学计算软件包,或者提供Py⁃thon语言的调用接口,如用于科学计算的NumPy、SciPy、Sympy和Matplotlib等功能强大的函数包,提供了快速数组处理、数值运算和绘图的功能。Python语言及其众多的扩展库构成的开发环境非常适合工程技术和科研人员处理实验数据,开发应用程序[4]。
近年来,随着人工智能的发展,Python这种胶水语言引起大家的重视,应用Python进行信号处理类编程实践,并结合FPGA和嵌入式系统开发的技术,大大优化了软硬件协同综合设计的效率。而随着“新工科”建设理念,在国内高校里引起的广泛重视,结合信息处理技术,改造老学科,推动新兴的学科门类发展、不同学科交叉的新生学科迫切需要我们考虑培养具备电子技术及信息系统的基础知识,从事各类电子设备和信息系统研究、设计、制造、应用和开发的工程技术人才[2]。
3 Python信号处理教学案例参考
在信号处理类配套实验课程中,完全可以逐步加入Python的仿真编程。这里给出一个经典的滤波器设计和实现场景。设有一个信号,包含5Hz和50Hz两个正弦波的叠加,以500Hz采样率对该信号进行采样,记录时长为1s,设计两个3阶巴特沃斯滤波器,分别采用低通滤波器获得低频部分,高通滤波器获得高频部分。
我们将Python 2.7编程设计和实验结果与基于MATLAB 2015b的编程进行比较。
MATLAB是MathWorks公司的商用软件,有一个统一的集成开发环境(IDE),包含编辑器、命令窗口等,很方便运行和调试。这里采用butter函数和filter函数进行滤波器设计和处理,用figure和plot进行图形的绘制。
Python的IDE则有很多选择,笔者认为JetBrains公司的PyCharm界面友好,对教育界提供免费的专业试用版本,也具备运行和调试功能。在其中采用scipy包中的signal.butter()和signal.filtfilt()函数进行数据处理,采用Matpoltlib进行图形的绘制。如图1所示,可以看出在编程和可视化呈现方面,Python与MATLAB差别不大。
MATLAB的在线帮助(help)功能强大且方便查阅。而PyCharm点击菜单quick documentation,同样可以调出help窗口,给出详细的帮助说明,如图2所示。
Python能查看filtfilt函数的定义,也就是对源代码的查阅和分析。但MATLAB的filter作为内建函数(Built-in function),是看不到源代码的。对学生而言,MATLAB隐藏了部分内建函数的源代码,Python却具备开源代码的容易学习的好处。因此对教学而言,Py⁃thon在理解算法和教学上具有较强的优势。
图1 滤波器实现效果的可视化对比
图2 帮助文档界面的对比
此外,Python可以在Linux嵌入式系统上运行,如FPGA板卡Digilent PYNQ-Z1,设计用于与来自Xilinx的PYNQ项目合作,支持Python语言及库,可以直接使用Python创建高性能的嵌入式应用程序,甚至可以支持并行硬件执行、高速视频处理、实时信号处理。剑桥大学数学科学中心的Damien P.George将Python移植到ARM Cortex M微处理器上,实现了一个运行在微控制器上的MicroPython。所以Python可以无缝地从实验室的信号处理验证型实验走向信号处理在数据采集和回放设备配合下的物联网、无线通信实验,且硬件成本极低。而MATLAB作为重量级的软件,Linux上虽然可以安装,但一般不支持轻量级的嵌入式设备,Scilab工具也存在类似问题,而LabVIEW具备较大的硬件封闭性,对嵌入式系统支持少。所以,Python在软硬件融合设计开发方面的优势也显而易见。
4 结语
Python作为一门新兴的编程语言,在科学计算、教学和信号处理的软硬件实现上具有较强的优势。信号处理类课程为增强对理论的理解,采用MATLAB、Lab⁃VIEW等软件配合硬件实验箱的实验教学方式。在新工科建设的背景下,可以进一步考虑引入Python编程语言,并配合适当的硬件设备,将实验内容结合实验项目优化现有的信号处理类课程,增强面向新工科的学科建设,提升学生的应用设计能力。