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环境下,运行以上已经编好的程序,即可得到如下的模拟实验结果。不过要说明的是,此处使用的数据采集系统是八通道同步采集,而仿真时仅使用的是其中一个通道进行的操作。
figure 3 实际心电图信号的采集与处理效果图
4、结语
使用自主开发的数据采集系统,通过合理运用串口及MTLAB强大的数值计算和分析功能,实现了基于MATLAB的实时数据处理和分析。通过模拟实验表明,该方法对于其它类似采集卡依然实用,具有一定的应用价值和发展前景。
文章评论(0条评论)
登录后参与讨论