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)
。
註解
預設值的選擇使得
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()
方法
__call__
(x, *[, axis])計算訊號的線性調頻 Z 轉換。
points
()傳回計算線性調頻 Z 轉換的點。