scipy.signal.

upfirdn#

scipy.signal.upfirdn(h, x, вверх=1, вниз=1, ось=-1, mode='constant', cval=0)[источник]#

Повысить частоту дискретизации, применить КИХ-фильтр и понизить частоту дискретизации.

Параметры:
harray_like

Коэффициенты 1-D КИХ (конечно-импульсного) фильтра.

xarray_like

Входной массив сигнала.

вверхint, необязательный

Коэффициент повышения частоты дискретизации. По умолчанию 1.

внизint, необязательный

Коэффициент понижающей дискретизации. По умолчанию 1.

осьint, необязательный

Ось входного массива данных, вдоль которой применяется линейный фильтр. Фильтр применяется к каждому подмассиву вдоль этой оси. По умолчанию -1.

modestr, optional

Режим расширения сигнала для использования. Набор {"constant", "symmetric", "reflect", "edge", "wrap"} соответствуют режимам, предоставляемым numpy.pad. "smooth" реализует гладкое расширение путем расширения на основе наклона последних 2 точек на каждом конце массива. "antireflect" и "antisymmetric" являются антисимметричными версиями "reflect" и "symmetric". Режим “линия” расширяет сигнал на основе линейного тренда, определённого первыми и последними точками вдоль axis.

Добавлено в версии 1.4.0.

cvalfloat, опционально

Постоянное значение для использования, когда mode == "constant".

Добавлено в версии 1.4.0.

Возвращает:
yndarray

Выходной массив сигнала. Размерности будут такими же, как x кроме как вдоль ось, который будет изменять размер в соответствии с h, вверх, и вниз параметры.

Примечания

Алгоритм является реализацией блок-схемы, показанной на странице 129 текста Вайдьянатана [1] (Рисунок 4.3-8d).

Прямой подход к увеличению частоты дискретизации с коэффициентом P с вставкой нулей, КИХ-фильтрация длины N, и понижение частоты дискретизации с коэффициентом Q имеет сложность O(N*Q) на выходной отсчёт. Используемая здесь полифазная реализация имеет сложность O(N/P).

Добавлено в версии 0.18.

Ссылки

[1]

P. P. Vaidyanathan, Multirate Systems and Filter Banks, Prentice Hall, 1993.

Примеры

Простые операции:

>>> import numpy as np
>>> from scipy.signal import upfirdn
>>> upfirdn([1, 1, 1], [1, 1, 1])   # FIR filter
array([ 1.,  2.,  3.,  2.,  1.])
>>> upfirdn([1], [1, 2, 3], 3)  # upsampling with zeros insertion
array([ 1.,  0.,  0.,  2.,  0.,  0.,  3.])
>>> upfirdn([1, 1, 1], [1, 2, 3], 3)  # upsampling with sample-and-hold
array([ 1.,  1.,  1.,  2.,  2.,  2.,  3.,  3.,  3.])
>>> upfirdn([.5, 1, .5], [1, 1, 1], 2)  # linear interpolation
array([ 0.5,  1. ,  1. ,  1. ,  1. ,  1. ,  0.5])
>>> upfirdn([1], np.arange(10), 1, 3)  # decimation by 3
array([ 0.,  3.,  6.,  9.])
>>> upfirdn([.5, 1, .5], np.arange(10), 2, 3)  # linear interp, rate 2/3
array([ 0. ,  1. ,  2.5,  4. ,  5.5,  7. ,  8.5])

Применить один фильтр к нескольким сигналам:

>>> x = np.reshape(np.arange(8), (4, 2))
>>> x
array([[0, 1],
       [2, 3],
       [4, 5],
       [6, 7]])

Применить вдоль последнего измерения x:

>>> h = [1, 1]
>>> upfirdn(h, x, 2)
array([[ 0.,  0.,  1.,  1.],
       [ 2.,  2.,  3.,  3.],
       [ 4.,  4.,  5.,  5.],
       [ 6.,  6.,  7.,  7.]])

Применить вдоль 0-го измерения x:

>>> upfirdn(h, x, 2, axis=0)
array([[ 0.,  1.],
       [ 0.,  1.],
       [ 2.,  3.],
       [ 2.,  3.],
       [ 4.,  5.],
       [ 4.,  5.],
       [ 6.,  7.],
       [ 6.,  7.]])