Shifting data when reading from binary file using fread
Show older comments
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 Comments
Walter Roberson
on 29 May 2019
Did you try using big endian?
dpb
on 29 May 2019
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
on 29 May 2019
Walter Roberson
on 29 May 2019
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
on 29 May 2019
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
on 29 May 2019
Lars Janssen
on 29 May 2019
Walter Roberson
on 29 May 2019
Edited: Walter Roberson
on 29 May 2019
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
on 30 May 2019
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
on 30 May 2019
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
on 30 May 2019
Answers (0)
Categories
Find more on National Instruments Frame Grabbers in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!