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 ; % 這里是跳過的字節數
clear ;
data_fname = 'data.dat' ; % 這里是文件名
jump_distance = 2048 ; % 這里是跳過的字節數
% 打開方式為二進制打開,其實'r'就行,matlab是默認二進制形式打開文件的
file_id = fopen(data_fname, 'rb');
% 從文件開始跳過jump_distance個字節
fseek(file_id, jump_distance, 'bof');
fseek(file_id, jump_distance, 'bof');
% 先手工構造一個1x512大小的矩陣
raw_data = [1:1:512] ;
while feof(file_id) == 0
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
[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 = 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; row_array] ;
end
end
% get off the first line [1:1:512]
% 這里就是要把raw_data的第一行數據手工構造的那行數據給去掉,剩下的就都是文件中的數據了
raw_data(1,:)=[] ;
raw_data(1,:)=[] ;
% 關閉文件
fclose(file_id);
fclose(file_id);
% delete other usless vars
% 這里是把用過的變量都刪除掉,免得workspace里面亂七八糟的什么都有,這是個好習慣,呵呵。
clear data_fname jump_distance file_id fid ele_count i m n row_array ans;
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