interp
Интерполяция — увеличение частоты дискретизации в целое число раз.
| Библиотека |
|
Аргументы
Входные аргументы
#
x —
входной сигнал
вектор
Details
Входной сигнал, заданный как вектор.
| Типы данных |
|
#
r —
коэффициент интерполяции
положительное целое число
Details
Коэффициент интерполяции, заданный как положительное целое число.
| Типы данных |
|
#
n —
половина количества входных значений выборки, используемых для интерполяции
4 (по умолчанию) | положительное целое число
Details
Половина количества входных значений выборки, используемых для интерполяции, заданная как положительное целое число. Для достижения наилучших результатов используйте n не более 10. Длина интерполяционного фильтра нижних частот составляет 2 × n × r + 1.
| Типы данных |
|
#
cutoff —
нормализованная частота среза
0.5 (по умолчанию) | положительный скаляр
Details
Нормализованная частота среза входного сигнала, заданная как положительное вещественное число не более 1, представляющая собой часть частоты Найквиста. Значение 1 означает, что сигнал занимает весь интервал Найквиста.
| Типы данных |
|
Выходные аргументы
#
b —
коэффициенты интерполяционного фильтра нижних частот
вектор-столбец
Details
Коэффициенты интерполяционного фильтра нижних частот, возвращаемые в виде вектора-столбца.
| Типы данных |
|
Примеры
Интерполяция сигнала
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 вставляет нули в исходный сигнал, а затем применяет к расширенной последовательности интерполяционный фильтр нижних частот. Функция использует алгоритм интерполяции нижних частот 8.1, описанный в [1]:
-
Расширить входной вектор до нужной длины, вставив нули между исходными значениями данных.
-
Спроектировать специальный симметричный КИХ-фильтр, который пропускает исходные данные без изменений и интерполирует их для минимизации среднеквадратической ошибки между интерполированными точками и их идеальными значениями. Фильтр, используемый функцией
interp, совпадает с фильтром, возвращаемымintfilt. -
Применить фильтр к расширенному входному вектору для получения выходного значения.
Литература
-
Digital Signal Processing Committee of the IEEE Acoustics, Speech, and Signal Processing Society, eds. Programs for Digital Signal Processing. New York: IEEE Press, 1979.
-
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.