Storing data as binary strings
显示 更早的评论
Hello, I am trying to read 12 bit binary data from several text file and store this information in a multidimensional array (CH1_Waveforms).
However, when I access one of these binary numbers (in CH1_Waveforms) they are represented as 1.0000e+11 instead of the full binary representation of 100001101110 or whichever binary number it is.
I am quite new to Matlab and don't know how to solve this problem, I suspect it has something to do with floating point notation. I have fiddled around with my code and can't find a solution.
How can I represent this data in it's full 12 bit binary representation and not an exponential which cuts off the data?
Any help would be greatly appreciated. Thanks
Here's my code now
numCH=2;
fileID=fopen('Matlab_Data.txt','r');
formatSpec='%f';
Mathematica=fscanf(fileID, formatSpec);
numseg=Mathematica(1);
domain=Mathematica(2);
i=1;
while i<=numseg
formatSpec='%f';
filename=sprintf('CH1_Seg_%d_Waveform.txt',i);
fileID=fopen(filename,'r');
CH1_Waveforms(i,:)=fscanf(fileID, formatSpec);
filename=sprintf('CH1_Trigger_Seg_%d_Waveform.txt',i);
fileID=fopen(filename,'r');
CH1_Waveforms(i,:,2)=fscanf(fileID, formatSpec);
i=i+1;
end
1 个评论
Stephen23
2017-9-20
Read the binary data as characters, not as numeric.
采纳的回答
更多回答(1 个)
Guillaume
2017-9-20
binarystream = fileread(yourfile);
waveform = bin2dec(strsplit(binarystream));
should work and is very simple. That is assuming that the LSB in your text file is the right-most character. Otherwise, you'll have to reverse all the strings:
waveform = bin2dec(fliplr(char(strsplit(binarystream))));
2 个评论
"I couldn't get them to work"
Considering how simple the code is, it's puzzling why you couldn't get them to work. Showing us the exact code you actually used and the exact error you get (if any) would help to answer that question
I don't know how to convert to 12 bit signed decimal
Assuming a char array of Nx12 as produced by
binarydata = char(strsplit(fileread('CH1_Seg_1_Waveform.txt')))
then
signbit = binarydata(:, 1) - '0';
signeddecimal = bin2dec(binarydata) - signbit.*2^12
That's using 2's complement arithmetic with the sign bit as the MSB (1st character). It's fairly easy to cope with different endianness.
Jan
2017-9-20
+1: I've overseen the detail, that bin2dec works on cell strings directly.
类别
在 帮助中心 和 File Exchange 中查找有关 Data Type Conversion 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!