получить значение фильтра в произвольный момент времени - PullRequest
0 голосов
/ 13 мая 2010

Контекст: я пытаюсь улучшить значения, возвращаемые iPhone CLLocationManager, хотя это более распространенная проблема.Ключевым моментом является то, что CLLocationManger возвращает данные о текущей скорости, как и когда она ощущается, а не с фиксированной частотой дискретизации.

Я хотел бы использовать уравнение обратной связи для повышения точности

v=(k*v)+(1-k)*currentVelocity

, где currentVelocity - это скорость, возвращаемая didUpdateToLocation: fromLocation: и v - выходная скорость (также используется для элемента обратной связи).

Из-за «как и когда»nature of didUpdateToLocation: fromLocation: я мог бы рассчитать временной интервал с момента его последнего вызова и сделать что-то вроде

for (i=0;i<timeintervalsincelastcalled;i++) v=(k*v)+(1-k)*currentVelocity

, которое бы работало, но не тратит циклов.Тем более, что я, вероятно, хочу, чтобы интервалы времени, измеряемые как измеряемые как десятые доли секунды.

Есть ли способ решить эту проблему без цикла?т.е. переделать (интегрировать?) формулу, чтобы я поместил интервал в уравнение и получил тот же ответ, что и при итерации?

Ответы [ 2 ]

1 голос
/ 19 мая 2010

Если вы напишите исходное уравнение как

v = k*v<sub>Current</sub> + (1-k)*v 

Вы можете применить ответ от другого вопроса SO .

1 голос
/ 19 мая 2010

Вместо итерации вы можете просто выбрать значение k в зависимости от размера интервала. Например, если длина интервала составляет час - вы, вероятно, захотите, чтобы k равнялось 0.

Было бы легко предварительно вычислить k для различных размеров интервалов, чтобы дать тот же ответ, что итерация. Просто вычислите изменение путем итерации (у вас уже есть код для этого), а затем вычислите значение k, которое даст вам это алгебраически.

Обычный джедай-трюк программиста - вместо дорогих вычислений иметь таблицу значений поиска. (там, теперь мой ответ как-то связан с кодом!)

...