How to improve bit reading process in Matlab?
Ältere Kommentare anzeigen
I need to read a binary file and the Matlab coding is:
a = uint8(fread(fid,'ubit1')');
This is inefficient so I added a line below:
a = uint16(swapbytes(a));
But it doesn't help. Any other method to improve the bit reading process in Matlab?
14 Kommentare
Walter Roberson
am 6 Sep. 2019
Is there any reason that you are not reading uint8? And possibly extracting bits afterwards? Either with bitget() or with a lookup table ?
Star Rats
am 6 Sep. 2019
Walter Roberson
am 6 Sep. 2019
bittable = (dec2bin(0:255, 8) - '0').';
a8 = fread(fid, 'uint8');
a = reshape( bittable(a8, :), [], 1);
Star Rats
am 6 Sep. 2019
Walter Roberson
am 6 Sep. 2019
Bearbeitet: Walter Roberson
am 6 Sep. 2019
a = reshape( bittable(double(a8)+1, :), [], 1);
Star Rats
am 6 Sep. 2019
Walter Roberson
am 6 Sep. 2019
a = reshape( bittable(:,double(a8)+1), [], 1);
Star Rats
am 6 Sep. 2019
Walter Roberson
am 6 Sep. 2019
Your sync_word is wrong. It should be
syn = ones(1,12);
isMP2 = 1; %0 for MP4
layer = zeros(1,2);
sync_word = [syn, isMP2, layer];
Same total number of bits, but you had 0 1 for layer instead of 0 0.
Star Rats
am 6 Sep. 2019
Walter Roberson
am 6 Sep. 2019
It is reading byte by byte and translating to bits.
There is a theoretical possibility that the order of bits within a byte is reversed but it seems unlikely.
Star Rats
am 12 Sep. 2019
Walter Roberson
am 12 Sep. 2019
Bearbeitet: Walter Roberson
am 12 Sep. 2019
Yes, you can use gpu array. However it will slow down your code.
Star Rats
am 18 Jul. 2020
Antworten (0)
Kategorien
Mehr zu Logical finden Sie in Hilfe-Center und File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!