Минимизация ошибки интерполяции между двумя наборами данных

В верхней части диаграмм ниже мы можем видеть некоторое значение (ось Y), изменяющееся во времени (ось X).

Когда это происходит, мы делаем выборку значения в разное и непредсказуемое время, а также чередуем выборку между двумя наборами данных, обозначенными красным и синим цветом.

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

диаграммы, показывающие ошибку интерполяции

Первоначально я использовал линейную интерполяцию для получения значения, затем я попытался использовать интерполяцию Катмулла-Рома. Первый приводит к тому, что значения сближаются, а затем расходятся между каждой точкой данных; последнее приводит к значениям, которые остаются близкими, но где средняя ошибка больше.

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


person davetapley    schedule 29.11.2010    source источник
comment
Стоит отметить, что я готов пожертвовать точностью ради последовательности. И линейная интерполяция, и интерполяция Катмулла-Рома гарантируют, что они вернут точное выбранное значение, если я запрошу значение времени, которое случайно оказалось точкой выборки; Я не требую этой гарантии.   -  person davetapley    schedule 29.11.2010


Ответы (5)


Попробуйте B-сплайны: Catmull-Rom интерполирует (проходит через точки данных), B- сплайн выполняет сглаживание.
Например, для равномерно распределенных данных (не в вашем случае).

Bspline(t) = (data(t-1) + 4*data(t) + data(t+1)) / 6

Конечно, интерполированные красные/синие кривые зависят от расстояния между красными/синими точками данных, поэтому они не могут идеально совпадать.

person denis    schedule 30.11.2010

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

Тем не менее, если у вас есть предварительные знания об основном процессе, вы можете выбрать один из нескольких методов интерполяции, чтобы минимизировать ошибки. Например, если вы измеряете силу лобового сопротивления как функцию скорости крыла, вы знаете, что зависимость является квадратной (a*V^2). Затем вы можете выбрать полиномиальную подгонку 2-го порядка и получить довольно хорошее совпадение интерполяций двух рядов.

person ysap    schedule 29.11.2010
comment
Благодаря ysap значения на самом деле будут компонентами вектора положения, поэтому это непрерывная функция. Таким образом, Catmull-Rom на самом деле является очень хорошим методом интерполяции, за исключением того, что он создает описанную ошибку между двумя наборами данных. - person davetapley; 30.11.2010

Я хотел бы процитировать Введение в сплайны Catmull-Rom, чтобы предложить не использовать Catmull- Rom для этой задачи интерполяции.

Одной из особенностей сплайна Катмулла-Рома является то, что указанная кривая будет проходить через все контрольные точки — это верно не для всех типов сплайнов.

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

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

person zellus    schedule 29.11.2010
comment
Знаете ли вы какие-либо типы сплайнов, которые не гарантируют, что они проходят через все контрольные точки? Также спасибо за ссылку на слайды, я должен отметить, что оба набора не обязательно будут взяты из одного и того же набора данных (и поэтому мы не можем их сравнивать), просто полезно думать, что они одинаковы, чтобы продемонстрировать проблему. - person davetapley; 30.11.2010

Я согласен с ysap, что на этот вопрос нельзя ответить, как вы могли ожидать. Могут быть лучшие методы интерполяции, в зависимости от динамики вашей модели — как и в случае с ysap, я рекомендую методы, которые используют базовую динамику, если она известна.

Что касается красных/синих образцов, я думаю, что вы сделали хорошее наблюдение о выборочных и интерполированных наборах данных, и я бы поставил под сомнение ваше первоначальное ожидание, что:

При вычислении значения в любое время мы ожидаем, что и красный, и синий наборы данных вернут одинаковые значения.

Я не ожидаю этого. Если вы предполагаете, что не можете идеально интерполировать — и особенно если ошибка интерполяции велика по сравнению с ошибками в выборках — тогда вы наверняка получите непрерывную функцию ошибок, которая показывает самые большие ошибки (время) из ваших точек выборки. Следовательно, два набора данных с разными точками выборки должны демонстрировать поведение, которое вы видите, потому что точки, которые находятся далеко (по времени) от красных точек выборки, могут быть близки (по времени) к синим точкам выборки, и наоборот - если они расположены в шахматном порядке, как ваши точки, это наверняка правда. Таким образом, я ожидаю, что вы покажете, что:

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

(Если у вас нет информации о лежащей в основе динамике (за исключением частотного содержания), то точки зрения Джакомо на выборку являются ключевыми — однако вам не нужно интерполировать, если вы смотрите на информацию ниже Найквиста.)

person sage    schedule 30.12.2010

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

Поэтому вам нужно знать максимальную частоту B исходной функции, а затем собирать выборки с частотой не менее 2B. Если ваша функция имеет очень высокие частоты, и вы не можете сэмплировать так быстро, вы должны хотя бы попытаться отфильтровать их перед сэмплированием.

person Giacomo Verticale    schedule 02.12.2010