部分正弦数据适合代码C.

时间:2014-11-03 12:31:06

标签: c curve-fitting sine

我有8个数据点,形成部分正弦波的峰值。我试图拟合这些来得到一个方程,所以我发现了真正的最大位置(很可能位于数据点之间)。编码将在C中。是否有人有任何算法信息或理想的代码样本?

2 个答案:

答案 0 :(得分:2)

由于数据点都接近最大值,因此波y = A*sin(B*x + C) + D可以近似为抛物线,就像前两个cos(x)=(1.0 - x * x / 2!+ .. )。

因此,找到8个数据点的最佳拟合抛物线并计算最大值。 C- Peak detection via quadratic fit

存在很多谷歌示例。 Example

答案 1 :(得分:1)

如果您的样本值形成“驼峰”,即增加然后减少样本,您可以尝试将样本值视为“权重”并计算“重心”:

float cog = 0f;
for (i=0; i<num_samples; ii+) {
    cog += i * samples[i];
}
cog /= num_samples;

我过去在类似的情况下使用过它。

注意:此方案仅在使用的样本集包含单个峰值时才有效,问题措辞肯定让我认为是这样的。通过监测,如果样本值增加或减少,选择“有趣”的样本范围并按照描述计算峰值位置,可以轻松找到感兴趣的位置。

另请注意,如果实际目标是确定输入信号的正弦波相位或频率,那么将信号与正弦波参考集相关联会更好(换句话说,做傅立叶变换)。