logo资料库

一个“matlab直接读取二进制数据文件”程序.doc

第1页 / 共2页
第2页 / 共2页
资料共2页,全文预览结束
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 真的是挺强大的事后数据分析、建模软件啊。
(这是原始数据中,一组数据) (这是卷积处理后的数据)
分享到:
收藏