【发布时间】:2018-05-17 08:39:34
【问题描述】:
在下面的曲线(蓝线)中,我试图检测应该位于 x = 2.5 附近的“膝盖/肘部”
这是我正在使用的一组值:
x = {-10, -9, -8, -7, -6, -5, -4, -3, -2 , -1, 0, 1, 2, 3, 4, 5, 6, 7、8、9、10}
y = {0, 10, 20, 30, 40, 50, 60, 70, 80, 90, 100, 107, 122, 145, 176, 215, 262, 317, 380, 451, 530, 617}
我已经尝试过Kneedle algorithm 和formal definition of the curvature of a graph(有符号曲率)。我在使用 Kneedle 算法时遇到的问题是,在实时应用程序(嵌入式系统)中,我不知道 y 轴的最大值是哪个,所以我无法正确归一化点,也无法找到斜率值适用于所有情况。当使用图形曲率的正式定义时,我尝试用 5 阶多项式(绿线)拟合曲线,然后获取导数的值来计算曲率。然而,此方法找到 x = -2 附近的曲率,因为该点周围存在多项式曲率。
有人可以建议我一种检测膝盖/肘部的方法吗?
【问题讨论】:
-
你知道如何数值计算一阶导数吧? (斜率),二阶导数当然只是 THAT 的一阶导数。 (斜率变化率)。如果您尝试对完整数据集进行曲线拟合,这实际上会从您需要的信息中“删除”信息,而不是添加信息。另一种方法是“区间二等分”,您将其分成两半,并寻找具有最大“斜率不一致”的“段”,您可以从每个范围内的 10 个样本中采样并获取每个样本的斜率.
-
顺便说一句,当我说“采取一阶导数”时,我并不是说你最终得到一个数字,而是一个新的 CURVE(点集)。如果不清楚。
-
问题:您的数据实际建模的是什么?因为,照原样,没有理由假设函数是严格递增的,所以期望函数回退更有意义,因此(可能)具有任意数量的相同值的最大曲率“点” .同样重要的是:您的信号是平滑的,还是我们只是猜测这是一个平滑的函数?
-
@Mike'Pomax'Kamermans 我的数据实际上是来自电流传感器的输入。事实上,数据有太多的噪音。尽管如此,使用 Savitzky-Golay 过滤器,我可以使曲线变得相当平滑。为什么你说期望功能回退更有意义?我不清楚。
标签: algorithm curve polynomials