Shifting data when reading from binary file using fread
이전 댓글 표시
I am trying to read experimental data from a binary file using fread. While the resulting data is read almost correct, the data is slightly shifting in a seemingly unpredictable manner. An example of this is given below (note that the direction of shifting is different for all signals):

While the result should look more like:

I am using the following code:
fid = fopen('sound_s3');
data = fread(fid,[1024, inf],'int32'); % reading in the 1024 signals of ~50k samples each
fclose(fid);
data = data/2^31; % converting bit to pressure
% plotting the examples
figure
plot(data(1,1:20000)');
xlabel('sample');ylabel('pressure')
figure
data = data - smoothdata(data,2,'movmean',1000);
plot(data(1,1:20000)');
xlabel('sample');ylabel('pressure')
Does anyone know what could cause this issue? I have tried basically all 'fread' options, and I am sure that the data is stored in 32 bit precision.
Note that I am sure that the signal is measured and should look like the second image.
Thanks in advance!
댓글 수: 11
Walter Roberson
2019년 5월 29일
Did you try using big endian?
dpb
2019년 5월 29일
Walter's probably got it but just in case there's something really funky going on; give us the vendor datasheet that describes the data format used by the data acq card/system.
Lars Janssen
2019년 5월 29일
Walter Roberson
2019년 5월 29일
Comparing that information to the plot, what I suspect is that you need to read the values with 'int32=>double', then divide by 2^31, and multiply by 8.003663365181634 . However it would not surprise me if instead what you need to do is read as '*uint32', and then
neg = data >= 2^31;
data(neg) = data(neg) - 2^31;
scaled = double(data) ./ 2^31 * 8.003663365181634;
scaled(neg) = -scaled(neg);
dpb
2019년 5월 29일
Me, neither, by the exact name w/o any more context.
What I see is Fixed Point Fraction that makes me think isn't just an integer but a float in an integer represenation.
Who's the vendor/what's the device? Somewhere there's got be sample code to read the data; oftentimes there will be a Matlab version, too.
Lars Janssen
2019년 5월 29일
Lars Janssen
2019년 5월 29일
Walter Roberson
2019년 5월 29일
편집: Walter Roberson
2019년 5월 29일
The architecture is a bit messy; and Yes, they don't want people doing their own analysis.
Alternatives: https://www.ncbi.nlm.nih.gov/pmc/articles/PMC5795332/
dpb
2019년 5월 30일
Didn't see a thing that described the format...that's simply rude.
At this point unless you can find some other Rosetta stone, would seem next step would be to take a file and decode it with their tool and reverse engineer the file structure with the few hints that are given....or, find a non-proprietary solution.
Walter Roberson
2019년 5월 30일
I got lost in the question of bit depth. One part says that the daq are single bit and then a second later it was talking about 32 bits per sample.
Lars Janssen
2019년 5월 30일
답변 (0개)
카테고리
도움말 센터 및 File Exchange에서 National Instruments Frame Grabbers에 대해 자세히 알아보기
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!