當前位置: 首頁>>編程示例 >>用法及示例精選 >>正文


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。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。