查找数据趋于平稳和上升时间的位置
Finding where data levels off and rise times
我的数据是这样的:
我正在尝试查找有关我的数据的以下信息:
"transient" 部分的增长率
达到稳态的时间和稳态平均值
我认为 stepinfo 是我最好的选择,但它似乎想要将最终值作为稳态值,这并没有给我最好的结果。而且我无法找到稳定时间的平均值,直到我知道它是什么时候......有没有办法在稳态搜索上设置一些界限?在我链接的图片上,50 个数据点可能是 +/- 0.25 内的数据是稳定状态?
您可以做的是:
- 决定曲线在瞬态和稳态交点处的斜率
- 平滑你的信号
- 找出图表上每个点之间的差异
- 找到点之间的差异低于您在
中选择的值的第一个位置
为此,请记住:
开始的差异平均为零,因此您必须跳过这些值。
一种方法很简单:x(x < 0.1 * max(x)) = [];
这样你就可以删除曲线的整个起点。无论如何,这部分你不需要它。记得备份 x
.
平滑信号的简单方法是:smooth_x = arrayfun(@(t) mean(x(t:t+k)), 1:numel(x-k))
。您需要为 k
找到合适的值。
即使平滑的曲线也会有 "bumps",因此您可能想要比较不相邻的点,例如检查 diff(x(k),x(k+10))
。如果这两点之间的平均倾斜度低于您在 1 中选择的值,您就满意了。 find
和 diff
的组合应该可以解决这个问题。
平滑后,您可以使用 diff
找到瞬态和稳定部分的平均倾斜度。
我无法判断曲线从瞬变到稳定的位置。这是你需要做出的决定。例如,每 10 秒可能小于 0.2 l/min。
我的数据是这样的:
我正在尝试查找有关我的数据的以下信息:
"transient" 部分的增长率
达到稳态的时间和稳态平均值
我认为 stepinfo 是我最好的选择,但它似乎想要将最终值作为稳态值,这并没有给我最好的结果。而且我无法找到稳定时间的平均值,直到我知道它是什么时候......有没有办法在稳态搜索上设置一些界限?在我链接的图片上,50 个数据点可能是 +/- 0.25 内的数据是稳定状态?
您可以做的是:
- 决定曲线在瞬态和稳态交点处的斜率
- 平滑你的信号
- 找出图表上每个点之间的差异
- 找到点之间的差异低于您在 中选择的值的第一个位置
为此,请记住:
开始的差异平均为零,因此您必须跳过这些值。 一种方法很简单:
x(x < 0.1 * max(x)) = [];
这样你就可以删除曲线的整个起点。无论如何,这部分你不需要它。记得备份x
.平滑信号的简单方法是:
smooth_x = arrayfun(@(t) mean(x(t:t+k)), 1:numel(x-k))
。您需要为k
找到合适的值。即使平滑的曲线也会有 "bumps",因此您可能想要比较不相邻的点,例如检查
diff(x(k),x(k+10))
。如果这两点之间的平均倾斜度低于您在 1 中选择的值,您就满意了。find
和diff
的组合应该可以解决这个问题。
平滑后,您可以使用 diff
找到瞬态和稳定部分的平均倾斜度。
我无法判断曲线从瞬变到稳定的位置。这是你需要做出的决定。例如,每 10 秒可能小于 0.2 l/min。