Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1532565
  • 博文数量: 114
  • 博客积分: 10010
  • 博客等级: 上将
  • 技术积分: 1357
  • 用 户 组: 普通用户
  • 注册时间: 2006-11-19 18:13
文章分类
文章存档

2010年(8)

2009年(9)

2008年(27)

2007年(62)

2006年(8)

我的朋友

分类:

2007-12-01 00:15:58

北京理工大学  20981  陈罡
matlab可以直接读取二进制数据文件,并且可以将其加入到矩阵中。
如果对c语言十分熟悉的话,应该对fopen,fclose,ftell,fseek,fread,fwrite,feof
这些函数非常熟悉了,幸运的是在matlab中仍然可以使用这些函数来读入实验数据。
现在假定有一个数据文件叫data.dat,它的前面2k是存放参数的,我们做数据处理的时候
需要跳过去,后面的数据是16位整数类型的,每组数据有512个。现在要把该数据文件的
所有数据读入一个nx512的矩阵中,n的个数不定,根据数据文件中的数据而定。
 
用.m脚本的方式编写如下:
% deal data from specified data file
clear ;
data_fname = 'data.dat' ; % 这里是文件名
jump_distance = 2048 ;    % 这里是跳过的字节数
% 打开方式为二进制打开,其实'r'就行,matlab是默认二进制形式打开文件的
file_id = fopen(data_fname, 'rb');
% 从文件开始跳过jump_distance个字节
fseek(file_id, jump_distance, 'bof');
% 先手工构造一个1x512大小的矩阵
raw_data = [1:1:512] ;
while feof(file_id) == 0
    % 这就是大名顶顶的fread了,数据类型是int16,每次读入512个数
    % raw_array每次都是512x1的矩阵,ele_count为读入的数的个数(正常情况下应为512)
    [row_array, ele_count] = fread(file_id, 512, 'int16') ;
    if ele_count < 512 % elecount < 512代表数据不够,已经到了文件的结尾
        break ;
    else
        % 将512x1的row_array转置一下,变为1x512的矩阵
        row_array = row_array'  ;
        % 然后,将row_array追加到raw_data中
        raw_data = [raw_data; row_array] ;
    end
end
% get off the first line [1:1:512]
% 这里就是要把raw_data的第一行数据手工构造的那行数据给去掉,剩下的就都是文件中的数据了
raw_data(1,:)=[] ;
% 关闭文件
fclose(file_id);
% delete other usless vars
% 这里是把用过的变量都删除掉,免得workspace里面乱七八糟的什么都有,这是个好习惯,呵呵。
clear data_fname jump_distance file_id fid ele_count i m n row_array ans;
 
好了,得到这些数据以后,就可以做一些常规的数据处理了。其它算法部分,就不多说了让人乏味。
贴几张图show一下,matlab真的是挺强大的事后数据分析、建模软件啊。
(这是原始数据中,一组数据)
(这是卷积处理后的数据)
matlab7.0
 
阅读(33433) | 评论(6) | 转发(0) |
给主人留下些什么吧!~~

chinaunix网友2010-10-28 14:33:32

请教一下,如果不知道前面的设备参数的大小,那该怎么办?还有我的数据是1500*5,第一列是整数,后四列是7位的小数,那又该怎么读取呢?

chinaunix网友2009-05-20 15:21:30

请教一下,我编写了一个程序,最后产生了一个5行10列的二维数组JG,请问如何将JG这个数组以float型写入二进制文件,并放在matlab的work目录下,谢谢!!!

chenwayne2008-03-18 10:51:10

不需要跳过的,这里是特殊的设备采集下来的数据,前面2k是设备参数。 做传统的数据处理,不需要跳,只要直接读取二进制数据即可。

sunxiaoxia2008-03-18 09:26:42

请问它的前面2k是存放参数的,我们做数据处理的时候……这里面前两千个数据在所有dat里全是存放参数的还是这个是个特例呢?也就是说别的不用跳过,谢谢!

sunxiaoxia2008-01-12 21:24:59

谢谢你呦……