scipy.signal.

unit_impulse#

scipy.signal.unit_impulse(shape, idx=None, dtype= 'float'>)[источник]#

Единичный импульсный сигнал (дискретная дельта-функция) или единичный базисный вектор.

Параметры:
shapeint или кортеж int

Количество выборок на выходе (1-D), или кортеж, представляющий форму выхода (N-D).

idxNone или int или кортеж int или 'mid', опционально

Индекс, по которому значение равно 1. Если None, по умолчанию используется 0-й элемент. Если idx='mid', импульс будет центрирован в shape // 2 во всех измерениях. Если задано целое число, импульс будет находиться в idx во всех измерениях.

dtypeтип данных, опционально

Желаемый тип данных для массива, например, numpy.int8. По умолчанию numpy.float64.

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

Выходной массив, содержащий импульсный сигнал.

Примечания

В литературе по цифровой обработке сигналов единичный импульсный сигнал часто представляется дельтой Кронекера. [1] То есть сигнал \(u_k[n]\), который равен нулю везде, кроме единицы в \(k\)-й образец, можно выразить как

\[u_k[n] = \delta[n-k] \equiv \delta_{n,k}\ .\]

Кроме того, единичный импульс часто интерпретируется как дискретно-временная версия непрерывно-временного распределения Дирака. [2]

Ссылки

[1]

«Дельта Кронекера», Википедия, https://en.wikipedia.org/wiki/Kronecker_delta#Digital_signal_processing

[2]

“Дельта-функция Дирака” Википедия, https://en.wikipedia.org/wiki/Dirac_delta_function#Relationship_to_the_Kronecker_delta

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

Примеры

Импульс на 0-м элементе (\(\\delta[n]\)):

>>> from scipy import signal
>>> signal.unit_impulse(8)
array([ 1.,  0.,  0.,  0.,  0.,  0.,  0.,  0.])

Импульс смещён на 2 отсчёта (\(\\delta[n-2]\)):

>>> signal.unit_impulse(7, 2)
array([ 0.,  0.,  1.,  0.,  0.,  0.,  0.])

2-мерный импульс, центрированный:

>>> signal.unit_impulse((3, 3), 'mid')
array([[ 0.,  0.,  0.],
       [ 0.,  1.,  0.],
       [ 0.,  0.,  0.]])

Импульс в (2, 2), используя вещание:

>>> signal.unit_impulse((4, 4), 2)
array([[ 0.,  0.,  0.,  0.],
       [ 0.,  0.,  0.,  0.],
       [ 0.,  0.,  1.,  0.],
       [ 0.,  0.,  0.,  0.]])

Постройте импульсную характеристику фильтра Баттерворта низких частот 4-го порядка:

>>> imp = signal.unit_impulse(100, 'mid')
>>> b, a = signal.butter(4, 0.2)
>>> response = signal.lfilter(b, a, imp)
>>> import numpy as np
>>> import matplotlib.pyplot as plt
>>> plt.plot(np.arange(-50, 50), imp)
>>> plt.plot(np.arange(-50, 50), response)
>>> plt.margins(0.1, 0.1)
>>> plt.xlabel('Time [samples]')
>>> plt.ylabel('Amplitude')
>>> plt.grid(True)
>>> plt.show()
../../_images/scipy-signal-unit_impulse-1.png