extracting bit packed data

조회 수: 5 (최근 30일)
Muhammad
Muhammad 2012년 2월 15일
댓글: Walter Roberson 2023년 1월 22일
Hi
I have an matrix with dimensions 5 x 200 x 100, I want to extract the data encoded in the 2nd and 3rd bit of the first byte (first byte means 1 x 200 x 100).
similarly i would need the data encoded in the 4th and 5th bit also.
Please note that by "data" i mean a digit between 0-3 (as it is being extracted from 2 bits)
Best regards, Muhammad
  댓글 수: 1
Muhammad
Muhammad 2012년 2월 15일
이동: Voss 2023년 1월 21일
waiting for the answer.

댓글을 달려면 로그인하십시오.

답변 (3개)

Walter Roberson
Walter Roberson 2012년 2월 15일
There are arithmetic means, and there is bitget()
  댓글 수: 2
Muhammad
Muhammad 2012년 2월 16일
Thanks walter. But I have used bitget and got following response.
??? Undefined function or method 'bitget' for input arguments of type 'int8'.
additionally, bit get can give me value of one bit (i.e. either 0 or 1). Where as i need the integer value of combined bits 2-3 (so the answer should be an integer among 0,1,2 or 3.
Walter Roberson
Walter Roberson 2023년 1월 22일
bitget(int8(23), 1:5)
ans = 1×5
1 1 1 0 1
But that is current day; perhaps int8 was not supported back in 2012.

댓글을 달려면 로그인하십시오.


Jan
Jan 2012년 2월 15일
x = floor(rand(5, 200, 100) * 256);
a = rem(x(1, :, :) / 2, 4);
Are these the 2nd and 3rd "bits" you are looking for? It depends on the counting direction and if you start with 0 or 1.
See also bitget.
  댓글 수: 1
Muhammad
Muhammad 2012년 2월 16일
Thanks Jan. No I am not looking for the bits themselves. I am looking for the integers packed in 2-3 bits. So the answer I am looking for should be an integer among 1,2,3 or 4

댓글을 달려면 로그인하십시오.


Floris Jansen
Floris Jansen 2023년 1월 21일
Bit late with an answer, but this should work for you:
Note that if the bits are not contiguous you could still extract the data, but it will be a bit more work...
% start with a multi dimensional array of uint8
% (any number of dimensions should work)
myData = uint8(randi(255,[10,20,30]));
% create a mask with ones in the bit positions you want:
mask1 = 0b00110000; % extract 2 bits in positions 2,3
mask2 = 0b00011100; % extract 3 bits in positions 3,4,5
% now do bit and, and shift to get the number
data1 = bitand(myData, mask1)/16; % shift right by 4
data2 = bitand(myData, mask2)/4; % shift right by 2
% observe the results:
figure
subplot(2,1,1)
histogram(data1(:));
subplot(2,1,2);
histogram(data2(:));

카테고리

Help CenterFile Exchange에서 Time Series에 대해 자세히 알아보기

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by