exponenta event banner

Повторная выборка неравномерно дискретизированных сигналов

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

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

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

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

rng default
nominalFs = 48000;
f = 500;
Tx = 0:1/nominalFs:0.01;
irregTx = sort(Tx + 1e-4*rand(size(Tx)));
x = sin(2*pi*f*irregTx);
plot(irregTx,x,'.')

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

Для повторной выборки неравномерно дискретизированного сигнала можно вызвать resample с вводом вектора времени.

Следующий пример преобразует наш исходный сигнал в равномерную частоту 44,1 кГц.

desiredFs = 44100;
[y, Ty] = resample(x,irregTx,desiredFs);
plot(irregTx,x,'.-',Ty,y,'o-')
legend('Original','Resampled')
ylim([-1.2 1.2])

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

Вы можете видеть, что наш повторно отобранный сигнал имеет ту же форму и размер, что и исходный сигнал.

Выбор метода интерполяции

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

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

irregTx(105:130) = [];
x = sin(2*pi*f*irregTx);
[y, Ty] = resample(x,irregTx,desiredFs);

plot(irregTx,x,'. ')
hold on
plot(Ty,y,'.-')
hold off
legend('Original','Resampled')
ylim([-1.2 1.2])

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

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

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

Для малошумящих низкополосных сигналов сплайны могут быть очень эффективными при использовании для восстановления исходного сигнала. Чтобы использовать кубический сплайн во время повторной выборки, введите метод интерполяции «сплайн»:

[y, Ty] = resample(x,irregTx,desiredFs,'spline');

plot(irregTx,x,'. ')
hold on
plot(Ty,y,'.-')
hold off
legend('Original','Resampled using ''spline''')
ylim([-1.2 1.2])

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

Управление сеткой интерполяции

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

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

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

w = 2*pi*3;
d = .1002;
z = sin(d);
a = cos(d); 

t = [0:0.05:2 3:8];

x = 1 - exp(-z*w*t).*cos(w*a*t-d)/a;
plot(t,x,'.-')

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

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

Теперь выполните повторную выборку сигнала на частоте 100 Гц, используя настройки по умолчанию:

Fs = 100;
[y, Ty] = resample(x,t,Fs);
plot(t,x,'. ')
hold on
plot(Ty,y)
hold off
legend('Original','Resampled (default settings)')

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

Огибающая колебаний в начале сигнала ослабляется и колеблется медленнее, чем исходный сигнал.

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

avgFs = (numel(t)-1) /(t(end)-t(1))
avgFs = 5.7500

Частота выборки сетки должна быть выше, чем вдвое большая частота, которую вы хотите измерить. Частота дискретизации сетки, 5,75 выборки в секунду, ниже частоты дискретизации Найквиста, 6 Гц, частоты вызывного сигнала.

Чтобы сетка имела более высокую частоту выборки, можно указать целочисленные параметры, p и q. resample корректирует частоту дискретизации сетки до Q * Fs/P, интерполирует сигнал и затем применяет свой внутренний преобразователь частоты дискретизации (повышающая дискретизация на P и понижающая дискретизация на Q) для восстановления желаемой частоты дискретизации, Fs. Использоватьrat выбрать p и q.

Так как звон колебания составляет 3 Гц, укажите сетку с частотой выборки 7 Гц, что немного выше скорости Найквиста. Запас 1 Гц учитывает дополнительное частотное содержание из-за затухающей экспоненциальной огибающей.

Fgrid = 7;
[p,q] = rat(Fs/Fgrid)
p = 100
q = 7
[y, Ty] = resample(x,t,Fs,p,q);
plot(t,x,'.')
hold on
plot(Ty,y)
hold off
legend('Original','Resampled (custom P and Q)')

Figure contains an axes. The axes contains 2 objects of type line. These objects represent Original, Resampled (custom P and Q).

Задание фильтра сглаживания

В следующем примере можно просмотреть выходные данные оцифровщика, измеряющего настройку дроссельной заслонки двигателя самолета. Настройка дросселя дискретизируется неравномерно при номинальной частоте 100 Гц. Мы попытаемся выполнить повторную выборку этого сигнала с равномерной частотой 10 Гц.

Вот образцы нашего исходного сигнала.

load engineRPM
plot(t,x,'.')
xlabel('Time (s)')
ylabel('RPM')

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

Наш сигнал квантован. Теперь увеличьте масштаб восходящей области в интервале времени от 20 секунд до 23 секунд:

plot(t,x,'.')
xlim([20 23])

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

Сигнал медленно изменяется в пределах этой области. Это позволяет удалить часть шума квантования с помощью фильтра сглаживания в блоке повторной дискретизации.

desiredFs = 10;
[y,ty] = resample(x,t,desiredFs);

plot(t,x,'.')
hold on
plot(ty,y,'.-')
hold off
xlabel('Time')
ylabel('RPM')
legend('Original','Resampled')
xlim([20 23])

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

Это работает достаточно хорошо. Однако повторно дискретизированный сигнал может быть дополнительно сглажен посредством обеспечения resample фильтр с низкой частотой отсечки.

Во-первых, установите интервал сетки около нашей номинальной частоты выборки 100 Гц.

nominalFs = 100;

Затем определите разумное p и q для получения требуемой скорости. Так как номинальная частота 100 Гц, а наша желаемая частота 10 Гц, вам нужно прореживать на 10. Это эквивалентно установке p к 1 и установка q до 10.

p = 1;
q = 10;

Вы можете поставлять resample с собственным фильтром. Для правильного временного выравнивания фильтр должен иметь нечетную длину. Длина фильтра должна быть в несколько раз больше, чем p или q (в зависимости от того, что больше). Установить частоту отсечки 1/ q требуемое отсечение и затем умножение результирующих коэффициентов на p.

% ensure an odd length filter
n = 10*q+1;

% use .25 of Nyquist range of desired sample rate
cutoffRatio = .25;

% construct lowpass filter 
lpFilt = p * fir1(n, cutoffRatio * 1/q);

% resample and plot the response
[y,ty] = resample(x,t,desiredFs,p,q,lpFilt);

plot(t,x,'.')
hold on
plot(ty,y)
hold off
xlabel('time')
ylabel('RPM')
legend('Original','Resampled (custom filter)','Location','best')
xlim([20 23])

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

Удаление эффектов конечных точек

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

plot(t,x,'.',ty,y)
xlabel('time')
ylabel('RPM')
legend('original','resampled (custom filter)','Location','best')

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

Эти артефакты возникают, потому что resample предполагает, что сигнал равен нулю вне границ сигнала. Чтобы уменьшить эффект этих разрывов, вычтите линию между конечными точками сигнала, выполните повторную выборку, а затем добавьте линию обратно к исходной функции. Это можно сделать, рассчитав уклон и смещение линии между первым и последним образцом и используя polyval для построения линии для вычитания.

% compute slope and offset (y = a1 x + a2)
a(1) = (x(end)-x(1)) / (t(end)-t(1));
a(2) = x(1);

% detrend the signal
xdetrend = x - polyval(a,t);
plot(t,xdetrend)

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

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

[ydetrend,ty] = resample(xdetrend,t,desiredFs,p,q,lpFilt);

y = ydetrend + polyval(a,ty);

plot(t,x,'.',ty,y)
xlabel('Time')
ylabel('RPM')
legend('Original','Resampled (detrended, custom filter)','Location','best')

Figure contains an axes. The axes contains 2 objects of type line. These objects represent Original, Resampled (detrended, custom filter).

Резюме

В этом примере показано, как использовать resample преобразование равномерно и неравномерно дискретизированных сигналов в фиксированную скорость.

Дальнейшее чтение

Дополнительные сведения о восстановлении неравномерно разнесенных образцов с помощью пользовательских сплайнов см. в документации по Toolbox™ фитинга кривой.

См. также