返回任意类型序列x的离散余弦变换。
参数:
x:array_like输入数组。
type:{1, 2, 3, 4}, 可选参数DCT的类型(请参阅注释)。预设类型为2。
n:int, 可选参数转换的长度。如果n < x.shape[axis],x被截断。如果n > x.shape[axis],x是zero-padded。默认结果为n = x.shape[axis]。
axis:int, 可选参数计算dct的轴;默认值位于最后一个轴上(即,axis=-1)。
norm:{None, ‘ortho’}, 可选参数规范化模式(请参阅注释)。默认为无。
overwrite_x:bool, 可选参数如果为True,则x的内容可以被销毁;默认值为False。
workers:int, 可选参数用于并行计算的最大工人数。如果为负,则值从os.cpu_count()。参考fft更多细节。
返回值:
y:实数ndarray转换后的输入数组。
注意:
对于一维数组x,dct(x, norm='ortho')等于MATLABdct(x)。
对于norm=None,没有扩展dct和idct被缩放1/N其中N是DCT的“logical”大小。对于norm='ortho'两个方向都按相同因子缩放1/sqrt(N)。
理论上,DCT有8种类型,只有前4种类型可以实现。 ‘The’ DCT通常是指DCT类型2,而‘the’ Inverse DCT通常是指DCT类型3。
一类
DCT-I有几种定义;我们使用以下(用于norm=None)
如果norm='ortho',x[0]和x[N-1]乘以比例因子和y[k]乘以比例因子f
注意
仅当输入大小> 1时才支持DCT-I。
第二类
DCT-II有几种定义;我们使用以下(用于norm=None)
如果norm='ortho',y[k]乘以比例因子f
这使得相应的系数矩阵正交(O @ O.T = np.eye(N))。
III型
有几个定义,我们使用以下内容(norm=None)
或者,norm='ortho'
(未归一化的)DCT-III是(未归一化的)DCT-II的逆,最大为2N。正交化的DCT-III恰好是正交化的DCT-II的逆。
IV型
DCT-IV有几种定义;我们使用以下(用于norm=None)
如果norm='ortho',y[k]乘以比例因子f
参考文献:
1
IEEE Transactions关于声学,语音和信号处理的J. Makhoul撰写的“一维和二维快速余弦变换”。 28(1),第27-34页,DOI:10.1109 /TASSP.1980.1163351(1980)。
2
例子:
对于实际的even-symmetrical输入,类型1 DCT等效于FFT(虽然更快)。输出也是实数和even-symmetrical。一半的FFT输入用于生成一半的FFT输出:
>>> from scipy.fft import fft, dct
>>> 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.])