Повторная выборка из двух наборов данных разной длины в MATLAB - PullRequest
6 голосов
/ 15 февраля 2011

У меня есть два вектора: датчик A длиной 927 и датчик B длиной 1250. Я хотел бы сделать их одинаковой длины.Функция resample () в MATLAB очень шумная по краям, и мне нужна хотя бы достаточно хорошая точность во всем.

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

Мне было интересно, смогу ли я сделать что-то вроде этого:

  1. Мне нужно 333 новых семпла в более коротком векторе.Поэтому для каждых 3 значений я вставляю среднее значение (среднюю точку) двух последовательных значений между ними.=> 309 образцов вставлено
  2. Для остальных я вставляю снова для каждых 38 образцов (927 / (333-309))

Имеет ли это смысл?Я все еще не смогу получить точную интерполяцию.Есть ли другая функция, которую я мог бы использовать?(кроме interp(), потому что это требует интегральной частоты передискретизации?)

Ответы [ 3 ]

5 голосов
/ 15 февраля 2011

С точки зрения обработки сигнала, вы НЕ должны просто вставлять выборку каждые 3 значения. Это было бы неравномерным растяжением и испортило бы ваш сигнал. Функция resample - это то, что вам нужно. Попробуйте изменить параметры для n и / или бета. Возможно, вам придется дополнить ваш сигнал, как описано здесь , чтобы уменьшить эффекты края.

0 голосов
/ 16 февраля 2011

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

0 голосов
/ 15 февраля 2011

Повторная дискретизация сигнала с ограниченной полосой пропускания идентична интерполяции с использованием бесконечного ядра интерполяции Sinc и довольно близка к оконной интерполяции Sinc с хорошо выбранным окном. См. веб-сайт Stanford CCRMA для получения подробной информации.

...