Я пытаюсь интерполировать и найти минимальный х интерполяции в C (возможно, с секущим методом) - PullRequest
0 голосов
/ 08 декабря 2018

Я хочу создать свою собственную функцию 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. Математически я не вижунасколько эти два уравнения эквивалентны.

  • Может кто-нибудь объяснить мне, как эти две функции эквивалентны?

Заранее спасибо.

...