首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在MATLAB中将二进制数据读取为三个UBYTE (8位无符号字节),并使用位移位操作符获得两个12位流。

在MATLAB中将二进制数据读取为三个UBYTE (8位无符号字节),并使用位移位操作符获得两个12位流。
EN

Stack Overflow用户
提问于 2020-12-15 13:02:54
回答 1查看 134关注 0票数 0

我需要在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中应用此命令?

EN

回答 1

Stack Overflow用户

发布于 2020-12-15 14:04:03

如果我的理解是正确的,那么像这样的事情可能会奏效:

代码语言:javascript
复制
% 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);

我可能在口罩上犯了一个错误,但是bitshiftbitand命令可能就是您要找的。

输出是两个unit16数组。如果您需要输出为12位类型,我不知道如何最好地在matlab中这样做。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65306422

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档