我需要在MATLAB中读取UBYTE (8位无符号字节)的数据,然后使用位移位操作符获得两个12位流和3600000个样本。我必须通过命令将前两个12位值包含在前3个UBYTEs中,第一个字节包含8位,第二个字节包含前4位,第3字节中包含前4位,字节3中包含所有8位。然后这个过程会重复接下来的3个字节(字节4-6等)。诸若此类。
前12位值:字节1 |+ ((字节2& 0xf0) << 4)
第二个12位值:((字节2和0xf) << 4) |+ ((字节3和0xf0) >> 4) |+ ((字节3和0xf) << 8)
如何在MATLAB中应用此命令?
发布于 2020-12-15 14:04:03
如果我的理解是正确的,那么像这样的事情可能会奏效:
% Some data for testing
data = randi([0, 256], 1, 9, 'uint8');
% Reshape data so two 12-bit values are in each column
data = reshape(data, 3, []);
m1 = uint16(hex2dec('0f'));
m2 = uint16(hex2dec('f0'));
first_values = uint16(data(1, :)) + bitshift(bitand(uint16(data(2, :)), m2), 4);
second_values = bitshift(bitand(uint16(data(2, :)), m1), 4) ...
+ bitshift(bitand(uint16(data(3, :)), m2), -4) ...
+ bitshift(bitand(uint16(data(3, :)), m1), 8);我可能在口罩上犯了一个错误,但是bitshift和bitand命令可能就是您要找的。
输出是两个unit16数组。如果您需要输出为12位类型,我不知道如何最好地在matlab中这样做。
https://stackoverflow.com/questions/65306422
复制相似问题