How to improve bit reading process in Matlab?
Show older comments
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 Comments
Walter Roberson
on 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
on 6 Sep 2019
Walter Roberson
on 6 Sep 2019
bittable = (dec2bin(0:255, 8) - '0').';
a8 = fread(fid, 'uint8');
a = reshape( bittable(a8, :), [], 1);
Star Rats
on 6 Sep 2019
Walter Roberson
on 6 Sep 2019
Edited: Walter Roberson
on 6 Sep 2019
a = reshape( bittable(double(a8)+1, :), [], 1);
Star Rats
on 6 Sep 2019
Walter Roberson
on 6 Sep 2019
a = reshape( bittable(:,double(a8)+1), [], 1);
Star Rats
on 6 Sep 2019
Walter Roberson
on 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
on 6 Sep 2019
Walter Roberson
on 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
on 12 Sep 2019
Walter Roberson
on 12 Sep 2019
Edited: Walter Roberson
on 12 Sep 2019
Yes, you can use gpu array. However it will slow down your code.
Star Rats
on 18 Jul 2020
Answers (0)
Categories
Find more on Loops and Conditional Statements 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!