matlab - 在 MATLAB 中将二进制数据读取为三个 UBYTE(8 位无符号字节)并使用位移运算符得到两个 12 位流
问题描述
我需要在 MATLAB 中将数据读取为 UBYTE(8 位无符号字节),然后使用位移运算符获得两个 12 位流,样本数为 3600000。我必须通过一个命令来做到这一点,即前 3 个 UBYTE 中包含前两个 12 位值,第一个字节中的 8 位,第二个字节中的前 4 位,然后是字节 2 中的前 4 位,所有 8字节 3 中的位。然后该过程重复接下来的 3 个字节(字节 4-6 等),依此类推。
第一个 12 位值:字节 1 |+ (( 字节 2 & 0xf0) << 4)
第二个 12 位值: (( byte 2 & 0xf) << 4) |+ ((byte 3 & 0xf0) >> 4) |+ ((byte 3 & 0xf) << 8)
如何在MATLAB中应用此命令?
解决方案
如果我理解正确,那么这样的事情可能会起作用:
% 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
andbitand
命令可能是您正在寻找的。
输出是 unit16 的两个数组。如果您需要输出为 12 位类型,我不确定如何在 matlab 中最好地做到这一点。
推荐阅读
- html - 为什么顶部导航栏(offcanvas)在我的 html css 代码中没有完美的过渡
- python - 使用 python 的 Azure 文本分析 api
- python - 加快列表理解,替代方案?
- python - 将 x 轴标准化为 0 到 1?
- ruby-on-rails - 如何向 form_with 添加隐藏字段?
- r - R值;将字符串平均分成两部分
- vis.js - 如何从集群中获取所有边缘 ID
- javascript - 在相同位置的html DOM元素中替换后转换字符串
- r - 在R中的森林图标题中将两列合并为一行
- firebase - 将集合从云存储导入到 Firestore