在Matlab数据流中查找更改

时间:2015-09-15 17:24:54

标签: matlab

我目前有一个列形式的离散值数据流。

例如;

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设置的位。

有没有办法在逐位级别上更多地跟踪这个,这样我就能看到哪些位被设置和清除,而不是分成十进制值变化?

1 个答案:

答案 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(...))来识别更改。