Как реализовать фильтр LowPass? - PullRequest
6 голосов
/ 25 ноября 2010

Я делаю некоторые математические расчеты как для данных гироскопа, так и для данных акселерометра, и я хотел бы отфильтровать полученные данные с помощью НЧТак может ли кто-нибудь опубликовать общий код для фильтра низких частот?

Ответы [ 3 ]

6 голосов
/ 25 ноября 2010

Фильтр нижних частот БИХ 1-го порядка может иметь вид:

output_value = rate * input_value + (1.0 - rate) * previous_output_value;

, что в значительной степени соответствует примеру Apple AccelerometerGraph. Вы выбираете параметр скорости в зависимости от того, какую частоту (очень сильно колеблется в секунду) вы хотите уменьшить или начать ослаблять, чтобы получить более плавный результирующий вывод, и частоту дискретизации входных данных.

2 голосов
/ 25 ноября 2010

Если пример Apple AccelerometerGraph слишком сложен для понимания, я создал более простой пример акселерометра для своего класса, который вы можете скачать здесь .Это реализует простой фильтр нижних и верхних частот для необработанных значений акселерометра, а затем записывает результаты на экран.

Как описывают hotpaw2 и Goz, для расчета фильтра используется очень простое взвешенное скользящее среднее:

UIAccelerationValue lowPassFilteredXAcceleration = (currentXAcceleration * kLowPassFilteringFactor) + (previousLowPassFilteredXAcceleration * (1.0 - kLowPassFilteringFactor));
2 голосов
/ 25 ноября 2010

Фильтр нижних частот просто сглаживает результаты для удаления высоких частот. Простейший фильтр нижних частот - это блочный фильтр, который выполняется путем усреднения n выборок вместе.

Для усреднения двух сэмплов это так же просто, как сделать:

sample[n] (sample[n] + sample[n + 1]) / 2;
...