Документация Engee

interp

Интерполяция — увеличение частоты дискретизации в целое число раз.

Библиотека

EngeeDSP

Синтаксис

Вызов функции

  • y = interp(x,r) — увеличивает частоту дискретизации входного сигнала x в r раз.

  • y = interp(x,r,n,cutoff) — определяет два дополнительных значения:

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

    • cutoff — нормализованная частота среза входного сигнала, заданная как доля частоты Найквиста.

  • y,b = interp(x,r,n,cutoff) — также возвращает коэффициенты фильтра, используемые для интерполяции.

Аргументы

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

# x — входной сигнал
вектор

Details

Входной сигнал, заданный как вектор.

Типы данных

Float64, Float32

# r — коэффициент интерполяции
положительное целое число

Details

Коэффициент интерполяции, заданный как положительное целое число.

Типы данных

Float64, Float32

# n — половина количества входных значений выборки, используемых для интерполяции
4 (по умолчанию) | положительное целое число

Details

Половина количества входных значений выборки, используемых для интерполяции, заданная как положительное целое число. Для достижения наилучших результатов используйте n не более 10. Длина интерполяционного фильтра нижних частот составляет 2 × n × r + 1.

Типы данных

Float64, Float32

# cutoff — нормализованная частота среза
0.5 (по умолчанию) | положительный скаляр

Details

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

Типы данных

Float64, Float32

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

# y — интерполированный сигнал
вектор

Details

Интерполированный сигнал, возвращаемый в виде вектора. Аргумент y в r раз длиннее исходного входного вектора x.

Типы данных

Float64, Float32

# b — коэффициенты интерполяционного фильтра нижних частот
вектор-столбец

Details

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

Типы данных

Float64, Float32

Примеры

Интерполяция сигнала

Details

Создадим синусоидальный сигнал с частотой дискретизации 1 кГц. Интерполируем его с коэффициентом 4.

import EngeeDSP.Functions: interp

t = 0:1/1e3:1
x = sin.(2π*30*t) .+ sin.(2π*60*t)
y = interp(x, 4).y

Построим графики исходного и интерполированного сигналов.

plot(
    plot(0:30, x[1:31], seriestype = :stem, markershape = :circle, markerstrokewidth = 0, markersize = 3,
         xlabel = "Sample Number", ylabel = "Original", grid = true),
    plot(0:120, y[1:121], seriestype = :stem, markershape = :circle, markerstrokewidth = 0, markersize = 3,
         xlabel = "Sample Number", ylabel = "Interpolated", grid = true),
    layout = (2, 1)
)

interp

Алгоритмы

Интерполяция увеличивает исходную частоту дискретизации последовательности. Это противоположно прореживанию. Функция interp вставляет нули в исходный сигнал, а затем применяет к расширенной последовательности интерполяционный фильтр нижних частот. Функция использует алгоритм интерполяции нижних частот 8.1, описанный в [1]:

  1. Расширить входной вектор до нужной длины, вставив нули между исходными значениями данных.

  2. Спроектировать специальный симметричный КИХ-фильтр, который пропускает исходные данные без изменений и интерполирует их для минимизации среднеквадратической ошибки между интерполированными точками и их идеальными значениями. Фильтр, используемый функцией interp, совпадает с фильтром, возвращаемым intfilt.

  3. Применить фильтр к расширенному входному вектору для получения выходного значения.

Литература

  1. Digital Signal Processing Committee of the IEEE Acoustics, Speech, and Signal Processing Society, eds. Programs for Digital Signal Processing. New York: IEEE Press, 1979.

  2. Oetken, G., Thomas W. Parks, and H. W. Schüssler. «New results in the design of digital interpolators.» IEEE® Transactions on Acoustics, Speech, and Signal Processing. Vol. ASSP-23, No. 3, June 1975, pp. 301–309.