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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM