Matlab代码转换在“模式识别”教学中的应用

2016-03-02 08:28周小平
电气电子教学学报 2016年6期
关键词:模式识别调用代码

王 斌, 张 静, 周小平,张 倩

(上海师范大学 信息与机电工程学院,上海 200234)

Matlab代码转换在“模式识别”教学中的应用

王 斌, 张 静, 周小平,张 倩

(上海师范大学 信息与机电工程学院,上海 200234)

本文以Matlab 2015a为例,介绍如何利用其提供的工具,快速进行C代码转换、编译及程序的硬件载入与配置,大幅提高算法的执行效率,快速完成理论与实践的无缝链接,搭建更为真实的教学实验平台,对于提高学生的认识能力和学习兴趣均有重要意义。

模式识别;Matlab;仿真实验

0 引言

作为自动化专业的必修课程,“模式识别”一直是教学的重点和难点,它着重讲述如何以数学方法与计算机为主要工具,通过对视频、图像等各种多媒体信息进行处理、分类和理解,最终构造具有某些智能特性的系统或装置的理论方法、技术及实现。

在信息化社会中,模式识别与日常生活密切相关。如手写板文字识别、机器人语音识别、人体运动捕捉、指纹考勤识别、闯红灯汽车号码自动记录等[1, 2]。人类生活的各个环节,都存在模式识别的活动。因而,在该课程的教学过程中,尤其需要注重理论与实践的结合。

不同的应用领域所关注的智能识别技术侧重点不尽相同,需根据应用的具体特征提出有针对性的授课方式和设计相适应的算法,并辅以直观、便捷的测试方法,方能取得良好的教学效果。通常,在教学过程中采用Matlab软件作为仿真工具对具体算法进行实现和检验,以此提高学生的认识水平和编程能力。但作为一门解释性语言,Matlab的执行效率较低,对于复杂算法的大型计算需要耗费大量的时间;况且,它未将理论,算法贯通至实际装置,教学与实践尚存差距。为克服此瑕疵,本文以最新版的Matlab 2015a为工具,详细介绍其所提供的代码转换工具与方法,利用代码转换、编译和快速调用,搭建快速、高效的仿真平台,进而结合具体硬件装置,将模式识别和图像处理等复杂程序的代码方便地部署到实际终端进行算法测试与试验,大幅度提高程序执行的速度,在实验课上及时反馈算法效果,使学生更加直观的理解算法的现实应用环境,提高其认识水平、编程能力和学习兴趣。

1 Matlab与Simulink简介

Matlab是国际上流行的科学与工程计算软件,由美国MathWorks公司出品,并持续保持软件的年度更新与升级,它集算法开发、矩阵运算、信号处理、数据分析、数值计算及图形显示于一体,并形成了独有的编程语言和语法规则,拥有强大的函数库,适用于图形图像处理、大型矩阵分析、多专业领域仿真计算等功能,是一种高级技术计算语言和交互式环境[3, 4]。Matlab提供了功能强大的集成视窗环境,摆脱了传统非交互式程序设计语言的编辑模式,利用其实现具体算法相对于C、Fortran语言更为便捷、快速,并提供了600多个工程中常用的数学运算函数,包括模式识别中常用的聚类算法、贝叶斯函数等,使得各领域专业人员从繁杂的编程工作中解脱出来,可以集中精力进行算法本身的研究工作。

Simulink是Matlab提供的可视化仿真工具,也是Matlab最重要的组件之一,它提供一个可视化的动态系统建模、仿真和综合分析的集成环境,无需编写程序,而只需要通过简单直观的鼠标操作完成模块化元件的连接、组装,就可构造出复杂的系统[5]。Simulink同时提供同一仿真项目下针对不同子模块独立设置仿真步长、灵活构建子系统、允许模块复用等,具有适应面广、结构和流程清晰、灵活,仿真贴近实际、效率高等优点。

通常在教学过程中,仅仅涉及Matlab和Simulink的初步功能,对于一般的算法测试已经能满足需求。但作为一门解释性语言,Matlab程序在执行过程中也存在些许问题,如边解释边执行的计算过程造成仿真效率低,尤其是对于循环语句等操作,需要等待较长时间。且所构造的程序并不能直接下载到芯片运行,不能快速完成程序的部署与试验。在进行大型程序的测试时效率较低,如图像识别与图形处理,经常需要对数以万计的图片进行分析、计算,难以保证教学效果;并且,对于特定算法,如人体运动捕捉等算法,仅当运行于具体装置时才能测试程序的实时性与算法的有效性。因而,在教学中有待完善仿真平台,提高算法测试效率,构建从理论至实际装置间的桥梁。而利用Matlab新版本所提供并不断完善的代码转换功能,能满足上述要求。

2 Matlab与C代码的接口与转换

为了提高算法仿真、测试和代码的硬件部署效率,好在Matlab提供了丰富的代码接口与转换功能,能够将其完成的算法转换为独立C/C++代码,经代码转化之后,允许用户将Matlab的已有算法同自己的工程结合起来,或将部分程序转换、编译为可调用执行的二进制代码,有效地加快Matlab 应用程序的开发速度和应用程序的运行速度[6, 7]。下面重点介绍Matlab 2015a中所提供的常用代码转换与接口方法。

1)M文件转换为C代码和Mex文件

M文件是Matlab常用的程序实现方式之一,对于初学者更容易掌握,是模式识别实验教学中的基础工具之一。对于常用的数值计算、文件操作和视频图像处理等函数,Matlab均支持直接将M文件转换为C代码。Matlab Coder是完成代码转换的独立工具包,在新版程序中进行了封装和升级,拥有更为良好的用户交互界面。在命令窗口输入Coder命令可以启动程序,通过选择M文件、定义输入输出接口、数据测试等,可以分别生成可读性强的C源代码或可在Matlab环境下直接调用执行的Mex文件,提高仿真效率。

2)利用S-function调用C代码

在Simulink环境中利用S-Function功能可以灵活实现基于C语言和Matlab语言的函数调用与转换。仅需在编写S-Functin函数后将函数名放置在一个S-Functin元件中即可进行调用。若具有同名Mex文件,则将被优先使用,提高执行效率。不同层级的S-Funciton函数具有不同的结构和接口定义规范。利用此功能,用户可以定制和封装适合特定需求的模式识别函数库,并生成相应的Mex文件,在仿真计算时可以利用其快速编写算法并执行。

3)利用Stateflow实现C语言程序

Simulink中,Stateflow是为满足用户自定义模块或者方便用户进行逻辑、判断等操作而引入的可视化程序开发工具,可以基于C语言或Matlab语言进行开发、调试,程序执行路径清晰可见,并可与Simulink模型一并进行C代码转换。利用Stateflow编写模式识别程序,用户可以清晰观察程序执行过程,并且,与Simulink工具包提供的图形图像处理模块等实现了无缝对接。

4)Stateflow中嵌入M函数并转换为C代码

利用Stateflow不仅可以搭建逻辑清晰的选择程序,还可以利用提供的嵌入式模块直接利用Matlab语言编写M文件函数,方便用户在自定义函数中调用复杂的模式识别专用函数。但此处的M文件与所创建的Stateflow模块是一体化的关系,改动相应的函数功能后,重新复制模块到程序中所有需求位置即可实现功能的更新。利用嵌入式M文件无需S-Function中复杂的接口定义,系统可根据调用规则直接判断输入输出变量类型,并可以与Stateflow模块一并进行C代码的转换与调用。

3 新型仿真教学平台的设计与实现

在“模式识别”课程的教学过程中,通常仅以Matlab或Simulink为工具进行算法的测试与试验,效率低,且并未将理论、算法贯通至实际装置,教学与实践尚存在差距。作为目前装置层面通用的程序语言,C代码的生成、测试对于提高学生的认识水平具有重要作用。

Matlab软件提供了丰富的代码接口与转换功能,在不同的应用阶段、针对用户不同需求,均有完善的解决方案。特别是对于模式识别等编程技巧和计算效率要求较高的算法测试中,可以利用各种接口技术实现功能齐备、软硬件贯通的仿真教学平台,如图1所示。

图1 新型仿真教学平台设计与实现

在仿真教学平台上,基于成熟的模式识别函数库,在Matlab主程序中直接调用C语言函数或Matlab函数,实现两种语言的混合编程和调用,提高程序复用和灵活性;查询所支持的函数列表,利用Matlab提供的代码转换功能将测试函数转换为C代码,进而利用Mex函数将C代码转换为二进制代码并在Matlab程序中直接调用,显著提高计算效率在Simulink环境中,通过S-Function功能调用C代码和Mex函数,实现仿真的灵活性和高效性,在Stateflow中进行复杂逻辑判断的编程,并利用嵌入式M函数,实现Matlab库功能函数的调用与数据传递,最终生成完整程序的可执行C代码。通过编译链接生成可执行文件,可在电脑上进行仿真测试,也可将程序下载至DSP/PMU等硬件装置中,进行实际装置的仿真测试。实验表明,在进行大型图片数据库的特征辨识和关联分析时,利用上述方法所生成的可执行文件,其计算速度比Matlab环境下提高近千倍,能够满足实验教学中的结果及时反馈和算法测试。

4 结语

本文根据“模式识别”课程的实验教学要求,分析了Matlab软件所提供的代码转换与接口功能和形式,提出了从理论、算法到代码转换、调用并最终至仿真测试和装置级试验的辅助教学平台设计方法。该方法有助于在教学过程中快速完成特定算法的编写和测试,理论联系实践,提高教学、实验效率,有助于学生深入理解具体应用场景和提高学习兴趣。

[1] 杨淑莹.模式识别与智能计算:Matlab 技术实现[M].北京:电子工业出版社, 2011.

[2] 庭芝, 卫江, 雪梅.数字图像处理及模式识别[M].北京:北京理工大学出版社, 2007.

[3] 许可, 罗鹏飞, 万建伟.基于Matlab的数字图像直方图均衡教学实验[J].南京:电气电子教学学报, 2014, 36(1):87-89.

[4] 文小琴, 毕淑娥, 游林儒.基于Matlab的电力电子技术仿真平台设计[J].南京:电气电子教学学报, 2014, 36(4):105-106+ 110.

[5] 于舒娟, 史学军.Simulink 应用于信号及系统分析[J].北京:现代电子技术, 2004, 11(21):15-17.

[6] 陈永春.从 Matlab/Simulink 模型到代码实现[M].北京:淸华大学出版社, 2002.

[7] 张祥, 杨志刚, 张彦生.Matlab/Simulink 模型到 C/C++ 代码的自动实现[J].重庆:重庆工学院学报, 2007, 20(11):111-113.

The Application of the Matlab Code Conversion in Pattern Recognition Teaching

WANG Bin, ZHANG Jing, ZHOU Xiao-ping, ZHANG Qian

(CollegeofInformation,MechanicalandElectricalEngineering,ShanghaiNormalUniversity,Shanghai200234,China)

In this paper, using the new release of the Matlab 2015a, the code conversion tool is described.The C code generation, compile and fast hardware code loading and configuration are detailedly illustrated for greatly improving the efficiency of the testing.It is helpful to link the theory and practice as well as to build a more realistic teaching experiment platform, which is important to improve the students' cognitive ability and study interest.

pattern recognition ; Matlab; simulation

2016-09-25;

2016-10-27 基金项目:国家自然科学基金青年项目(61503251);上海师范大学校内创新项目(SK201510)

王 斌(1986-),女,博士,讲师,主要从事模式识别、机器学习和图像处理等方面的研究工作,E-mail:binwang@shnu.edu.cn

G434;TP391.4

A

1008-0686(2016)06-0086-03

猜你喜欢
模式识别调用代码
核电项目物项调用管理的应用研究
创世代码
创世代码
创世代码
创世代码
UPLC-MS/MS法结合模式识别同时测定芪参益气滴丸中11种成分
第四届亚洲模式识别会议
基于系统调用的恶意软件检测技术研究
可拓模式识别算法中经典域的确定方法
第3届亚洲模式识别会议