支持MATLAB的DAQ数据采集系统
支持MATLAB的DAQ数据采集系统
2011年3月30日 by LIMSer
DAQ数据采集无非:采集、加工、输出(展示)。 在采集环节已经有很多成熟的软硬件产品,这个好办。但信号的加工不好办,特别是针对科研性质的,仅采集没用。另外,展示输出是个问题,特别是以怎样的形式,用户体验更好的形式,给不同的系统输出。
在加工方面,MATLAB是个可以考虑的扩展。所谓扩展,很多情况下用不到它,但利用它的强大功能,可以解决很棘手的问题。MATLAB很强。在它的数据采集工具箱里,已经集成了数据采集的M文件格式的函数和MEX文件格式的动态链接库。
其主要特征如下:
(1) 将实时测量数据从数据采集硬件采集到MATLAB中的框架。(其实也可以给予ODPC,采集到第三方中。再输出。)
(2) 支持模拟量输入(AI)、模拟量输出(AO)以及数字量I/O子系统,包括模拟量I/O实时变换。
(3) 支持PC声卡和业界非常流行的数据采集设备如NI卡、并行口(LPT1-LPT3)、Keithley卡等。
(4) 采用事件驱动模式进行数据采集。数据采集工具箱由三部分组成:M文件格式的函数、数据采集引擎和硬件驱动,如图2所示。这些组成部分使得MATLAB与数据采集硬件之间的信息传递成为可能。
数据采集与分析
(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的门槛还是高了。但是对于“高端”用户,在DAQ系统中做相应接口,或支持MATLAB数据分析和加工,,对于DAQ来说,可以让其功能大大延伸。

浙公网安备 33010602011771号