передискретизация

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

Синтаксис

y = resample(x,p,q)
y = resample(x,p,q,n)
y = resample(x,p,q,n,beta)
y = resample(x,p,q,b)
[y,b] = resample(x,p,q,___)
y = resample(x,tx)
y = resample(x,tx,fs)
y = resample(x,tx,fs,p,q)
y = resample(x,tx,___,method)
[y,ty] = resample(x,tx,___)
[y,ty,b] = resample(x,tx,___)

Описание

пример

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

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

пример

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

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

пример

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

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

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'.

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

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

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

Примеры

свернуть все

Передискретизируйте простую линейную последовательность в 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 для окна Kaiser. Выведите фильтр, а также передискретизируемый сигнал.

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

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

свернуть все

Входной сигнал, заданный как вектор или матрица. Если x является матрицей, то ее столбцы обработаны как независимые каналы. x может содержать NaN s. NaN s обработан как недостающие данные и исключен из передискретизации.

Пример: 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

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

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

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

Пример: fir1(4,0.5) задает 4-й порядок lowpass фильтр с нормированной частотой среза 0.5π рад/выборка.

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

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

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

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

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

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

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

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

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

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

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

свернуть все

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

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

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

Алгоритмы

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

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

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