fillgaps
Заполнение разрывов с помощью моделирования авторегрессии.
| Библиотека |
|
Синтаксис
Аргументы
Входные аргументы
#
x —
входной сигнал
вектор | матрица
Details
Входной сигнал, заданный как вектор или матрица. Если x — матрица, то ее столбцы рассматриваются как независимые каналы. Сигнал x содержит значения NaN для представления пропущенных отсчетов.
| Типы данных |
|
| Поддержка комплексных чисел |
Да |
#
maxlen —
максимальная длина последовательностей предсказания
целое положительное число
Details
Максимальная длина последовательностей предсказания, заданная как целое положительное число. Если не задавать maxlen, то fillgaps итеративно подбирает модели авторегрессии, используя все предыдущие точки для прямой оценки и все будущие точки для обратной оценки.
| Типы данных |
|
#
order —
порядок модели авторегрессии
целое положительное число
Details
Порядок модели авторегрессии, заданный как целое положительное число. Порядок усекается, если order бесконечен или если не хватает доступных отсчетов. Если не задавать order, то fillgaps выбирает порядок, который минимизирует информационный критерий Акаике.
| Типы данных |
|
Выходные аргументы
#
y —
реконструированный сигнал
вектор | матрица
Details
Реконструированный сигнал, возвращаемый в виде вектора или матрицы.
Примеры
Заполнение разрывов в функциях
Details
Сгенерируем функцию, состоящую из суммы двух синусоид и лоренцевой кривой. Функция дискретизирована с частотой 200 Гц в течение 2 секунд. Построим график.
import EngeeDSP.Functions: fillgaps
x = -1:0.005:1
f = 1 ./ (1 .+ 10 .* x.^2) .+ sin.(2*pi*3*x)/10 .+ cos.(25*pi*x)/10
plot(x, f)

Вставим разрывы на интервалах (−0.8,−0.6), (−0.2,0.1) и (0.4,0.7).
h = copy(f)
h[(x .> -0.8) .& (x .< -0.6)] .= NaN
h[(x .> -0.2) .& (x .< 0.1)] .= NaN
h[(x .> 0.4) .& (x .< 0.7)] .= NaN
Заполним разрывы, используя настройки по умолчанию fillgaps. Построим график исходной и восстановленной функций.
y = fillgaps(h)
plot(x, f, seriestype = :scatter, markersize = 2, color = :blue, label = "Original")
plot!(x, y, linewidth = 2, color = :red, label = "Reconstructed")

Повторим вычисления, но теперь зададим максимальную длину последовательности предсказания 3 отсчета и порядок модели 1. Построим графики исходной и восстановленной функций. В самом простом случае fillgaps выполняет линейную аппроксимацию.
y = fillgaps(h,3,1)
plot(x, f, seriestype = :scatter, markersize = 2, color = :blue, label = "Original")
plot!(x, y, linewidth = 2, color = :red, label = "Reconstructed")

Зададим максимальную длину последовательности предсказания 80 отсчетов и порядок модели 40. Построим графики исходной и восстановленной функций.
y = fillgaps(h,80,40)
plot(x, f, seriestype = :scatter, markersize = 2, color = :blue, label = "Original")
plot!(x, y, linewidth = 2, color = :red, label = "Reconstructed")

Изменим порядок модели на 70. Построим графики исходной и восстановленной функций.
y = fillgaps(h,80,70)
plot(x, f, seriestype = :scatter, markersize = 2, color = :blue, label = "Original")
plot!(x, y, linewidth = 2, color = :red, label = "Reconstructed")

Реконструкция несовершенна, поскольку при очень высоких порядках модели часто возникают проблемы с конечной точностью.
Литература
-
Akaike, Hirotugu. Fitting Autoregressive Models for Prediction. Annals of the Institute of Statistical Mathematics. Vol. 21, 1969, pp. 243–247.
-
Kay, Steven M. Modern Spectral Estimation: Theory and Application. Englewood Cliffs, NJ: Prentice Hall, 1988.
-
Orfanidis, Sophocles J. Optimum Signal Processing: An Introduction. 2nd Edition. New York: McGraw-Hill, 1996.