【问题标题】:Ask for MATLAB code to detect steady state of data求 MATLAB 代码检测数据的稳定状态
【发布时间】:2014-03-26 23:17:54
【问题描述】:

我有一个由瞬态、稳定和断电状态组成的电力消耗数据向量。我想通过以下条件确定稳态起点:

  • 数据的 5 个连续元素在每个相邻元素之间具有差异值
  • 满足条件的第一个元素表示稳态的起点。

例子:

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表示关机状态)

【问题讨论】:

  • 我认为即使超过 5 个连续元素相同,您也只想要第一个元素?不确定您的“稳态”条件 - 在此条件下,即使整体上升超过 10W,您也可以将缓慢上升检测为“稳态”。

标签: matlab


【解决方案1】:

这里有一种使用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);

【讨论】:

  • 感谢您的建议。我用过nlfilter命令,它可以很好地检测稳态周期的开始和停止。但是,由于该命令检测指定的模式并将其位置定位在其中心(而不是起点),因此必须应用数据点移位才能正确识别。
猜你喜欢
  • 2018-07-31
  • 1970-01-01
  • 2020-10-07
  • 2016-08-09
  • 1970-01-01
  • 2016-06-03
  • 1970-01-01
  • 1970-01-01
  • 2018-02-12
相关资源
最近更新 更多