cupyx.scipy.signal.chirp#

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

频率扫描余弦波发生器。

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

参数:
  • t (array_like) – 评估波形的时间点。

  • f0 (float) – 频率(例如 Hz)在时间 t=0 时。

  • t1 (float) – 指定 f1 的时间。

  • f1 (float) – 波形在时间 t1 处的频率(例如 Hz)。

  • method ({'linear', 'quadratic', 'logarithmic', 'hyperbolic'}, optional) – 频率扫描的类型。如果没有给出,则假设为 线性 。有关更多详细信息,请参见下面的注释。

  • phi (float, optional) – 相位偏移,以度为单位。默认值为0。

  • vertex_zero (bool, optional) – 仅当 method 为 ‘quadratic’ 时使用此参数。它决定抛物线的顶点,即频率图,是在 t=0 还是 t=t1。

返回:

y – 一个包含信号在 t 处评估的 numpy 数组,具有请求的时变频率。更准确地说,函数返回 cos(phase + (pi/180)*phi),其中 phase 是从 0 到 t2*pi*f(t) 的积分。f(t) 定义如下。

返回类型:

ndarray

示例

以下内容将用于示例中:

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

在第一个示例中,我们将绘制一个从6 Hz到1 Hz的线性啁啾波形,持续时间为10秒:

>>> t = cupy.linspace(0, 10, 5001)
>>> w = chirp(t, f0=6, f1=1, t1=10, method='linear')
>>> plt.plot(cupy.asnumpy(t), cupy.asnumpy(w))
>>> plt.title("Linear Chirp, f(0)=6, f(10)=1")
>>> plt.xlabel('t (sec)')
>>> plt.show()

对于剩余的示例,我们将使用更高频率的范围,并使用 cupyx.scipy.signal.spectrogram 展示结果。我们将使用以 8000 Hz 采样的 10 秒间隔。

>>> fs = 8000
>>> T = 10
>>> t = cupy.linspace(0, T, T*fs, endpoint=False)

在10秒内从1500 Hz到250 Hz的二次啁啾(频率的抛物线曲线的顶点在t=0处):

>>> w = chirp(t, f0=1500, f1=250, t1=10, method='quadratic')
>>> ff, tt, Sxx = spectrogram(w, fs=fs, noverlap=256, nperseg=512,
...                           nfft=2048)
>>> plt.pcolormesh(cupy.asnumpy(tt), cupy.asnumpy(ff[:513]),
                   cupy.asnumpy(Sxx[:513]), cmap='gray_r')
>>> plt.title('Quadratic Chirp, f(0)=1500, f(10)=250')
>>> plt.xlabel('t (sec)')
>>> plt.ylabel('Frequency (Hz)')
>>> plt.grid()
>>> plt.show()