scipy.signal.

CZT#

class scipy.signal.CZT(n, m=None, w=None, a=1 + 0j)[原始碼]#

建立可呼叫的線性調頻 Z 轉換函數。

轉換以計算螺旋周圍的頻率響應。此類別的物件是可呼叫的,可以對其輸入計算線性調頻 Z 轉換。此物件預先計算給定轉換中使用的常數線性調頻。

參數:
nint

訊號的大小。

mint,選用

所需的輸出點數量。預設值為 n

wcomplex,選用

每個步驟中點之間的比例。此值必須精確,否則累積誤差會降低輸出序列的尾部。預設值為單位圓周圍均勻間隔的點。

acomplex,選用

複數平面中的起點。預設值為 1+0j。

傳回:
fCZT

用於在 x 上計算線性調頻 Z 轉換的可呼叫物件 f(x, axis=-1)

另請參閱

czt

用於快速計算 CZT 的便利函數。

ZoomFFT

建立可呼叫的部分 FFT 函數的類別。

註解

預設值的選擇使得 f(x) 等效於 fft.fft(x),並且如果 m > len(x),則 f(x, m) 等效於 fft.fft(x, m)

如果 w 不在單位圓上,則轉換將圍繞半徑呈指數增長的螺旋線進行。無論如何,角度將線性增加。

對於位於單位圓上的轉換,使用 ZoomFFT 時,準確度會更高,因為 w 中的任何數值誤差都會在長資料長度中累積,而偏離單位圓。

線性調頻 Z 轉換可能比等效的零填充 FFT 更快。使用您自己的陣列大小來試試看。

但是,線性調頻 Z 轉換的精確度遠低於等效的零填充 FFT。

由於此 CZT 是使用 Bluestein 演算法實作的,因此它可以在 O(N log N) 時間內計算大型質數長度的傅立葉轉換,而不是直接 DFT 計算所需的 O(N**2) 時間。(scipy.fft 也使用 Bluestein 演算法。)

(名稱「線性調頻 Z 轉換」來自於在 Bluestein 演算法中使用線性調頻。它不會像其他名稱中帶有「線性調頻」的轉換一樣將訊號分解為線性調頻。)

參考文獻

[1]

Leo I. Bluestein,“離散傅立葉轉換計算的線性濾波方法”,東北電子研究與工程會議記錄 10, 218-219 (1968)。

[2]

Rabiner、Schafer 和 Rader,“線性調頻 Z 轉換演算法及其應用”,貝爾系統技術期刊 48, 1249-1292 (1969)。

範例

計算多個質數長度的 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()
../../_images/scipy-signal-CZT-1.png

方法

__call__(x, *[, axis])

計算訊號的線性調頻 Z 轉換。

points()

傳回計算線性調頻 Z 轉換的點。