基于MATLAB的实时数据采集与分析研究

分享到:

1、引言

  数据采集系统涉及多学科,所研究的对象是物理或生物等各种非电或电信号。根据各种非电或电信号的特征,利用相应的归一化技术,将其转换为可真实反映事物特征的电信号后,经A/D转换器转换为计算机可识别的有限长二进制数字编码,以此作为研究自然科学和实现工业实时控制的重要依据,实现对宏观和微观自然科学的量化认识,典型的数据采集系统组成如图1所示。

  在采集过程中,将传感器获取的参数通过A/D转换送入内存,然后由CPU对其进行分析、运算和处理,如数字滤波、量纲变换、误差修正、数字显示等。在本文中,尝试通过利用MATLAB的数据采集工具箱对自主设计的数据采集系统进行模拟仿真,结果实现了对设计系统的模拟操作检验与数据分析。为了满足实时采集的要求,采用了Compilier编译器,Compilier以M语言编制的程序为输入,可以根据需要生成独立运行的应用程序或可以被 C/C++程序调用的动态链接库文件。它支持MATLAB所有的内部函数,可使程序变得简洁高效。

图1 典型数据采集系统的组成

2、数据采集工具箱介绍

   在MATLAB数据采集工具箱里集成了数据采集的M文件格式的函数和MEX文件格式的动态链接库。其主要特征[4][5]如下:

  (1) 提供了将实时测量数据从数据采集硬件采集到MATLAB中的框架。

  (2) 支持模拟量输入(AI)、模拟量输出(AO)以及数字量I/O子系统,包括模拟量I/O实时变换。

  (3) 支持PC声卡和业界非常流行的数据采集设备如NI卡、并行口(LPT1-LPT3)、Keithley卡等。

  (4) 采用事件驱动模式进行数据采集。数据采集工具箱由三部分组成:M文件格式的函数、数据采集引擎和硬件驱动,如图2所示。这些组成部分使得MATLAB与数据采集硬件之间的信息传递成为可能。

图2 数据采集引擎与硬件驱动

3、数据采集过程


  3.1 数据采集的基本步骤

  (1)创建设备的一个对象。对象创建函数列表如下:

表1 对象创建函数列表

        (2)添加通道或数据线。模拟量I/O对象中用应添加通道,而数字量I/O对象中应添加数据线,与添加通道或数据线有关的函数列表如下:

表2 与添加通道或数据线有关的函数列表

3)配置属性。属性分为公共属性和通道/数据线属性,而两者又再被分为基本属性与设备特有属性。其中公共属性为返回设备对象的所有可配置的公共属性名及其可能的属性值,应将对象作为Set函数的输入参数;要返回设备对象的所有公共属性及其当前值或为显示某个属性的当前值,应将对象或属性名作为 Get函数的输入参数。对于通道/数据线属性,则使用Channel(Line)属性。

  (4)获取或输出数据。包括启动设备对象,记录或发送数据及停止设备对象三个步骤。其中启动设备执行Start函数、提取记录数据使用 Getdata函数、发送数据前的数据排列使用Putdata函数、停止使用用Stop函数;另外运行状态用Running属性标识、记录状态由 Logging属性标识、发送状态由Sending属性标识,其取值均为On或Off。对于数字量I/O对象,该部分处理有所不同。

  (5)清除。当不再需要设备对象时,应使用删除函数Delete将设备对象从内存中清除,并使用清除命令Clear将对象从MATLAB工作空间中清除。

  3.2 应用实例与分析

  3.2.1 MATLAB对RS232 的串口通信设计


   MATLAB是一个跨平台软件,而此处使用的是自主设计的数据采集卡,因此不具备直接访问的能力。但MATLAB的面向对象技术,已用一个对象把计算机串口封装起来,只要用Serial函数创建串口对象即可[6]。关键语句为:s=serial(‘COM1’,‘BaudRate’,9600)。 MATLAB封装的串口对象支持对串口的异步读写操作,通过对异步读写设置,PC在执行读写串口函数时能立即返回,不必等待串口把数据串输完毕。当指定数据传输结束时就触发事件,执行事件回调函数,对事件回调函数编程,进行数据处理,这样可以大大提高数据处理的效率。

   MEX是MATLAB的可执行程序,是MATLAB调用其它语言编写的程序或算法的接口,在Windows环境下是扩展名为DLL的动态链接库。对MEX 编译器进行配置的方法是:在MATLAB命令窗口中运行mex-setup,选择VC6.0++作为编译器。用C语言编写端口读、写的操作程序,程序包含有头文件mex.h和mexFunction函数,mexFunction函数中nelhs表示输出变量的个数,plhs包含指向输出变量指针的数组,nrhs表示输入变量的个数,prhs包含指向输入变量指针的数组。接口编形成的MEX文件与参考文献[7][8]类似,在此不再累述。

  3.2.2 数据采集与分析

  (1)数据读取的MATLAB实现

  主要代码为:

  %读取通道数及总数据量

  fid=fopen(‘cardiogram.add’,‘r’);

  Status=fseek(fid,56,‘bof’);

  nDataChNum=fread(fid,1,‘long’);

  status=fseek(fid,204, ‘bof’);

  nAllDataLength=fread(fid,1, ‘long’);

  %按通道数循环读出各通道起始地址

  status=fseek(fid,76, ‘bof’);%

  for i="1:" nDataChNum

  pChannelAdr(i)=fread(fid,1, ‘long’)

  end

  %按通道数循环读出各通道数据

  for i="1:nDataChNum"

  status=fseek(fid,pChannelAdr(i)+360, ‘bof’)

  nSegNum=fread(fid,1, ‘log’)

  status=fseek(fid,pChannelAdr(i)+160*nSegNum+1024, ‘bof’);

  data=fread(fid,nAllDataLength, ‘short’);

  end

  sta=fclose(fid);

  (2)数据处理与图形绘制

  利用MATLAB的图形用户接口,通过编程可以很方便地构建数据采集与分析的用户交互界面。将数据采集系统采集的实际心电图信号,用RS232导入到PC 中。在MATLAB环境下,运行以上已经编好的程序,即可得到如下的模拟实验结果。不过要说明的是,此处使用的数据采集系统是八通道同步采集,而仿真时仅使用的是其中一个通道进行的操作。

图3 实际心电图信号的采集与处理效果图

4、结语

   使用自主开发的数据采集系统,通过合理运用串口及MTLAB强大的数值计算和分析功能,实现了基于MATLAB的实时数据处理和分析。通过模拟实验表明,该方法对于其它类似采集卡依然实用,具有一定的应用价值和发展前景。



继续阅读
利用Python与HFSS联合仿真设计一个微带天线

我们知道HFSS是一款电磁仿真商用软件,用其进行天线的设计十分方便。而该软件也预留了可以运行脚本的接口,使用者可以使用脚本对软件进行控制,实现模型的建立、求解等等。

如何用Matlab进行频域分析?

Matlab可以说是一个非常有用且功能齐全的工具,在通信、自控、金融等方面有广泛的应用。

基于Matlab的均匀平面电磁波的仿真

Matlab由于其强大的功能、简单易学的编程语言和可视化的仿真环境,为电磁场与电磁波的教学提供了仿真条件。借助Matlab模拟和实现结构的可视化,把抽象概念变为清晰,对复杂公式进行计算和绘图,动态直观的描述了电磁场的分布和电磁波传播状态,帮助学生理解和掌握电磁场与电磁波传播的规律,有助于学生对这门课程的学习。

MathWorks扩展了 MATLAB 的系统设计功能

全新 Phased Array System Toolbox 包括用于相控阵系统设计、仿真和分析的算法和工具。

GPS接收机载波跟踪环路解决方案

载波跟踪环路设计是GPS 接收机中的关键技术,载波环鉴别器的类型确定了跟踪环的类型,为了有效地防止因为数据跳变引起的鉴别误差,并且使其频率鉴别范围大,精度高,采用一种二阶锁频环( FLL) 辅助三阶锁相环( PLL) 的方法。通过Matlab 仿真载波环路比较了两种鉴频和鉴相算法的性能。结果表明,该方法鉴别范围大,精度高,切实可行。