resample

Передискретизируйте универсальные или неоднородные данные к новой фиксированной процентной ставке

Описание

пример

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

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

пример

y = resample(x,p,q,n,beta) указывает, что параметр формы окна Кайзера раньше проектировал фильтр lowpass.

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

пример

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

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

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

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

пример

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

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

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

пример

[___] = 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')

При фильтрации, 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')

Создайте синусоидальный сигнал. Задайте частоту дискретизации, таким образом, что 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

Используйте 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')

Повторите вычисление. Задайте 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')

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

Увеличьте 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')

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

Оставьте порядка фильтра в 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')

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

Уменьшите порядка фильтра назад к 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')

Шире mainlobe генерирует значительные артефакты после передискретизации.

Сгенерируйте 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')

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

freqz(by)

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

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

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

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

impz(bz)

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

Галилео наблюдал движение спутников в течение шести недель, начиная 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')

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

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));

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

[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})')

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

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])

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

ty = 0:q:300-q;

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

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

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

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

     5     1   150

Downsample сигнал назад к его исходному уровню и графику это.

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

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

Входные параметры

свернуть все

Входной сигнал в виде вектора, матрицы или 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 выполняет интерполяцию ближайшего соседа. Длина сглаживающегося КИХ-фильтра пропорциональна n. Большие значения n обеспечьте лучшую точность за счет большего количества времени вычисления.

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

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

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

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

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

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

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

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

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

Метод интерполяции в виде одного из 'linear'pchip, или 'spline':

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

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

  • 'spline' — Интерполяция сплайна с помощью граничных условий и условий отсутствия узла.

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

Примечание

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

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

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

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

свернуть все

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

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

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

Больше о

свернуть все

Сглаживание фильтра Lowpass

Передискретизировать сигнал рациональным факторным pQ, resample вызовы upfirdn, который концептуально выполняет эти шаги:

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

  2. Примените КИХ-фильтр сглаживания к сверхдискретизированному сигналу.

  3. Отбросьте выборки, чтобы проредить отфильтрованный сигнал q.

Идеальный фильтр сглаживания нормировал частоту среза f c = π / макс. (pQ) рад/выборка и усиление p. Аппроксимировать фильтр сглаживания, resample использует метод окна Кайзера.

  • Порядком фильтра является 2 × n × макс. (pQ). Значение по умолчанию 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);
Смотрите Передискретизацию Однородно Выбранных Сигналов для получения дополнительной информации.

Алгоритмы

resample выполняет КИХ-использование проекта firls, нормирует результат с учетом усиления обработки окна, и затем реализует использование изменения уровня upfirdn.

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

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