2014-03-26 30 views
0

我有一个由瞬态,稳定和断电状态组成的矢量电力消耗数据。我想通过以下的条件,以确定稳定状态的起点:请求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:数据= 0表示关机状态)

+0

我猜想即使超过5个连续元素相同,您也只需要第一个元素?不确定你的“稳态”条件 - 在这之下,即使总体上升超过10W,你也可以检测到缓慢上升为“稳态”。 – nkjt

回答

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); 
+0

感谢您的咨询。我使用了nlfilter命令,它可以很好地检测稳态周期的启动和停止。但是,由于该命令检测到指定的模式并将其位置定位在其中心(不在起点),因此必须应用数据点移位才能正确识别。 – user3464608