我想创建自己的C函数以内插一些数据点并找到准确的最小值(总体项目是音频调谐,并且我正在使用运行良好的YIN算法)。我正在数字DSP K22F ARM芯片上实现此功能,因此我希望在主要功能推送至显示和#/ b指示器的同时,尽可能减少在中断内实现的浮点乘法。
我已经达到需要插值的程度,我已经实现了算法,找到了 integer 的最小值,现在需要进行插值。目前,我正尝试使用我的3点进行抛物线插补。 I have found one that works within a small margin of error大多数插值函数似乎只在两点之间完成。
secant method on this page似乎可以很好地适用于我的应用程序。但是,我不知道如何将3点与此2点方法结合起来。也许我会以错误的方式进行操作?
我发现一些示例代码可以得到与我的代码完全相同的答案。
示例代码:
betterTau = minTau + (fc - fa) / (2 * (2 * fb - fc - fa));
我的代码:
newpoint = b + ((fa - fb)*(c-b).^2 - (fc - fb)*(b-a)^2) / ...
(2*((fa-fb)*(c-b)+(fc-fb)*(b-a)))
其中x点的值是a,b和c。每个点的值分别是fa,fb和fc
当前,我只是在MATLAB上进行仿真,然后再将其放到板上,这就是为什么语法不是C的原因。从数学上讲,我没有看到这两个等式如何等效。
谢谢。