chirp#
- scipy.signal.chirp(t, f0, t1, f1, method='linear', phi=0, vertex_zero=True)[源代码]#
频率扫描余弦波发生器。
在以下内容中,“Hz”应解释为“每单位周期”;这里没有要求单位是一秒。重要的区别在于旋转单位是周期,而不是弧度。同样,t可以是空间度量,而不是时间。
- 参数:
- tarray_like
计算波形的时刻。
- f0float
时刻t=0时的频率(例如,Hz)。
- t1float
指定f1的时刻。
- f1float
时刻t1时的波形频率(例如,Hz)。
- method{‘linear’, ‘quadratic’, ‘logarithmic’, ‘hyperbolic’}, 可选
频率扫描の種類。如果没有提供,则假定为linear。有关更多详细信息,请参见以下注释。
- phifloat,可选
相位偏移(以度为单位)。默认为 0。
- vertex_zero布尔值,可选
此参数仅在 method 为 ‘quadratic’ 时使用。它确定频率图表的抛物线顶点位于 t=0 还是 t=t1。
- 返回:
- yndarray
一个 numpy 数组,其中包含使用所请求的时变频率在 t 处计算出的信号。更准确地说,该函数返回
cos(phase + (pi/180)*phi)
,其中 phase 是2*pi*f(t)
的积分(从 0 到 t)。f(t)
定义如下。
另请参见
备注
method 有四个选项。以下公式给出了 chirp() 生成的信号的瞬时频率(单位:赫兹)。为方便起见,也可以使用下面显示的较短名称。
linear, lin, li
f(t) = f0 + (f1 - f0) * t / t1
quadratic, quad, 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
。logarithmic, log, lo
f(t) = f0 * (f1/f0)**(t/t1)
f0 和 f1 必须非零且同号。
此信号也称为几何双曲或指数双曲。
hyperbolic, hyp
f(t) = f0*f1*t1 / ((f0 - f1)*t + f1*t1)
f0 和 f1 必须为非零。
范例
以下内容将在范例中使用
>>> import numpy as np >>> from scipy.signal import chirp, spectrogram >>> import matplotlib.pyplot as plt
对于第一个范例,我们将绘制从 6 Hz 到 1 Hz 在 10 秒内呈线性变化的波形
>>> 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()
对于其他范例,我们将使用更高的频率范围,并使用
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) ... fig, ax = plt.subplots() ... ax.pcolormesh(tt, ff[:145], Sxx[:145], cmap='gray_r', ... shading='gouraud') ... ax.set_title(title) ... ax.set_xlabel('t (sec)') ... ax.set_ylabel('Frequency (Hz)') ... ax.grid(True) ...
从 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()
从 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()
从 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()
从 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()