scipy.signal.

unit_impulse#

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

單位脈衝訊號(離散狄拉克δ函數)或單位基底向量。

參數:
shapeint 或 int 元組

輸出中的樣本數(1 維),或表示輸出形狀的元組(N 維)。

idxNone 或 int 或 int 元組或 ‘mid’,可選

值為 1 的索引。如果為 None,則預設為第 0 個元素。如果 idx='mid',則脈衝將在所有維度中以 shape // 2 為中心。如果為 int,則脈衝將在所有維度中位於 idx

dtype資料類型,可選

陣列所需的資料類型,例如 numpy.int8。預設值為 numpy.float64

返回:
yndarray

包含脈衝訊號的輸出陣列。

筆記

在數位訊號處理文獻中,單位脈衝訊號通常以克羅內克δ函數表示。[1] 也就是說,一個訊號 \(u_k[n]\),除了在第 \(k\) 個樣本處為 1 之外,其他地方都為零,可以表示為

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

此外,單位脈衝經常被解釋為連續時間狄拉克分佈的離散時間版本。[2]

參考文獻

在 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.])

二維脈衝,置中

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