丰富对于开发嵌入式系统的面向方面的MATLAB功能外文翻译资料

 2022-09-20 10:06:50

英语原文共 17 页,剩余内容已隐藏,支付完成后下载完整资料


丰富对于开发嵌入式系统的面向方面的MATLAB功能

摘要

本文提出了一种丰富的具有面向方面的模块化特性方法的MATLAB语言,该方法可以使开发人员尝试不同的特征实现和获得运行时的数据,并且该痕迹也不会破坏他们基础的MATLAB代码。我们提出了这种语言可以通过编程人员配置低级别的数据变量的表示及其表达式来实现。例如,包括专门定制的定点数据的表示,其可以导致更有效的支持底层硬件,如数字信号处理器和特定的应用程序的架构,没有内置的浮点单元等。这种方法可以协助开发人员添加处理程序,实现一种非侵入性的监控功能的方式以及实现MATLAB函数的配置与优化。不同方面的模块可以用来重新定位常用的MATLAB代码库,以此来用于不同的目的和实现。我们验证所提出的方法与一组有代表性的例子,并且通过实现了一个简单的方法来探索一些属性。实验结果和收集的面向方面的软件度量支持其实用性的要求。

1.绪论

在MATLAB中,其功能特性是通过语言被直接支持的,例如低级的数字变量表示的配置,分配特定的数据类型和动态类型专门化。在仿真模拟任务中,这些功能特性提供了重要的支持,而对于开发人员来说,则需要探索非均匀定点的表示、在时间窗口监控特定的变量,以及包括处理程序来观察特定的行为。但是,这些特性在使用时也是非常繁琐,而且既容易出错又有些乏味。每次使用时,开发人员在基础代码上是被迫的进行侵入性变化,即添加“暂时”新代码必须在提供最终版本之前随后被删除。

通常使用MATLAB作为规范,而不是实现语言,要想达到高水平的生产力和效率,这种用来将目标程序设计语言翻译成MATLAB代码的工具也是很重要的。然而,为了达到某一特定需要的效率水平,可以利用MATLAB提供的高抽象级别的工具来引导用户使用。事实上,上面描述的问题经常出现在MATLAB软件语言规范或一种硬件描述语言的自动合成的关系中。为了寻找有效的实现步骤,用户必须进行客户指定的分析方案、监测技术和数据类型和对字长的探索,而这些主要是通过入侵插入新的代码来实现。

在过去,多个研究努力的成果是试图自动化的实现具体问题,例如,从浮点到定点数据类型的转换将对MATLAB的使用规范进行一些限制。然而,它通常声称,开发商应该有充分的控制发展过程。数据类型转换不是平凡的并且通常需要开发商的介入。在设计数据类型和字长时,需要复杂的精度和准确的分析,当考虑客户指定的数据类型和字长度时,往往变得更加复杂。通常情况下,MATLAB模型的开发者往往是不需要完全的精度,而是依赖于MATLAB默认的数据类型(即双精度浮点)。在嵌入式系统的实施阶段,开发人员需要分析的数据类型和字长度的权衡,以产生有效的解决方案。此外,当使用定制的字的长度时,开发人员还可能必须明确定义类型转换和所产生的字的长度,以及处理这些类型的操作方法,并且这是作为相关的类型转换的语义规则而不是内置的编程语言。即使这个过程是通过工具辅助完成的,开发人员也必须探索和评估不同的数据类型表示,通常通过修改MATLAB的基础代码,并通过模拟其对系统的精度的影响。此外,根据系统的目标,相同的MATLAB代码库可能有不同的最终实现,这迫使开发商保持不同但相关且具有相同的核心功能的代码库。

由于MATLAB是常用的一种作为建模/规范的语言,大多数MATLAB代码的目的是最大化其适用性的范围和动态可配置性,但在价格方面对于大多数最常见的嵌入式计算开销实现是最不可接受的。此外,开发人员常常需要评估对于一个特定的功能的多个算法的实现,而每一个评估都需要修改MATLAB基础代码。这里有方法可以提供对于不同的MATLAB版本,在输入相同的MATLAB代码时将会提供一个重要的机制,以避免繁琐,容易出错,代码转换和不同的MATLAB版本的维护。

导致上述问题的根源是缺乏模块化处理次要问题的思想。理想情况下,核心功能将会在MATLAB代码,而次要问题,如类型的验证和参数的数量对于一个给定的函数调用,应该保存在面向方面的编程(AOP)提出的背景下的单独的模块方面。这样的问题不应该在目标嵌入式系统实现的,开发者需要删除(或去掉)他们在翻译MATLAB代码到目标语言的过程。模块化的问题让我们保持核心MATLAB代码准备翻译到目标的编程语言,因此在目标实现嵌入式系统和自动生成通用的MATLAB代码作为一个模型。这个通用的MATLAB代码的生成是责任方面编织——一个工具或编译器组件构成模块组成方面系统的其他部分。

因此,这种方法需要建立和维护一个干净的MATLAB代码的版本。通过清洁(或未受污染的),我们的意思是一个版本的MATLAB代码,包括核心功能,是系统实现的必要条件。干净的代码不包括只在需要的配置代码或次要问题发展方面,这应该保持在单独的模块中。

当实现MATLAB在嵌入式系统中的应用时,专业化是很重要的。这种专业化可以通过MATLAB的AOP方法被利用。上述次要问题的消除可以被看作是一个专业化的。例如,包括数据类型专门化——分配非默认数据类型变量和数组的大小和形状专业化——定义静态数组的大小和形状,而不是包括MATLAB代码动态地获得这些参数。

在本文中,我们提出了面向方面的扩展MATLAB,以此来帮助开发人员在系统建模和探索特定嵌入式系统相关功能的实现。基于我们之前的工作,我们的方法是依赖于分离的原则,分别处理数据类型与行为。一个随之而来的优点是单个版本的规范(例如,MATLAB代码库)可以在整个开发周期中不需要维护多个版本——如与现有技术的需要。这种分离有利于促进开发,模拟,探索和实施阶段。我们的扩展建议可以用在其他语言,即“MATLAB克隆”,比如GNU Octave和Scilab等。此外,研究初步表明,在MATLAB环境方面模块的使用提高了MATLAB程序的质量。

本文的主要贡献是:

1.用面向方面的语言来扩展MATLAB模型特征支持的功能模块,分别附上与专业化,配置相关的问题,并监测。

2.一个面向方面的方法,使程序员能够灵活地探索多种数据类型的专门化,其中,包括面向方面规则对指定数据类型转换的语义规则和字长作业在操作使用不同,可能是定制的,数据类型。

3.设计方法解决管理多个实现,取决于目标系统的问题,不放弃一个“干净”的版本的MATLAB高级模型。

论文的其余部分安排如下:第2节简短的介绍了一下MATLAB语言编程;第3节介绍了我们研究的主要原因;第4节提出了方法和描述特定领域的方面语言;在第5节中,我们提出了一些测试案例进行;第6节主要是我们的方法与相关研究的对比;最后的总结是在第7节。

2.MATLAB编程语言

MATLAB是一个动态的、可解释执行的、命令式编程语言,它主要是基于数组的数据类型和关于这些类型的操作。它被广泛应用于科学计算、控制系统、信号处理、图像处理、系统工程、仿真等。Mathworks公司开发并拥有该语言的版权,对于MATLAB项目,MATLAB软件提供了一个完整的集成开发环境。开发环境包括一些适当的调试功能。它包括Simulink,可视化,基于组件的环境适合于连续系统和离散系统的仿真。几个工具箱(包) 在许多领域都是可用的,包括在一些特殊的功能和特性上。对于复杂系统的建模与仿真,这样的软件包的语言将会成为首选之一。超过1500本书致力于证明MATLAB被广泛采用。

像大多数的解释型语言(如:Perl和Python),MATLAB的变量不需要声明。默认情况下,该数字表示使用的是双精度的浮点型数据类型(64位,根据IEEE 754标准格式),其他支持的数字数据类型包括整数(8、16、32和64位)和单精度浮点数。当然,MATLAB的工具箱也支持其他用具体数字表示的方法,对于MATLAB的变量,它们有特定的数据类型的分配和操作特性(例如,MATLAB变量溢出模式)。MATLAB实用功能包括运算符重载、函数的多态性和动态类型专业化。函数多态性使相同的函数被称为具有不同数量和类型的参数,动态类型专业化使变量在运行时代表不同的数据类型,例如,开发人员可以用不同的数据类型来模拟相同的代码。

MATLAB提供了许多适合快速建模的功能,并且有一系列巨大的软件包(工具箱)去支持这些功能,MathWorks公司的仿真环境(包括Simulink)和语言的表现力被作为指定的操作数组变量(例如,矩阵运算和操作)。

MATLAB是一个动态的语言,即变量没有显式的声明,元素的数据类型,大小和数组变量的形状是基于运行时上下文的动态定义。默认情况下,所有的数据类型是使用双精度的N-arrays(64位)数据类型。数组可以有不同的维度,形成数组变量的形状。数组可以存储单个元素、元素的向量、元素的矩阵。额外的数据由MATLAB(如图1)包含阵列异质元素(称为细胞)、结构、字符串、布尔值、和功能处理程序。除了双精度浮点数据类型,MATLAB也支持单精度数据类型和整型(有符号或无符号)表示(8、16、32、和64位)。

图1.MATLAB的数据类型(在Matlab被称为类)

(source: Mathworks (http://www.mathworks.com)).

MATLAB程序包括函数(称为M文件)和脚本。函数有一个名称、参数以及可以有零个或多个返回变量,可以被称为没有传递的所有参数。从语义上来说,在MATLAB中所有函数的参数是按值传递的。为了节省内存,MATLAB运行环境通过参数按值传递的函数修改以及通过引用他人的方法来实现。MATLAB代码所对应的脚本文件不需要指定输入/输出。该脚本也可以在其他脚本和函数中被调用。

除了变量声明为全局的以外,MATLAB变量还具有局部作用域(函数或脚本)。即一个特定的名字(标识符)可以引用一个变量或一个脚本或一个函数(子函数、私有函数、或在搜索路径中的一个函数)。在某些情况下,在MATLAB执行环境或运行时,编译器可能不得不被推迟这种现象被称作为解析。

MATLAB还允许新的类的定义。MATLAB类可以落在值班类或句柄类。这两个类又包括两个部分:属性(在这里声明属性)和方法(函数的位置),句柄类还包括一个附加的部分命名事件。在本文中,我们是根据面向对象的范型,不需要考虑相关功能类的大部分MATLAB代码并不发达的特征。

图2显示了一个MATLAB函数接收一个被定义为x的N-array参数以及返回一个被定义为y的N-array参数。它代表一种来执行的离散傅立叶变换(DFT)的算法——一种广泛应用于信号处理系统的函数。第三行中的语句定义了一个标识为y的数组,其数组中所有元素x的大小均为零,且为双精度表示。这种说法不是严格需要MATLAB动态地重新分配存储元素y在运行时的内存空间,即第9行的操作。第六行的语句创建了一个名为t的变量参数,长度为N且从0开始的间隔相等且为1/N的值,在第8行和第9行通过for循环考虑k从1到N的值,计算和分配每个k元素和y的值,进行的计算表达式作为函数的参数和在循环体(第9行)是基于矩阵的计算。

图2.简单的MATLAB的例子(函数进行离散傅里叶变换)——原始代码

在图3所示的第一个例子中,定义了一个函数添加x,y两个变量,根据输入变量,该操作执行两个数字的加法运算或添加两个数组的元素。因此,在同等位置上的x和y元素的数组可以使其结果可能是一个简单的数字或者数组。图3的另外两个例子进一步地显示了如何添加两个变量。注意,这三个例子可以实现相同的结果,但这取决于变量x和y的形状。

MATLAB不区分访问的变量和函数调用,例如,sin(1)可以调用sin函数作为参数或访问sin数组变量的第一个元素。当给sin分配一个变量时,即sin定义为一个变量的声明(如sin=2),在访问sin(1)之前,一个简单的引用代表访问sin数组变量的第一个元素。在某些情况下,我们可以通过执行静态名称解析来区分两者,否则,一个名字只能被动态解析。

图3.有三个不同的例子去添加两个变量。

在图4所示的一个示例中,它使用函数处理程序(用@表示),其中一个参数可以引用一个函数或一个变量。函数处理程序也可以用来定义嵌入式MATLAB代码的函数,如下MATLAB语句的功能:sqr=@(x)x.^2,在这种情况下,可以使用sqr作为函数的平方计算数组中的每个元素变量并作为参数传递。

图4.标识符根据其路径可引用数组变量或函数的例子

3.动机

使用MATLAB的嵌入式系统的范围是从特定系统组件的建模到整个应用程序的开发。通常情况下,开发人员开始在建模的核心部分中应用MATLAB软件,并利用其高层矩阵型和抽象数据类型,在MATLAB环境下用于仿真模拟这些应用程序的核心部分。仿真可能涉及其他系统组件的核心模型的接口或者是之前提供的实际数据的痕迹。当工作在MATLAB模型,开发人员需要将MATLAB代码转化(或部分被映射到目标系统)为一个本地编程语言(如C)。虽然许多结果是通过进行自动化这个过程完成的,但通常仍然需要让开发人员来评估不同专门化(如,数据类型)。这些评估都是通过仿真模拟会更容易完成,而不是通过手工编码。为了有效地支持专门化,其关键是监视变量和评估不同的数据类型分配。在这个过程的最后,一个优化的MATLAB代码版本是用于实现的。在这一过程中,协助的方法,包括提高生产力的重要贡献。

这里有很多关于在最后实施前需要删除的代码关联到二级关系的代码的案例,这段代码可以封装在模块方面,也可以通过编织一个方面组成,多个版本的核心、基础、代码这些都可以被生成。例如,一个二级代码,另一个为最终实现的专业化型。我们的横切关注点在MATLAB的分析上,讨论了集约利用MATLAB代码的存储库,内置函数和变量,负责获得运行时数组的信息大小、函数的参数的验证、数据类型转换等。在此前的一项研究中我们得出结论,最常见的MATLAB辅助功能包括:

lt;

剩余内容已隐藏,支付完成后下载完整资料


资料编号:[148383],资料为PDF文档或Word文档,PDF文档可免费转换为Word

原文和译文剩余内容已隐藏,您需要先支付 30元 才能查看原文和译文全部内容!立即支付

以上是毕业论文外文翻译,课题毕业论文、任务书、文献综述、开题报告、程序设计、图纸设计等资料可联系客服协助查找。