我有一个电力消耗数据向量,包括瞬态,稳定和断电状态。我想通过以下条件确定稳态起点:
示例:
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 3
和6 5 4 3 4
。因此,输出应显示第10个数据元素(= 30)和第27个数据元素(= 33)作为稳态的起始点(检测到2次稳态)。
我如何为这种情况编写MATLAB代码?
(PS:data = 0表示断电状态)
答案 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);