scipy.signal.

unit_impulse#

scipy.signal.unit_impulse(shape, idx=None, dtype=<class 'float'>)[Quelle]#

Einheitlicher Impulssignal (diskrete Deltafunktion) oder Einheitsbasisvektor.

Parameter:
shapeint oder Tupel von int

Anzahl der Samples in der Ausgabe (1-D) oder ein Tupel, das die Form der Ausgabe (N-D) darstellt.

idxNone oder int oder Tupel von int oder ‚mid‘, optional

Index, an dem der Wert 1 ist. Wenn None, wird standardmäßig das 0-te Element verwendet. Wenn idx='mid', wird der Impuls in allen Dimensionen auf shape // 2 zentriert. Wenn ein int, wird der Impuls in allen Dimensionen an idx platziert.

dtypeDatentyp, optional

Der gewünschte Datentyp für das Array, z. B. numpy.int8. Standard ist numpy.float64.

Rückgabe:
yndarray

Ausgabe-Array, das ein Impulssignal enthält.

Hinweise

In der Literatur zur digitalen Signalverarbeitung wird das Einheitssignal oft durch die Kronecker-Delta-Funktion dargestellt. [1] D. h., ein Signal \(u_k[n]\), das überall null ist, außer an der \(k\)-ten Abtastung, wo es eins ist, kann ausgedrückt werden als

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

Darüber hinaus wird der Einheitspuls häufig als diskrete Zeitversion der kontinuierlichen Dirac-Distribution interpretiert. [2]

Referenzen

Hinzugefügt in Version 0.19.0.

Beispiele

Ein Impuls am 0. Element (\(\\delta[n]\))

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

Impuls um 2 Samples versetzt (\(\\delta[n-2]\))

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

2-dimensionaler Impuls, zentriert

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

Impuls bei (2, 2), unter Verwendung von Broadcasting

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

Plot der Impulsantwort eines Tiefpassfilters vom 4. Ordnung nach Butterworth

>>> 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