MATLAB读入数据的几种方式探讨

发布时间:2012-02-19 11:11:38   来源:文档文库   
字号:

MATLAB读入数据的几种方式探讨

谢良喜 孔建益 王兴东 张陵保 李公法 汤勃 赵刚1

1(武汉科技大学机械自动化学院,武汉 4300812( )

Several Methods of Importing Data into Matlab

Xie Liangxi, Kong Jianyi Wuhan University of Science & Technology, Wuhan 430081

[摘要] Matlab中有不同的函数用于读取数据,它们的特点不同,适用的场合也各不相同。本文结合工程实例,对几个常用的读取数据方式进行了比较分析,并对函数的选择提出了建议。

关键词:故障诊断 MATLAB

[Abstract]: There are many functions to import data into Matlab from a database file. It’s important to select a suitable function for your test. In this article, the author introduces three functions with comparing their difference, and gives his advice.

Keyword: Fault-detection, Matlab

中图分类号:TP311.1

一. 问题的提出

在典型的机械设备离线检测与故障诊断中,常常将数据采集与数据处理做成分开的模块。因为采集卡通常自带数据采集程序并可方便地将数据保存成指定格式文件;而MATLAB以其丰富而专业的函数库、完善的数据处理功能和强大的图形输出能力,被越来越多地作为信号分析处理的基础平台。因此,离线检测中,通常在采集卡采集数据后,将数据以指定格式保存在计算机硬盘,常见的文件格式包括txt格式、dat格式等等;在数据后处理阶段,通过MATLAB读取数据并进行各种运算与处理。

读取数据是应用MATLAB进行数据分析的首要步骤。MATLAB用于数据读取的函数很多,不同函数有不同的用法和应用场合。如果错误选用了不合适的函数,不仅运行效率低下,还可能导致程序不能正常开展工作。因此,在充分了解各函数的特点和用法的前提下,根据应用的需要选择合适的数据读取方式是重要的。

二. 常用文件读入方式

MATLAB提供多种I/O方式进行数据交换,常见的数据输入函数包括:

1. Scanf函数:从文件中读入数据并对数据进行格式转换。语法为:

[A,count] = fscanf(fid,format,size)

该语句利用fscanf函数,从指定文件中读取数据并将数据转换成format参数指定的格式,写入矩阵ACount参数用于返回成功读入的元素数量,为可选参数。输入参数中,fid是用fopen打开文件时返回的文件标识;size用于指定读入数据的元素数量,该参数可选,如果不指定则将文件的全部数据读入;format用于指定数据格式,常见格式有’%c’’%d’等。

2. Fread:从仪器(包括文件)中读入二进制数据。语法为:

[A,count] = fread(fid,size,precision,skip)

该语句利用Fread函数,从指定文件中读取二进制数据并写入矩阵ACount参数用于返回成功读入的元素数量,为可选参数。输入参数中,fid是用fopen打开文件时返回的文件标识;size用于指定读入数据的元素数量,该参数可选,如果不指定则将文件的全部数据读入;precision指定读入数据的精度,该参数可选,如果不指定,其缺省值为'uchar'skip也是可选参数,称作循环因子,若指定shikp值且该值不为1,则循环跳跃读取数据,即按skip指定的比例,周期性跳过一些数据,使得读取的数据具有选择性。

————————————————————————————————————

谢良喜,男,1971年生,武汉科技大学机械自动化学院讲师。从事机械设计、机械制造工艺、制造企业信息化、机械设备故障诊断方面教学与研究。

3. Load:该函数是MATLAB中最常用的函数之一,一般用于载入MATLAB格式的数据,即保存在*.mat文件中的数据。然而,该函数也可以从其它格式文件中载入数据,例如*.txt *.dat文件。

fscanffread函数在读取数据时的作用大同小异,它们的特点是:不论数据文件中数据是否具有确定的规律,均可以将数据文件的全部数据读入,因而在读取数据时显得更加灵活;而load函数在载入数据时,要求数据文件中的数据是有规律排列的,数据的排列类似矩阵或表格形式,否则不能成功读取数据。

三. 应用实例

在某次测试时,为了方便直接阅读数据文件,采用txt格式保存数据,并在测试数据前增加了一些描述性文字。数据文件的部分内容如下图一。

图一:数据格式

由于加入了一段说明性文字,文件中数据的含义更加直观,便于测试者直接阅读数据;但导致文件中的数据既包含数值型数据,也包含字符型数据;数据的排列也没有全部按矩阵格式,因而无法直接用“Load”函数载入数据。若使用“Load”函数读取以上数据,就会出现错误。

下图二是读取该数据的程序源代码。

图二:用fread函数读取不规则数据源代码

上例中,为了方便用户选择存放在不同地址、不同文件中的源数据文件,使用了“uigetfile”函数,用以产生交互式对话框(见图三)。使用“fread”函数读入数据的前,首先要打开文件;读取数据结束后,要关闭该文件。上例同样可以使用“fscanf”函数。

对于图一所示格式的数据,是不能使用“Load”函数的,否则会提示错误。

以上可见,“fread”或“fscanf”函数比较灵活,对数据文件的格式要求并不严格;可以将任意格式文件的数据读入,以便在后续程序中对数据进行整理。但与“Load”函数相比,由于读取数据的机制不同,“fscanf”或“fread”读取数据的效率相对较低,当数据规模比较大时,运行速度显著降低;若数据文件规模达到一定程度时,可能出现“Out of Memory”错误。而“Load”函数虽然效率高,但对数据文件格式要求比较严,要求数据是严格的矩阵格式,因而其适用范围受到一定限制。

图三:选择数据文件对话框

四. 结语

Matlab包含各种数据读入函数,不同函数的语法和应用场合各不相同;“Load”函数不仅语法简单,且读取数据的效率更高,对数据长度没有严格限制。

一般来说,从数据采集卡读取的数据就是严格的矩阵格式;为了提高数据处理的整体效率,保证源数据格式的规范性,一般不宜将采集卡输出的数据直接进行添加或删除字符的操作,而应直接将采集卡数据取出存盘,由Matlab读取后进行各类处理。

参考文献:

[1] 张志涌等,精通MATLAB6.5版,北京:北京航空航天大学出版社,2003

[2] MathworksHelp of Matlab.

[3] 邹鲲等,Matlab 6.x信号处理,北京:清华大学出版社,2002

[4] 陈亚勇等,Matlab信号处理详解,北京:人民邮电出版社,2001

[5] 梁虹等,信号与系统分析及Matlab实现,电子工业出版社,2002

本文来源:https://www.2haoxitong.net/k/doc/a793f87202768e9951e7389a.html

《MATLAB读入数据的几种方式探讨.doc》
将本文的Word文档下载到电脑,方便收藏和打印
推荐度:
点击下载文档

文档为doc格式