基于Matlab和VC混合编程的DSP数据采集系统
和DSP程序中定义同名的一条RTDX通道,数据通过该通道在PC主机和DSP目标板之间传输。PC主机程序和目标板上的DSP程序需要严格的配合,PC主机的读操作和DSP目标板的写操作通过定义一个"写RTDX"通道实现:而PC主机的写操作与DSP目标板的读操作通过定义一个"读RTDX"通道实现.必须一一对应,这样才能实现主机与DSP目标板的数据交换。
2.2 Matlab与Visual C++的接口
Matlab作为一种工具软件.通常是不能直接控制DSP目标板。但是Matlab软件为了扩充自身软件的功能,提供了一种与其它开发工具或开发语言进行交互的应用程序接口 (API)。其中.MEX文件就是MATLAB软件提供的一种与Visual c++沟通的接口文件。
在MEX文件中使用c语言编写以mexFunction (int nlhs,mxArray *nlhs[ ],int nrhs,const mxArray * plhs[ ])函数为主函数的动态连接库程序(*.dll).然后只需在Matlab命令提示符下键入此MEX文件名(*.dll)即可完成调用.这与Matlab的内建函数的调用方式完全相同。mexFunction函数中的参数说明如下:
①int nlhs是左边输出参数的个数,即visual c++向Matlab传递的参数个数;
②mxArray *nlhs [ ]是左边参数的数组。它是一个mxArray结构体类型的指针数组.这个数组的元素按顺序(nlhs[0].nlhs[1]?)指向所有的输出参数:
③int nrhs是右边输入参数的个数,即Matlab向VisualC++传递的参数个数;
④const mxArray *plhs [ ]是右边参数的数组,它是一个mxArray结构体类型的指针数组,这个数组的元素按顺序(plhs[0],plhs[1]??)指向所有的输入参数。
在MEX文件中.利用DSP目标板提供的动态连接库函数,编写对目标板进行操作的动态连接库程序.然后在Matlab平台上调用这些动态连接库函数既町实现Matlab和底层DSP目标板的无缝连接。
图4系统测试结果
具体过程是:在Matlab平台上.以传递参数的形式调用动态连接库程序。把需要传送给DSP目标板处理的数据,通过mexFunction函数的右边参数数组先传送给动态连接库程序。然后通过Visual C++程序和DSP程序共同定义的"写RTDX通道"把数据传送给DSP目标板:需要上传到Matlab平台的数据,首先被DSP应用程序写入到"读RTDX通道"中.然后在Visual C++中的动态连接库程序读取该R31DX通道中的数据,再经过MexFunction函数的左边参数数组把数据上传到Matlab平台。这样.就实现了在Matlab平台上控制和操作DSP目标板,并与之进行数据交换。
图4是按照上述方法编写的软件界面和对系统进行测试所得到的结果。
3 结束语
基于Matlab平台的DSP数据采集和处理系统,在Matlab强大的数据分析和绘图功能的基础上,结合了Visual c++易于实现操作和控制的性能。改善了Matlab在控制底层板卡方面的不足。该系统的研究不仅是把Matlab应用于DSP数据采集和处理系统的一次尝试.也为一些半实物仿真系统提供了新的思路。Matlab/Simulink本身就是一种功能强大的系统仿真工具,因此,如果能在该系统的基础上把Matlat/Simulink的仿真功能添加上来。则可实现硬件在环的半实物仿真。相信Matlab丰富的函数库和众多的专业工具箱.必会为今后系统的完善以及扩展提供充分的条件。
本文作者创新点:通过在Matlab平台上直接控制DSP数据采集系统.把Matlab的优良算法应用于系统中。简化了系统的数据处理过程。提高了,系统数据处理速度,缩短了系统设计周期,具有广泛的应用前景。
- 基于DSP和MATLAB的语音数据采集和处理系统(05-13)
- 简化“算法到C代码”是软件业的一项挑战(07-04)
- DSP与MATLAB的语音数据采集和处理系统(02-12)
- 基于MATLAB-DSP在无传感器矢量控制中的应用(05-04)
- 基于FPGA设计DSP的实践与改进设计(05-11)
- Matlab与C/C++混合编程接口及应用方法(08-03)