Я хочу создать свою собственную функцию C, чтобы интерполировать некоторые точки данных и найти точный минимум (общий проект - настройка звуковой частоты, и я использую алгоритм YIN, который работает хорошо).Я реализую это на цифровой микросхеме DSP K22F ARM, поэтому я хочу минимизировать умножения с плавающей запятой, насколько это возможно, для реализации в прерывании, пока основная функция выдвигается на дисплей и индикаторы # / b.Я дошел до того, что мне нужно выполнить интерполяцию. Я реализовал алгоритм, нашел минимум integer и теперь должен выполнить интерполяцию.В настоящее время я пытаюсь параболически интерполировать, используя 3 точки, которые у меня есть. Я нашел один, который работает с небольшим запасом ошибки Большинство функций интерполяции, кажется, выполняются только между двумя точками.
Кажется, что * * * * * * * секущий метод на этой странице хорошо подойдет для моего приложения.Тем не менее, я не знаю, как объединить 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. Математически я не вижунасколько эти два уравнения эквивалентны.
- Может кто-нибудь объяснить мне, как эти две функции эквивалентны?
Заранее спасибо.