scipy.signal.chirp

scipy.signal.chirp(t, f0, t1, f1, method='linear', phi=0, vertex_zero=True)[源代码]

扫频余弦发生器。

在下文中,‘Hz’应该解释为‘每单位周数’;这里没有要求单位是一秒。重要的区别在于旋转的单位是周期,而不是弧度。同样, t 可能是对空间而不是时间的测量。

参数
tarray_like

评估波形的时间。

f0浮动

在时间t=0时的频率(例如Hz)。

t1浮动

时间 f1 是指定的。

f1浮动

波形在某一时刻的频率(例如Hz) t1

method{‘线性’,‘二次’,‘对数’,‘双曲线’},可选

一种频率扫描。如果不给, linear 是假定的。有关更多详细信息,请参阅下面的注释。

phi浮动,可选

相位偏移,以度为单位。默认值为0。

vertex_zero布尔值,可选

此参数仅在以下情况下使用 method 是“二次”的。它确定抛物线的顶点(即频率图)是在t=0还是t=t1。

退货
yndarray

一个Numpy数组,该数组包含在 t 具有所请求的时变频率。更准确地说,该函数返回 cos(phase + (pi/180)*phi) 哪里 phase 是整数(从0到 t )的 2*pi*f(t)f(t) 定义如下。

参见

sweep_poly

注意事项

有四个选项可供选择 method 。下列公式给出了由生成的信号的瞬时频率(以Hz为单位 chirp() 。为方便起见,也可以使用下面显示的较短名称。

LINEAR、LIN、LI:

f(t) = f0 + (f1 - f0) * t / t1

二次、四次、Q:

频率f(T)的图形是通过(0,f0)和(t1,f1)的抛物线。默认情况下,抛物线的顶点位于(0,f0)。如果 vertex_zero 为False,则顶点位于(t1,f1)。公式是:

如果VERTEX_ZERO为True:

f(t) = f0 + (f1 - f0) * t**2 / t1**2

其他:

f(t) = f1 - (f1 - f0) * (t1 - t)**2 / t1**2

要使用更一般的二次函数或任意多项式,请使用函数 scipy.signal.sweep_poly

对数、对数、对数:

f(t) = f0 * (f1/f0)**(t/t1)

F0和F1必须为非零且符号相同。

此信号也称为几何啁啾或指数啁啾。

双曲线,Hyp:

f(t) = f0*f1*t1 / ((f0 - f1)*t + f1*t1)

F0和F1必须为非零。

示例

示例中将使用以下内容:

>>> from scipy.signal import chirp, spectrogram
>>> import matplotlib.pyplot as plt

对于第一个示例,我们将在10秒内绘制从6 Hz到1 Hz的线性啁啾的波形:

>>> t = np.linspace(0, 10, 1500)
>>> w = chirp(t, f0=6, f1=1, t1=10, method='linear')
>>> plt.plot(t, w)
>>> plt.title("Linear Chirp, f(0)=6, f(10)=1")
>>> plt.xlabel('t (sec)')
>>> plt.show()
../../_images/scipy-signal-chirp-1_00_00.png

对于其余的示例,我们将使用更高的频率范围,并使用 scipy.signal.spectrogram 。我们将使用以7200 Hz采样的4秒间隔。

>>> fs = 7200
>>> T = 4
>>> t = np.arange(0, int(T*fs)) / fs

我们将使用此函数在每个示例中绘制语谱图。

>>> def plot_spectrogram(title, w, fs):
...     ff, tt, Sxx = spectrogram(w, fs=fs, nperseg=256, nfft=576)
...     plt.pcolormesh(tt, ff[:145], Sxx[:145], cmap='gray_r', shading='gouraud')
...     plt.title(title)
...     plt.xlabel('t (sec)')
...     plt.ylabel('Frequency (Hz)')
...     plt.grid()
...

1500 Hz至250 Hz的二次啁啾(频率抛物线的顶点位于t=0):

>>> w = chirp(t, f0=1500, f1=250, t1=T, method='quadratic')
>>> plot_spectrogram(f'Quadratic Chirp, f(0)=1500, f({T})=250', w, fs)
>>> plt.show()
../../_images/scipy-signal-chirp-1_01_00.png

1500 Hz至250 Hz的二次啁啾(频率抛物线的顶点位于t=T):

>>> w = chirp(t, f0=1500, f1=250, t1=T, method='quadratic',
...           vertex_zero=False)
>>> plot_spectrogram(f'Quadratic Chirp, f(0)=1500, f({T})=250\n' +
...                  '(vertex_zero=False)', w, fs)
>>> plt.show()
../../_images/scipy-signal-chirp-1_02_00.png

1500 Hz到250 Hz的对数啁啾:

>>> w = chirp(t, f0=1500, f1=250, t1=T, method='logarithmic')
>>> plot_spectrogram(f'Logarithmic Chirp, f(0)=1500, f({T})=250', w, fs)
>>> plt.show()
../../_images/scipy-signal-chirp-1_03_00.png

1500 Hz至250 Hz的双曲啁啾:

>>> w = chirp(t, f0=1500, f1=250, t1=T, method='hyperbolic')
>>> plot_spectrogram(f'Hyperbolic Chirp, f(0)=1500, f({T})=250', w, fs)
>>> plt.show()
../../_images/scipy-signal-chirp-1_04_00.png