zoukankan      html  css  js  c++  java
  • matlab读取二进制数据文件的方法

    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;
     
    转载:http://blog.chinaunix.net/uid-8272118-id-2033295.html
  • 相关阅读:
    QuartusII13.0使用教程详解(一个完整的工程建立)
    基于Vivado调用ROM IP core设计DDS
    FPGA学习之路——一路走来
    基于basys2用verilog设计多功能数字钟(重写)
    基于basys2驱动LCDQC12864B的verilog设计图片显示
    PWM(脉宽调制)——LED特效呼吸灯设计
    Isim你不得不知道的技巧(整理)
    ISE、vivado、QuartusII调用notepad++、UE汇总(整理)
    java环境配置为1.7jdk为什么cmd java -version查看版本是1.8
    TCP/IP三次握手和HTTP过程
  • 原文地址:https://www.cnblogs.com/sddne/p/4701989.html
Copyright © 2011-2022 走看看