exponenta event banner

передискретизировать

Повторная выборка однородных или неуниформных данных на новую фиксированную скорость

Описание

пример

y = resample(x,p,q) выполняет повторную выборку входной последовательности, x, в p/q умножить на исходную частоту выборки. resample применяет фильтр нижних частот сглаживания FIR к x и компенсирует задержку, введенную фильтром. Функция работает вдоль первого размера массива с размером больше 1.

y = resample(x,p,q,n) использует сглаживающий фильтр порядка 2 × n × max (p,q).

пример

y = resample(x,p,q,n,beta) задает параметр формы окна Kaiser, используемого для проектирования фильтра нижних частот.

y = resample(x,p,q,b) фильтры x с использованием коэффициентов фильтра, указанных в b.

пример

[y,b] = resample(x,p,q,___) также возвращает коэффициенты фильтра, примененного к x во время повторной выборки.

пример

[yTT,b] = resample(xTT,p,q,___) производит повторную выборку данных с равномерной выборкой в расписании MATLAB ®xTT в p/q умножает исходную частоту выборки и возвращает расписание yTT. Можно указать дополнительные аргументы n, beta, или b.

y = resample(x,tx) выполняет повторную выборку значений, x, сигнала, дискретизированного в моменты времени, указанные в векторе tx. Функция интерполирует x линейно на вектор равномерно разнесенных моментов с теми же конечными точками и количеством выборок, что и tx. NaNs считаются отсутствующими данными и игнорируются.

y = resample(x,tx,fs) использует полифазный сглаживающий фильтр для повторной выборки сигнала с равномерной частотой дискретизации, указанной в fs.

y = resample(x,tx,fs,p,q) интерполирует входной сигнал на промежуточную однородную сетку с шагом выборки (p/q)/fs. Затем функция фильтрует результат, чтобы увеличить его по p и понизить его на q, что приводит к окончательной частоте выборки fs. Для достижения наилучших результатов убедитесь, что fs × q/p не менее чем в два раза больше, чем самая высокая частотная составляющая x.

пример

y = resample(x,tx,___,method) задает метод интерполяции вместе с любым из аргументов из предыдущих синтаксисов в этой группе. Метод интерполяции может быть 'linear', 'pchip', или 'spline'.

[y,ty] = resample(x,tx,___) возврат в ty моменты, которые соответствуют повторно дискретизированному сигналу.

[y,ty,b] = resample(x,tx,___) возврат в b коэффициенты сглаживающего фильтра.

пример

yTT = resample(xTT) выполняет повторную выборку данных с неравномерной выборкой в xTT и возвращает данные с равномерной выборкой. yTT имеет те же конечные точки и количество выборок, что и xTT.

[yTT,b] = resample(xTT,___) выполняет повторную выборку данных с неравномерной выборкой в xTT а также возвращает коэффициенты сглаживающего фильтра в b. Можно указать те же параметры аргументов, которые доступны для ввода x,tx.

пример

[___] = resample(___,'Dimension',dim) повторная выборка входных данных вдоль размера dim.

Примеры

свернуть все

Повторная выборка простой линейной последовательности при 3/2 исходной частоты 10 Гц. Постройте график исходных и повторно отобранных сигналов на том же рисунке.

fs = 10;
t1 = 0:1/fs:1;
x = t1;
y = resample(x,3,2);
t2 = (0:(length(y)-1))*2/(3*fs);

plot(t1,x,'*',t2,y,'o')
xlabel('Time (s)')
ylabel('Signal')
legend('Original','Resampled', ...
    'Location','NorthWest')

Figure contains an axes. The axes contains 2 objects of type line. These objects represent Original, Resampled.

При фильтрации, resample предполагает, что входная последовательность, x, равно нулю до и после выборки. Большие отклонения от нуля в конечных точках x может привести к непредвиденным значениям для y.

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

x = [1:10 9:-1:1;
    10:-1:1 2:10]';
y = resample(x,3,2);

subplot(2,1,1)
plot(1:19,x(:,1),'*',(0:28)*2/3 + 1,y(:,1),'o')
title('Edge Effects Not Noticeable')
legend('Original','Resampled', ...
    'Location','South')

subplot(2,1,2)
plot(1:19,x(:,2),'*',(0:28)*2/3 + 1,y(:,2),'o')
title('Edge Effects Noticeable')
legend('Original','Resampled', ...
    'Location','North')

Figure contains 2 axes. Axes 1 with title Edge Effects Not Noticeable contains 2 objects of type line. These objects represent Original, Resampled. Axes 2 with title Edge Effects Noticeable contains 2 objects of type line. These objects represent Original, Resampled.

Создайте синусоидальный сигнал. Укажите частоту выборки таким образом, чтобы 16 выборок соответствовали ровно одному периоду сигнала. Нарисуйте основной график сигнала. Наложение графика лестничных шагов для визуализации образца и удержания.

fs = 16;
t = 0:1/fs:1-1/fs;

x = 0.75*sin(2*pi*t);

stem(t,x)
hold on
stairs(t,x)
hold off

Figure contains an axes. The axes contains 2 objects of type stem, stair.

Использовать resample для увеличения частоты сигнала в четыре раза. Используйте настройки по умолчанию. Постройте график результата вместе с исходным сигналом.

ups = 4;
dns = 1;

fu = fs*ups;
tu = 0:1/fu:1-1/fu;

y = resample(x,ups,dns);

stem(tu,y)
hold on
stairs(t,x)
hold off
legend('Resampled','Original')

Figure contains an axes. The axes contains 2 objects of type stem, stair. These objects represent Resampled, Original.

Повторите расчет. Определить n = 1 так, что сглаживающий фильтр имеет порядок 2 × 1 × 4 = 8. Укажите параметр формы β = 0 для окна Кайзера. Выведите фильтр, а также повторно отобранный сигнал.

n = 1;
beta = 0;

[y,b] = resample(x,ups,dns,n,beta);

fo = filtord(b)
fo = 8
stem(tu,y)
hold on
stairs(t,x,'--')
hold off
legend('n = 1, \beta = 0')

Figure contains an axes. The axes contains 2 objects of type stem, stair. This object represents n = 1, \beta = 0.

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

Увеличение n до 5 и оставить β = 0. Убедитесь, что фильтр имеет порядок 40. Постройте график повторно дискретизированного сигнала.

n = 5;

[y,b] = resample(x,ups,dns,n,beta);

fo = filtord(b)
fo = 40
stem(tu,y)
hold on
stairs(t,x,'--')
hold off
legend('n = 5, \beta = 0')

Figure contains an axes. The axes contains 2 objects of type stem, stair. This object represents n = 5, \beta = 0.

Более длинное окно имеет более узкий основной блок и лучше ослабляет эффекты наложения. Он также ослабляет сигнал.

Оставьте порядок фильтра на уровне 2 × 5 × 4 = 40 и увеличьте параметр формы до β = 20.

beta = 20;

y = resample(x,ups,dns,n,beta);

stem(tu,y)
hold on
stairs(t,x,'--')
hold off
legend('n = 5, \beta = 20')

Figure contains an axes. The axes contains 2 objects of type stem, stair. This object represents n = 5, \beta = 20.

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

Уменьшите порядок фильтрации до 2 × 1 × 4 = 8 и оставьте β = 20.

n = 1;

[y,b] = resample(x,ups,dns,n,beta);

stem(tu,y)
hold on
stairs(t,x,'--')
hold off
legend('n = 1, \beta = 20')

Figure contains an axes. The axes contains 2 objects of type stem, stair. This object represents n = 1, \beta = 20.

Более широкий основной блок создает значительные артефакты при повторной выборке.

Генерируйте 60 образцов синусоиды и повторно отбирайте ее при 3/2 исходной скорости. Отображение исходных и повторно отобранных сигналов.

tx = 0:6:360-3;
x = sin(2*pi*tx/120);

ty = 0:4:360-2;
[y,by] = resample(x,3,2);

plot(tx,x,'+-',ty,y,'o:')
legend('original','resampled')

Figure contains an axes. The axes contains 2 objects of type line. These objects represent original, resampled.

Постройте график частотной характеристики фильтра сглаживания.

freqz(by)

Figure contains 2 axes. Axes 1 contains an object of type line. Axes 2 contains an object of type line.

Выполните повторную выборку сигнала на 2/3 от исходной скорости. Отображение исходного сигнала и его повторной дискретизации.

tz = 0:9:360-9;
[z,bz] = resample(x,2,3);

plot(tx,x,'+-',tz,z,'o:')
legend('original','resampled')

Figure contains an axes. The axes contains 2 objects of type line. These objects represent original, resampled.

Постройте график импульсной характеристики нового фильтра нижних частот.

impz(bz)

Figure contains an axes. The axes with title Impulse Response contains an object of type stem.

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

a = randn(10,1);
b = randn(10,1);

t = days(1:10);

xTT = timetable(t',[a b]);

Используйте resample функция для увеличения частоты выборки с одного раза в день до одного раза в час. Постройте график обоих наборов данных.

yTT = resample(xTT,24,1);

subplot(2,1,1)
plot(xTT.Time,xTT.Var1,'-o')
subplot(2,1,2)
plot(yTT.Time,yTT.Var1,'-o')

Figure contains 2 axes. Axes 1 contains 2 objects of type line. Axes 2 contains 2 objects of type line.

Используйте данные, записанные Галилео Галилеем в 1610 году, чтобы определить орбитальный период Каллисто, крайнего из четырёх крупнейших спутников Юпитера.

Галилей наблюдал за движением спутников в течение шести недель, начиная с 15 января. Наблюдения имеют несколько пробелов, потому что Юпитер не был виден в пасмурные ночи. Создать datetime массив времен наблюдения.

t = [0 2 3 7 8 9 10 11 12 17 18 19 20 24 25 26 27 28 29 31 32 33 35 37 ...
    41 42 43 44 45]'+1;

yg = [10.5 11.5 10.5 -5.5 -10.0 -12.0 -11.5 -12.0 -7.5 8.5 12.5 12.5 ...
    10.5 -6.0 -11.5 -12.5 -12.5 -10.5 -6.5 2.0 8.5 10.5 13.5 10.5 -8.5 ...
    -10.5 -10.5 -10.0 -8.0]';

obsv = datetime(1610,1,15+t);

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

fs = 1;

[y,ty] = resample(yg,t,fs,3,1);

Постройте график данных и повторно дискретизированного сигнала.

plot(t,yg,'o',ty,y,'.-')
xlabel('Day')

Figure contains an axes. The axes contains 2 objects of type line.

Повторите процедуру с помощью интерполяции сплайна и отображения дат наблюдения. Выражайте частоту выборки в обратные дни.

fs = 1/86400;

[ys,tys] = resample(yg,obsv,fs,3,1,'spline');

plot(t,yg,'o')
hold on
plot(ys,'.-')
hold off

ax = gca;
ax.XTick = t(1:9:end);
ax.XTickLabel = char(obsv(1:9:end));

Figure contains an axes. The axes contains 2 objects of type line.

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

[pxx,f] = periodogram(ys,[],1024,1,'power');
[pk,i0] = max(pxx);

f0 = f(i0);
T0 = 1/f0
T0 = 16.7869
plot(f,pxx,f0,pk,'o')
xlabel('Frequency (day^{-1})')

Figure contains an axes. The axes contains 2 objects of type line.

Человек записал свой вес в фунтах во время високосного 2012 года. Человек записывал свой вес не каждый день, поэтому данные неоднородны. Загрузите данные и сохраните результаты измерений в расписании MATLAB. Используйте вектор datetime для задания значения RowTimes.

load weight2012.dat

rowTimes = datetime(2012,1,1:366)';
wt = weight2012(:,2);
xTT = timetable(rowTimes,wt);

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

yTT = resample(xTT);

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

plot(xTT.rowTimes,xTT.wt,'-o',yTT.Time,yTT.wt,'-*')
xlim(datetime([2012 08 01;2012 08 31]))
legend('origal','resampled')

Figure contains an axes. The axes contains 2 objects of type line. These objects represent origal, resampled.

Повторная выборка данных с помощью кубической интерполяции.

yTTs = resample(xTT,'pchip');

plot(xTT.rowTimes,xTT.wt,'o',yTTs.Time,yTTs.wt,'-*')
xlim(datetime([2012 08 01;2012 08 31]))

Figure contains an axes. The axes contains 2 objects of type line.

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

fs = 1/86400;
yTTf = resample(xTT,2*fs,'spline');

plot(yTTf.Time,yTTf.wt,'-*')
xlim(datetime([2012 08 01;2012 08 31]))

Figure contains an axes. The axes contains an object of type line.

Генерация синусоидального сигнала с пятиканальной выборкой. Время увеличивается по столбцам, а частота - вниз по строкам. Постройте график сигнала.

p = 3;
q = 2;

tx = 0:p:300-p;

x = cos(2*pi*tx./(1:5)'/100);

plot(tx,x,'.:')
title('Original')
ylim([-1.5 1.5])

Figure contains an axes. The axes with title Original contains 5 objects of type line.

Увеличьте размер синусоиды на 3/2 вдоль ее второго размера. Наложите повторно отобранный сигнал на график.

ty = 0:q:300-q;

y = resample(x,p,q,'Dimension',2);

plot(ty,y,'.:')
title('Upsampled')

Figure contains an axes. The axes with title Upsampled contains 5 objects of type line.

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

y = permute(y,[1 3 2]);
size(y)
ans = 1×3

     5     1   150

Выполните обратную выборку сигнала до его исходной скорости и постройте его график.

z = resample(y,q,p,'Dimension',3);

plot(tx,squeeze(z),'.:')
title('Downsampled')

Figure contains an axes. The axes with title Downsampled contains 5 objects of type line.

Входные аргументы

свернуть все

Входной сигнал, заданный как вектор, матрица или N-D массив. x может содержать NaNs, когда предоставляется информация о времени. NaNs рассматриваются как отсутствующие данные и исключаются из повторной выборки.

Пример: cos(pi/4*(0:159))+randn(1,160) - одноканальный строково-векторный сигнал.

Пример: cos(pi./[4;2]*(0:159))'+randn(160,2) является двухканальным сигналом.

Типы данных: double

Коэффициенты повторной выборки, указанные как положительные целые числа.

Типы данных: double

Номер члена соседа, заданный как положительное целое число. Если n = 0, resample выполняет интерполяцию ближайшего соседа. Длина сглаживающего фильтра FIR пропорциональна n. Большие значения n повышение точности за счет увеличения времени вычислений.

Типы данных: double

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

Типы данных: double

Коэффициенты КИХ-фильтра, заданные как вектор. По умолчанию resample проектирует фильтр с помощью firls с окном Кайзера. При компенсации задержки, resample принимает b имеет нечетную длину и линейную фазу. Дополнительные сведения см. в разделе Сглаживание фильтра нижних частот.

Типы данных: double

Расписание ввода, содержащее не менее двух строк, указанных как timetable. Каждая переменная в xTT рассматривается как независимый сигнал. Если переменная в расписании является массивом N-D, то resample работает вдоль первого размера.

Примечание

  • RowTimes должен быть либо вектором длительности, либо datetime с уникальными и конечными значениями. Нефиксированные значения времени обрабатываются как отсутствующие данные и игнорируются.

  • Если не отсортирован, resample виды RowTimes в порядке возрастания.

Посмотрите timetable для получения дополнительной информации.

Типы данных: double

Моменты времени, указанные как неотрицательный реальный вектор или datetime массив. tx должны монотонно увеличиваться, но не должны равномерно распределяться. tx может содержать NaNs или NaTs. Эти значения рассматриваются как отсутствующие данные и исключаются из повторной выборки. tx действителен только для ввода x.

Типы данных: double | datetime

Частота выборки, заданная как положительный скаляр. Частота выборки - это количество выборок в единицу времени. Если единица времени - секунды, то частота дискретизации в Гц.

Типы данных: double

Метод интерполяции, указанный как один из 'linear', 'pchip', или 'spline':

  • 'linear' - Линейная интерполяция.

  • 'pchip' - Фасонно-сохраняющая кусочно-кубическая интерполяция.

  • 'spline' - интерполяция сплайна с использованием концевых условий без узла.

См. раздел interp1 для получения дополнительной информации.

Примечание

Если x медленно изменяется, рассмотрите возможность использования interp1 с 'pchip' способ интерполяции.

Размерность для работы, заданная как целочисленный скаляр. Если dim не указан, resample работает вдоль первого размера массива размером больше 1. Если входные данные являются расписанием, то dim должно быть 1.

Типы данных: single | double

Выходные аргументы

свернуть все

Повторно дискретизированный сигнал, возвращаемый в виде вектора, матрицы или N-D матрицы. Если x имеет длину N вдоль размера dim и вы указываете p и q, то y имеет длину ⌈ N ×p/q вдоль dim.

Коэффициенты КИХ-фильтра, возвращаемые как вектор.

Выходные моменты, возвращаемые как неотрицательный действительный вектор. ty применяется только для ввода x.

Пересмотренное расписание, возвращенное в виде timetable.

Подробнее

свернуть все

Сглаживание фильтра нижних частот

Повторная выборка сигнала рациональным коэффициентом p/q, resample требования upfirdn, который концептуально выполняет следующие шаги:

  1. Вставьте нули, чтобы увеличить значение сигнала на p.

  2. Примените фильтр сглаживания FIR к сигналу с повышенной дискретизацией.

  3. Отбрасывать выборки для понижающей дискретизации отфильтрованного сигнала на q.

Идеальный сглаживающий фильтр имеет нормализованную частоту отсечки fc = λ/max (p,q) рад/выборка и усиление p. Чтобы приблизить фильтр сглаживания, resample использует метод окна Kaiser.

  • Порядок фильтров - 2 × n × max (p,q). Значение по умолчанию n составляет 50.

  • Окно Кайзера имеет параметр формы beta это управляет компромиссом между шириной перехода и затуханием полосы останова. Значение по умолчанию beta равно 5.

  • Коэффициенты фильтра нормализуют для учета коэффициента усиления обработки окна.

Например, создайте сглаживающий фильтр для повторной выборки сигнала в 3/2 раза больше исходной частоты дискретизации:

p = 3;
q = 2;
maxpq = max(p,q);

fc = 1/maxpq;
n = 50;
order = 2*n*maxpq;
beta = 5;

b = fir1(order,fc,kaiser(order+1,beta));
b = p*b/sum(b);
Дополнительные сведения см. в разделе Повторная выборка сигналов с равномерной выборкой.

Совет

  • Используйте isregular функция для определения того, является ли расписание единообразным.

Алгоритмы

resample выполняет проектирование FIR с использованием firls, нормализует результат для учета коэффициента усиления обработки окна, а затем реализует изменение скорости с помощью upfirdn.

Расширенные возможности

.
Представлен до R2006a