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


Python SciPy signal.CZT用法及代码示例


本文简要介绍 python 语言中 scipy.signal.CZT 的用法。

用法:

class  scipy.signal.CZT(n, m=None, w=None, a=1 + 0j)#

创建一个可调用的啁啾 z-transform 函数。

变换以计算围绕螺旋的频率响应。此类的对象是可调用的,可以在其输入上计算啁啾z-transform。该对象预先计算给定变换中使用的常量啁啾。

参数

n int

信号的大小。

m 整数,可选

所需的输出点数。默认值为 n。

w 复杂的,可选的

每个步骤中点之间的比率。这必须是精确的,否则累积的误差会降低输出序列的尾部。默认为围绕整个单位圆的等距点。

a 复杂的,可选的

复平面的起点。默认为 1+0j。

返回

f CZT

可调用对象f(x, axis=-1)用于计算啁啾 z-transform onx.

注意

选择默认值使得 f(x) 等效于 fft.fft(x) ,如果 m > len(x) ,则 f(x, m) 等效于 fft.fft(x, m)

如果 w 不在单位圆上,则变换将围绕具有exponentially-increasing 半径的螺旋。无论如何,角度将线性增加。

对于确实位于单位圆上的变换,使用时精度更好scipy.signal.ZoomFFT, 因为任何数值错误w为长数据长度累积,远离单位圆。

啁啾 z-transform 可以比具有零填充的等效 FFT 更快。尝试使用您自己的数组大小来查看。

然而,啁啾z-transform 的精度远低于等效的零填充 FFT。

由于此 CZT 是使用 Bluestein 算法实现的,它可以在 O(N log N) 时间内计算大型 prime-length 傅立叶变换,而不是直接 DFT 计算所需的 O(N**2) 时间。 ( scipy.fft 也使用 Bluestein 算法。)

(“啁啾z-transform”这个名称来自 Bluestein 算法中啁啾的使用。它不会像其他名称中带有 “chirp” 的变换那样将信号分解为啁啾。)

参考

[1]

Leo I. Bluestein,“离散傅立叶变换计算的线性滤波方法”,东北电子研究与工程会议记录 10, 218-219 (1968)。

[2]

Rabiner、Schafer 和 Rader,“啁啾 z-transform 算法及其应用”,Bell Syst。技术。 J. 48, 1249-1292 (1969)。

例子

计算多个prime-length FFT:

>>> from scipy.signal import CZT
>>> import numpy as np
>>> a = np.random.rand(7)
>>> b = np.random.rand(7)
>>> c = np.random.rand(7)
>>> czt_7 = CZT(n=7)
>>> A = czt_7(a)
>>> B = czt_7(b)
>>> C = czt_7(c)

显示计算 FFT 的点:

>>> czt_7.points()
array([ 1.00000000+0.j        ,  0.62348980+0.78183148j,
       -0.22252093+0.97492791j, -0.90096887+0.43388374j,
       -0.90096887-0.43388374j, -0.22252093-0.97492791j,
        0.62348980-0.78183148j])
>>> import matplotlib.pyplot as plt
>>> plt.plot(czt_7.points().real, czt_7.points().imag, 'o')
>>> plt.gca().add_patch(plt.Circle((0,0), radius=1, fill=False, alpha=.3))
>>> plt.axis('equal')
>>> plt.show()
scipy-signal-CZT-1.png

相关用法


注:本文由纯净天空筛选整理自scipy.org大神的英文原创作品 scipy.signal.CZT。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。