2008-10-15 2 views
9

Я читаю данные с устройства, которое измеряет расстояние. Моя частота выборки высока, поэтому я могу измерять большие изменения на расстоянии (то есть скорость), но это означает, что при низкой скорости устройство выполняет ряд измерений, которые идентичны (из-за гранулярности устройства). Это приводит к «ступенчатой» кривой.Как «сгладить» данные и рассчитать градиент линии?

Что мне нужно сделать, это сгладить кривую, чтобы рассчитать скорость. После этого мне нужно вычислить ускорение.

Как лучше всего это сделать?

(. Частота дискретизации до 1000 Гц, скорость расчета 10Гц будет нормально с помощью C# в VS2005)

ответ

25

Запись в wikipedia из moogs является хорошей отправной точкой для сглаживания данных. Но это не поможет вам принять решение.

Все зависит от ваших данных и необходимой скорости обработки.

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

Savitzky-Golay Быстрый алгоритм. Так же быстро, как скользящее среднее. Это сохранит высоту пиков. Несколько сложнее реализовать. И вам нужны правильные коэффициенты. Я бы выбрал этот.

Фильтры Kalman Если вы знаете распределение, это может дать вам хорошие результаты (он используется в системах GPS-навигации). Возможно, несколько сложнее реализовать. Я упоминаю об этом, потому что я использовал их в прошлом. Но они, вероятно, не являются хорошим выбором для стартера в таких вещах.

Вышеуказанное уменьшит шум вашего сигнала.

Далее вам нужно определить начальную и конечную точку «ускорения». Вы можете сделать это, создав Derivative исходного сигнала. Точка (ы), где производная пересекает ось Y (нуль), вероятно, являются пиками в вашем сигнале и могут указывать начало и конец ускорения.

Затем вы можете создать производную второй степени, чтобы получить минимальное и максимальное ускорение.

9

Вам нужно сглаживающий фильтр, проще будет «скользящая средняя»: просто вычислить среднее значение из последние n точек.

Вопрос здесь, как определить n, можете ли вы рассказать нам больше о вашем приложении?

(Есть и другие, более сложные фильтры. Они отличаются от того, как они сохраняют входные данные. Хороший список в Wikipedia)

Edit !: Для 10Гц, в среднем за последние 100 значений.

+0

исправлен. благодаря! – moogs 2008-10-15 09:58:14

+0

Не могли бы вы объяснить, почему использовать 100 значений для 10 Гц? Благодарю. – 2008-10-15 10:16:53

+0

@Guido - из моей интерпретации того, что он сказал, он имеет 1000 значений в секунду, но на самом деле нужно получать данные 10 раз в секунду. Таким образом, простой способ - просто обработать 100 значений как один (получить среднее значение). – moogs 2008-10-15 10:28:44

0

В дополнение к превосходному ответу GvSs выше вы также можете рассмотреть возможность сглаживания/уменьшения степпинга ваших усредненных результатов с использованием некоторой общей кривой, такой как кубические или квадратичные сплайны.

3

Скользящие средние обычно ужасные - но хорошо работают для белого шума. Обе скользящие средние & Savitzky-Golay оба сводятся к корреляции - и поэтому очень быстрые и могут быть реализованы в реальном времени. Если вам нужна информация более высокого порядка, например, первая и вторая производные - SG - хороший правильный выбор. Магия SG заключается в постоянных коэффициентах корреляции, необходимых для фильтра - как только вы определили длину и степень полинома, чтобы они соответствовали локально, коэффициенты нужно найти только один раз. Вы можете вычислить их с помощью R (sgolay) или Matlab.

Вы также можете оценить первую производную шумового сигнала с помощью полиномов наилучшего соответствия Савицкого-Голея - они иногда называются производными Савицкого-Голея и обычно дают хорошую оценку первой производной.

Калманская фильтрация может быть очень эффективной, но она тяжелее вычислительно - трудно выполнить короткую свертку для скорости!

Пол
CenterSpace Software

Смежные вопросы