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


Python SciPy fft.dct用法及代碼示例


本文簡要介紹 python 語言中 scipy.fft.dct 的用法。

用法:

scipy.fft.dct(x, type=2, n=None, axis=-1, norm=None, overwrite_x=False, workers=None, orthogonalize=None)#

返回任意類型序列 x 的離散餘弦變換。

參數

x array_like

輸入數組。

type {1, 2, 3, 4},可選

DCT 的類型(見注釋)。默認類型為 2。

n 整數,可選

變換的長度。如果n < x.shape[axis],x被截斷。如果n > x.shape[axis],x是零填充的。默認結果是n = x.shape[axis].

axis 整數,可選

計算 dct 的軸;默認值在最後一個軸上(即 axis=-1 )。

norm {“backward”, “ortho”, “forward”},可選

標準化模式(見注釋)。默認為“backward”。

overwrite_x 布爾型,可選

如果為 True,則 x 的內容可以被銷毀;默認為假。

workers 整數,可選

用於並行計算的最大工作線程數。如果為負,則該值從 os.cpu_count() 環繞。有關詳細信息,請參閱 fft

orthogonalize 布爾型,可選

是否使用正交 DCT 變體(見注釋)。默認為 Truenorm="ortho"False 否則。

返回

y 真實的ndarray

轉換後的輸入數組。

注意

對於一維數組 xdct(x, norm='ortho') 等於 MATLAB dct(x)

警告

對於 type in {1, 2, 3}norm="ortho" 打破了與直接傅裏葉變換的直接對應關係。要恢複它,您必須指定 orthogonalize=False

對於norm="ortho"dct idct 在兩個方向上均按相同的總體因子進行縮放。默認情況下,變換也是正交的,這對於類型 1、2 和 3 意味著變換定義被修改以給出 DCT 矩陣的正交性(見下文)。

對於 norm="backward"dct 沒有縮放,並且 idct 1/N 縮放,其中 N 是 DCT 的 “logical” 大小。對於norm="forward"1/N 歸一化應用於前向dct,而 idct 未歸一化。

DCT 理論上有 8 種類型,SciPy 中隻實現了前 4 種類型。'The'DCT 一般是指 DCT 類型 2,‘the’ Inverse DCT 一般是指 DCT 類型 3。

第一類

DCT-I有幾個定義;我們使用以下內容(對於 norm="backward" )

如果orthogonalize=Truex[0]x[N-1]乘以 的比例因子,並且y[0]y[N-1]除以 。當與 norm="ortho" 結合使用時,這使得相應的係數矩陣正交( O @ O.T = np.eye(N) )。

注意

DCT-I 僅支持輸入大小 > 1。

Ⅱ型

DCT-II有幾個定義;我們使用以下內容(對於 norm="backward" )

如果 orthogonalize=Truey[0] 除以 ,當與 norm="ortho" 結合時,使相應的係數矩陣正交( O @ O.T = np.eye(N) )。

第三類

有幾個定義,我們使用以下(對於norm="backward")

如果 orthogonalize=Truex[0] 項乘以 ,當與 norm="ortho" 結合時,使相應的係數矩陣正交( O @ O.T = np.eye(N) )。

(未歸一化的)DCT-III 是(未歸一化的)DCT-II 的倒數,最大因子為 2N。正交歸一化的DCT-III 與正交歸一化的DCT-II 正好相反。

Ⅳ型

DCT-IV有幾個定義;我們使用以下內容(對於 norm="backward" )

orthogonalize 在這裏沒有影響,因為 DCT-IV 矩陣已經正交到 2N 的比例因子。

參考

[1]

“一維和二維的快速餘弦變換”,作者:J. Makhoul,IEEE 聲學、語音和信號處理匯刊卷。 28(1),第 27-34 頁,DOI:10.1109/TASSP.1980.1163351(1980 年)。

[2]

維基百科,“Discrete cosine transform”,https://en.wikipedia.org/wiki/Discrete_cosine_transform

例子

對於真實的even-symmetrical 輸入,Type 1 DCT 等效於 FFT(雖然更快)。輸出也是真實的和even-symmetrical。一半的 FFT 輸入用於生成一半的 FFT 輸出:

>>> from scipy.fft import fft, dct
>>> import numpy as np
>>> fft(np.array([4., 3., 5., 10., 5., 3.])).real
array([ 30.,  -8.,   6.,  -2.,   6.,  -8.])
>>> dct(np.array([4., 3., 5., 10.]), 1)
array([ 30.,  -8.,   6.,  -2.])

相關用法


注:本文由純淨天空篩選整理自scipy.org大神的英文原創作品 scipy.fft.dct。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。