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]
參考文獻
[1]“克羅內克δ函數”,*維基百科*,https://en.wikipedia.org/wiki/Kronecker_delta#Digital_signal_processing
在 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()