当前位置: 首页>>代码示例>>用法及示例精选>>正文


python scipy signal.chirp用法及代码示例

用法:

scipy.signal.chirp(t, f0, t1, f1, method='linear', phi=0, vertex_zero=True)

Frequency-swept余弦发生器。

在下文中,‘Hz’应解释为“每单位循环数”;此处不要求单位为一秒。重要的区别是旋转单位是周期,而不是弧度。同样,t可以表示空间而不是时间。

参数:

tarray_like

评估波形的时间。

f0float

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

t1float

指定f1的时间。

f1float

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

method{‘linear’, ‘quadratic’, ‘logarithmic’, ‘hyperbolic’}, 可选参数

频率扫描的种类。如果未给出,则假定为线性。有关更多详细信息,请参见下面的注释。

phifloat, 可选参数

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

vertex_zerobool, 可选参数

仅当方法为‘quadratic’时才使用此参数。它确定抛物线的顶点(即频率的图表)是在t = 0还是在t = t1。

返回值:

yndarray

包含在t处以请求的time-varying频率评估的信号的numpy数组。更准确地说,函数返回cos(phase + (pi/180)*phi)其中是整数(从0到t的)2*pi*f(t)f(t)在下面定义。

注意:

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

线性,林,李:

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

二次,四次,q:

The graph of the frequency f(t) is a parabola through (0, f0) and (t1, f1). By default, the vertex of the parabola is at (0, f0). If vertex_zero is False, then the vertex is at (t1, f1). The formula is:

if vertex_zero is True:

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

else:

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

To use a more general quadratic function, or an arbitrary polynomial, use the function scipy.signal.sweep_poly.

对数,对数,低:

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

f0 and f1 must be nonzero and have the same sign.

This signal is also known as a geometric or exponential chirp.

双曲线,炒作:

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

f0 and f1 must be nonzero.

例子:

示例中将使用以下内容:

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

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

>>> t = np.linspace(0, 10, 5001)
>>> 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。我们将以8000 Hz的频率采样10秒。

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

在10秒内从1500 Hz到250 Hz的二次chi(频率的抛物线曲线的顶点在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(tt, ff[:513], 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()
../_images/scipy-signal-chirp-1_01_00.png

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

>>> w = chirp(t, f0=1500, f1=250, t1=10, method='quadratic',
...           vertex_zero=False)
>>> ff, tt, Sxx = spectrogram(w, fs=fs, noverlap=256, nperseg=512,
...                           nfft=2048)
>>> plt.pcolormesh(tt, ff[:513], Sxx[:513], cmap='gray_r')
>>> plt.title('Quadratic Chirp, f(0)=1500, f(10)=250\n' +
...           '(vertex_zero=False)')
>>> plt.xlabel('t (sec)')
>>> plt.ylabel('Frequency (Hz)')
>>> plt.grid()
>>> plt.show()
../_images/scipy-signal-chirp-1_02_00.png

在10秒内从1500 Hz到250 Hz的对数chi:

>>> w = chirp(t, f0=1500, f1=250, t1=10, method='logarithmic')
>>> ff, tt, Sxx = spectrogram(w, fs=fs, noverlap=256, nperseg=512,
...                           nfft=2048)
>>> plt.pcolormesh(tt, ff[:513], Sxx[:513], cmap='gray_r')
>>> plt.title('Logarithmic Chirp, f(0)=1500, f(10)=250')
>>> plt.xlabel('t (sec)')
>>> plt.ylabel('Frequency (Hz)')
>>> plt.grid()
>>> plt.show()
../_images/scipy-signal-chirp-1_03_00.png

在10秒内从1500 Hz到250 Hz的双曲chi:

>>> w = chirp(t, f0=1500, f1=250, t1=10, method='hyperbolic')
>>> ff, tt, Sxx = spectrogram(w, fs=fs, noverlap=256, nperseg=512,
...                           nfft=2048)
>>> plt.pcolormesh(tt, ff[:513], Sxx[:513], cmap='gray_r')
>>> plt.title('Hyperbolic Chirp, f(0)=1500, f(10)=250')
>>> plt.xlabel('t (sec)')
>>> plt.ylabel('Frequency (Hz)')
>>> plt.grid()
>>> plt.show()
../_images/scipy-signal-chirp-1_04_00.png

源码:

scipy.signal.chirp的API实现见:[源代码]

相关用法

注:本文由纯净天空筛选整理自 scipy.signal.chirp。非经特殊声明,原始代码版权归原作者所有,本译文的传播和使用请遵循“署名-相同方式共享 4.0 国际 (CC BY-SA 4.0)”协议。