reading complex data into a matlab array

조회 수: 21 (최근 30일)
Alex
Alex 2011년 11월 27일
답변: Matthew Parry 2019년 11월 7일
Hi,
To keep it short: How can you read complex doubles into a matlab array from raw data files. To keep it long, see below.
I have a raw data file taken from an MR scanner. I have been using the IDL language to read/reconstruct it but my files have become large and the memory management in IDL is no longer good enough. I need to know how to read this data into matlab. The problem is in the data-type. IDL can create complex double arrays but it seems matlab cannot. The data is arranged as follows: header-->data-->header-->data... etc. I know how many bytes the headers are so i can move a pointer using fseek/fread etc however I do not know how to read in the data into an array. Each data point is a 16 byte complex number. If I dont move the pointers correctly then the data becomes scrambled etc. The data parts are structured: real --> IM --> real --> IM and so on. When I read in 16 bytes into IDL I get the correct values. It would be so simple if there were a complex double datatype in matlab. I've thought about parsing the data as I read it into a real and im matrix and then combining them afterwards but there must be an easier way?

채택된 답변

Jared
Jared 2011년 11월 27일
If I understand the question correctly, something along these lines should work (although don't trust me on the fread syntax - it's been a while):
fp = fopen(file_of_interest);
% code for reading the header, etc.
complex_matrix = complex(ones(final_size),ones(final_size));
for i=1:length(complex_matrix(:))
complex_matrix(i) = complex(fread(fp,8,'*double'),fread(fp,8,'*double'));
end
% whatever other finalization you need to do
fclose(fp);
  댓글 수: 2
Alex
Alex 2011년 11월 27일
Thanks Jared,
Ill try this out!
A
A 2012년 2월 7일
What part of this solves the header->data->header->data?
I'm dealing with the same issue but not complex numbers. What exactly is the '8' in fread(fp,8,'*double") telling it to do? In that spot I currently have my matrix size [4x4]. Is there a way to not read in the header parts?

댓글을 달려면 로그인하십시오.

추가 답변 (1개)

Matthew Parry
Matthew Parry 2019년 11월 7일
From R2019a onwards you can use the function readmatrix().

카테고리

Help CenterFile Exchange에서 MRI에 대해 자세히 알아보기

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by