Как сгладить дискретные точки данных, чтобы они выглядели непрерывными? - PullRequest
0 голосов
/ 30 июня 2019

У меня есть два ArrayList с данными double. Я уже использую сглаживание скользящей средней. Данные собираются каждые 200-500 мс. Вот как выглядит типичный график (использующий GraphView в Android):

Sample Graph

Так как скорость сбора данных ограничена аппаратным обеспечением, которое я использую, это то, как результат выглядит неровно. Очень легко увидеть отдельные точки.

Как сделать так, чтобы функция выглядела гладкой и непрерывной (математически, изменяя ArrayLists или изменяя некоторые настройки в GraphView?

Подходит ли многочлен, или я должен использовать комбинацию фильтрации и скользящего среднего?

Я ценю это!

1 Ответ

0 голосов
/ 19 июля 2019

Это зависит от того, как вы хотите сгладить функции. Ваша проблема в том, что у вас недостаточно точек данных, чтобы они выглядели гладкими, поскольку graphview рисует прямую линию между двумя точками данных. Я не думаю, что есть способ нарисовать кривую между двумя точками в GraphView без использования пользовательских представлений. Пользовательский вид - это еще один зверь, поэтому я не думаю, что вы хотите сделать это. Теперь вы можете решить эту проблему двумя способами.

Во-первых, если вы заранее знаете, что ваши данные не содержат большого шума, тогда вы можете выполнить полиномиальную интерполяцию всех точек в вашем массиве. Исходя из этого, вы получите функцию, которую вы можете использовать для создания нового массива и вычисления значений y с меньшим шагом x, чем ваши данные. Таким образом, вы можете смоделировать кривую. Но учтите, что интерполяция обходится дорого, особенно если вы переходите к полиномам более высокого порядка.

Теперь, если вы знаете, что ваши данные зашумлены, интерполяция будет интерполировать (подгонять) все шумы, а это не то, что вам нужно. Затем вы хотите использовать метод наименьших квадратов. Вы можете перейти на любой порядок полинома. Используйте тот, который имеет больше всего смысла. Наименьшие квадраты будут менее трудоемкими для вычисления, чем интерполяция, и у них есть преимущество в том, что если ваши шумы не имеют смещения (то есть сумма шумов составляет до 0), это может дать вам лучшее приближение к реальным значениям. Также обратите внимание, что в методах наименьших квадратов ваши вычисления значительно упрощаются, если ваши значения x в ваших данных равномерно отделены друг от друга. В вашем случае это может быть правдой, поскольку вы упоминаете, что собираете данные каждые 200-500 мс. Если вы можете опросить с фиксированной ставкой, то сделайте это. В Интернете существуют различные уравнения, которые обеспечивают простые вычисления наименьших квадратов при фиксированных интервалах.

...