我目前有一个列形式的离散值数据流。
例如;
x = [0 0 0 33 33 129 129 255 33 33 0]';
这些十进制值中的每一个都具有二进制表示,其中每个位表示表中的一些描述。因此,对于129(10000001),位0和7具有我需要查找的相关描述。对于数据流中的所有值都是如此。
目前我正在做以下事情;
z = find(logical(diff(x)));
其中提供了x
中更改的位置。然后我使用for循环遍历z并找到位等于1的位置。
fault = find(dec2bin(z(i)) == '1');
这一切都运行正常,但是目前我的答案被分成十进制值变化组。因此输出看到两个33的实例,129个中的两个,255个中的一个,以及33个中的两个。然而,在逐位级别上,类似于位1的东西实际上设置了整个时间。这就是我真正想要的,但是我很难找到一种方法来跟踪JUST设置的位。
有没有办法在逐位级别上更多地跟踪这个,这样我就能看到哪些位被设置和清除,而不是分成十进制值变化?
答案 0 :(得分:0)
你的问题并不完全清楚,但我想你想找到它改变的流中哪个位置的每个位。以下是:
bin = dec2bin(x);
nbits = size(bin, 2);
for bit = 1 : nbits
fprintf('bit %d was changed at:', nbits - bit)
fprintf(' %d', find(diff(bin(:, bit))))
fprintf('\n')
end
对于您的示例x
,输出为
bit 7 was changed at: 5 8
bit 6 was changed at: 7 8
bit 5 was changed at: 3 5 7 10
bit 4 was changed at: 7 8
bit 3 was changed at: 7 8
bit 2 was changed at: 7 8
bit 1 was changed at: 7 8
bit 0 was changed at: 3 10
诀窍是首先将数据转换为二进制表示,然后使用find(diff(...))
来识别更改。