Свернуть / усреднить данные в Matlab по отношению к другому набору данных

У меня есть два набора данных, но у них разные размеры. Каждый набор содержит собственно измерения (MeasA и MeasB, оба двойные) и момент времени (TimeA и TimeB, datenum или julian date), когда произошло измерение.

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

Изменить: небольшой пример того, как будут выглядеть данные:

MeasA = [2.7694 -1.3499 3.0349 0.7254 -0.0631];
TimeA = [0.2 0.4 0.7 0.8 1.3];

MeasB = [0.7147 -0.2050 -0.1241 1.4897 1.4090 1.4172 0.6715 -1.2075 0.7172 1.6302];
TimeB = [0.1 0.2 0.3 0.6 0.65 0.68 0.73 0.85 1.2 1.4];

И теперь я хочу свернуть MeasB и TimeB, чтобы получить среднее значение измерения, близкое к временным точкам в TimeA, поэтому, например, TimeB должен выглядеть так:

TimeB = [mean([0.1 0.2]) mean([0.3 0.6]) mean([0.65 0.68 0.73]) mean([0.85]) mean([1.2 1.4])]
TimeB = [0.15 0.4 0.69 0.85 1.3]

И затем сверните MeasB тоже вот так:

MeasB = [mean([0.7147 -0.2050]) mean([-0.1241 1.4897]) mean([1.4090 1.4172 0.6715]) mean([-1.2075]) mean([0.7172 1.6302])];
MeasB = [0.2549 0.6828 1.1659 -1.2075 1.1737]

person user3199134    schedule 10.12.2014    source источник


Ответы (1)


Функция interp1 - ваш друг.

Вы можете получить новый набор измерений для вашего набора B одновременно с набором A, используя:

newMeasB = interp1( TimeB , MeasB , TimeA ) ;

Первые 2 параметра - это ваше исходное время и измерения набора, который вы хотите повторно интерполировать, последний параметр - это новая ось x (время в вашем примере), по которой вы хотите вычислить интерполированные значения.

Таким образом, у вас не будет разных наборов времени между вашими двумя наборами измерений, вы можете сравнивать их по пунктам.

Обратитесь к документации interp1, чтобы получить дополнительные объяснения и варианты интерполяции. или любая возможная экстраполяция.


edit: В документе Matlab раньше была отличная иллюстрация функции, но я не могу найти ее в Интернете, поэтому здесь:  Matlab Interp1

Таким образом, с методом linear, если значение интерполировано точно между двумя точками, функция вернет точное среднее значение. Если интерполяция выполняется ближе к одной точке, чем к другой, возвращаемое значение будет пропорционально ближе к значению ближайшей точки.

NaN может появиться по бокам (начало или конец возвращенного вектора), если TimeA не полностью перекрывается timeB. Функция не может «интерполировать», потому что нет точки привязки. Однако различные параметры interp1 позволяют «экстраполировать» за пределы входного диапазона или назначать другое значение по умолчанию вместо NaN.

person Hoki    schedule 10.12.2014
comment
Спасибо! Кажется, это ближе всего к тому, что мне нужно. Если я хочу, чтобы он вычислял наиболее близкое к среднему, будет ли это линейный метод? - person user3199134; 10.12.2014
comment
И еще один вопрос, эта функция дает мне несколько NaN, есть ли способ предотвратить это? - person user3199134; 10.12.2014
comment
@ user3199134, я отредактировал пост, чтобы ответить на ваши комментарии - person Hoki; 10.12.2014
comment
Большое спасибо за объяснение, теперь я понимаю, и он отлично работает! - person user3199134; 10.12.2014