scipy.signal.

unit_impulse#

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

单位脉冲信号(离散狄拉克函数)或单位基向量。

参数:
shapeint 或 int 元组

输出中的样本数(1-D),或表示输出形状的元组(N-D)。

idxNone 或 int 或 int 元组或 'mid',可选

值为 1 的索引。如果为 None,则默认为第 0 个元素。如果 idx='mid',则脉冲将以 shape // 2 在所有维度上为中心。如果为 int,则脉冲将在所有维度上位于 idx

dtype数据类型,可选

数组所需的数据类型,例如,numpy.int8。默认为 numpy.float64

返回:
yndarray

包含脉冲信号的输出数组。

注释

在数字信号处理文献中,单位脉冲信号通常用克罗内克 delta 表示。[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 阶巴特沃斯低通滤波器的脉冲响应

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