Восстановление отсутствующих данных

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

Введение

С появлением дешевого оборудования для сбора данных вы часто имеете доступ к сигналам, которые быстро дискретизируются с регулярными интервалами. Это позволяет вам получить точное приближение к базовому сигналу. Но что происходит, когда данные, которые вы измеряете, грубо отбираются или иным образом отсутствуют значительные фрагменты? Как вы выводите значения сигналов в точках между выборками, которые вы знаете?

Линейная интерполяция

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

В этом примере синусоида дискретизируется как с мелким, так и с грубым разрешением. При построении графика тонко выбранная синусоида очень сильно напоминает то, как будет выглядеть истинная непрерывная синусоида. Таким образом, можно использовать его как модель «истинного сигнала». На графике ниже выборки грубо дискретизированного сигнала показаны как круги, соединенные прямыми линиями.

tTrueSignal = 0:0.01:20;
xTrueSignal = sin(2*pi*2*tTrueSignal/7);

tSampled = 0:20;
xSampled = sin(2*pi*2*tSampled/7);

plot(tTrueSignal,xTrueSignal,'-', ...
    tSampled,xSampled,'o-')
legend('true signal','samples')

Figure contains an axes. The axes contains 2 objects of type line. These objects represent true signal, samples.

Легко восстановить промежуточные выборки так же, как plot выполняет интерполяцию. Это может быть достигнуто с методом Linear interp1 функция.

tResampled = 0:0.1:20;
xLinear = interp1(tSampled,xSampled,tResampled,'linear');
plot(tTrueSignal,xTrueSignal,'-', ...
     tSampled, xSampled, 'o-', ...
     tResampled,xLinear,'.-')
legend('true signal','samples','interp1 (linear)')

Figure contains an axes. The axes contains 3 objects of type line. These objects represent true signal, samples, interp1 (linear).

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

Сплайн интерполяция

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

xSpline = interp1(tSampled,xSampled,tResampled,'spline');
plot(tTrueSignal,xTrueSignal,'-', ...
     tSampled, xSampled,'o', ...
     tResampled,xLinear,'.-', ...
     tResampled,xSpline,'.-')
legend('true signal','samples','interp1 (linear)','interp1 (spline)')

Figure contains an axes. The axes contains 4 objects of type line. These objects represent true signal, samples, interp1 (linear), interp1 (spline).

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

Повторная дискретизация с помощью антиалиазирующих фильтров

The resample функция в Signal Processing Toolbox предоставляет другой метод для заполнения недостающих данных. resample может восстановить синусоидальные компоненты низкой частоты с очень низким искажением.

xResample = resample(xSampled, 10, 1);
tResample = 0.1*((1:numel(xResample))-1);

plot(tTrueSignal,xTrueSignal,'-', ...
     tResampled,xSpline,'.', ...
     tResample, xResample,'.')
legend('true signal','interp1 (spline)','resample')

Figure contains an axes. The axes contains 3 objects of type line. These objects represent true signal, interp1 (spline), resample.

Как и другие методы, resample имеет некоторые трудности с восстановлением конечных точек. С другой стороны, центральный фрагмент восстановленного сигнала очень хорошо согласуется с истинным сигналом.

xlim([6 10])

Figure contains an axes. The axes contains 3 objects of type line. These objects represent true signal, interp1 (spline), resample.

Повторная дискретизация с отсутствующими выборками

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

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

tTrueSignal = 0:.1:20;
xTrueSignal = sin(2*pi*2*tTrueSignal/15);

Tx = 0:20;

Tmissing = Tx(10);
Tx(10) = [];

x = sin(2*pi*2*Tx/15);
Xmissing = sin(2*pi*2*Tmissing/15);

[y, Ty] = resample(x,Tx,10,'spline');

plot(tTrueSignal, xTrueSignal, '-', ...
     Tmissing,Xmissing,'x ', ...
     Tx,x,'o ', ...
     Ty,y,'. ')
legend('true signal','missing sample','remaining samples','resample with ''spline''')
ylim([-1.2 1.2])
xlim([6 14])

Figure contains an axes. The axes contains 4 objects of type line. These objects represent true signal, missing sample, remaining samples, resample with 'spline'.

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

Однако resample плохо работает, когда есть большая погрешность в сигнале. Например, рассмотрим демпфированную синусоиду, средний фрагмент которой отсутствует:

tTrueSignal = (0:199)/199;
xTrueSignal = exp(-0.5*tTrueSignal).*sin(2*pi*5*tTrueSignal);

tMissing = tTrueSignal;
xMissing = xTrueSignal;
tMissing(50:140) = [];
xMissing(50:140) = [];

[y,Ty] = resample(xMissing, tMissing, 200, 'spline');

plot(tTrueSignal,xTrueSignal,'-', ...
     tMissing,xMissing,'o',...
     Ty,y,'.')
legend('true signal','samples','resample with ''spline''')

Figure contains an axes. The axes contains 3 objects of type line. These objects represent true signal, samples, resample with 'spline'.

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

Восстановление больших погрешностей

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

The fillgaps функция может заменить отсутствующие выборки (заданные NaN) в сигнале с равномерной дискретизацией путем подгонки авторегрессивной модели к выборкам, окружающей зазор, и экстраполяции в зазор с обоих направлений.

tTrueSignal = (0:199)/199;
xTrueSignal = exp(-.5*tTrueSignal).*sin(2*pi*5*tTrueSignal);
gapSignal = xTrueSignal;
gapSignal(50:140) = NaN;
y = fillgaps(gapSignal);

plot(tTrueSignal,xTrueSignal,'-', ...
     tTrueSignal,gapSignal,'o', ...
     tTrueSignal,y,'.')

legend('true signal','samples','reconstructed signal')

Figure contains an axes. The axes contains 3 objects of type line. These objects represent true signal, samples, reconstructed signal.

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

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

[y,fs] = audioread('guitartune.wav');
x = y(1:3500);
x(2000:2600) = NaN;
y2 = fillgaps(x);
plot(1:3500, y(1:3500), '-', ...
     1:3500, x, '.', ...
     1:3500, y2, '-')
legend('original signal','samples','reconstructed signal',...
       'Location','best')

Figure contains an axes. The axes contains 3 objects of type line. These objects represent original signal, samples, reconstructed signal.

Восстановление погрешностей с локализованной оценкой

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

x = y(350001:370000);
x(6000:6950) = NaN;
y2 = fillgaps(x);
y3 = fillgaps(x,1500);
plot(1:20000, y(350001:370000), '-', ...
     1:20000, x, '.', ...
     1:20000, y2, '-', ...
     1:20000, y3, '-')
xlim([2200 10200])
legend('original signal','samples','fillgaps (all)','fillgaps (localized)',...
       'Location','best')

Figure contains an axes. The axes contains 4 objects of type line. These objects represent original signal, samples, fillgaps (all), fillgaps (localized).

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

Сводные данные

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

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

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

Для получения дополнительной информации о равномерной и неоднородной повторной дискретизации см.

См. также

| |