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)
定义如下。
参见
注意事项
有四个选项可供选择 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()
对于其余的示例,我们将使用更高的频率范围,并使用
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()
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()