要求MATLAB代码检测稳定的数据状态

时间:2014-03-26 14:58:19

标签: matlab

我有一个电力消耗数据向量,包括瞬态,稳定和断电状态。我想通过以下条件确定稳态起点:

  • 数据的5个连续元素在每个相邻元素之间具有差值< =阈值(对于这种情况,假设= 10 W)
  • 满足条件的第一个元素显示稳态的起点。

示例:

data = [0 0 0 40 70 65 59 50 38 30 32 33 30 33 37 19 ...
        0 0 0 41 73 58 43 34 25 39 33 38 34 31 35 38 19 0]

abs(diff(data)) = [0 0 40 30 15 7 9 12 8 3 2 1 3 4 18 19 ...
                   0 0 41 32 15 9 14 6 5 4 3 4 3 19 19 0] 

符合条件的abs(diff(data))序列为8 3 2 1 36 5 4 3 4。因此,输出应显示第10个数据元素(= 30)和第27个数据元素(= 33)作为稳态的起始点(检测到2次稳态)。

我如何为这种情况编写MATLAB代码?

(PS:data = 0表示断电状态)

1 个答案:

答案 0 :(得分:3)

这是使用nlfilter的一种方法(如果该功能不可用,您可以自己实现滑动窗口):

data = [0 0 0 40 70 65 59 50 38 30 32 33 30 33 37 19 0 0 0 41 73 58 43 34 25 39 33 38 34 31 35 38 19 0];
difs = abs(diff(data));
% Use sliding window to find windows of consecutive elements below threshold
steady = nlfilter(difs, [1, 5], @(x)all(x <= 10));
% Find where steady state starts (1) and ends (-1)
start = diff(steady);
% Return indices of starting steady state
ind = find(start == 1);