本文简要介绍 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 变体(见注释)。默认为
True
当norm="ortho"
和False
否则。
- y: 真实的ndarray
转换后的输入数组。
参数 ::
返回 ::
注意:
对于一维数组
x
,dct(x, norm='ortho')
等于 MATLABdct(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=True
、x[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=True
,y[0]
除以 ,当与norm="ortho"
结合时,使相应的系数矩阵正交(O @ O.T = np.eye(N)
)。第三类
有几个定义,我们使用以下(对于
norm="backward"
)如果
orthogonalize=True
,x[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.])
相关用法
- Python SciPy fft.dctn用法及代码示例
- Python SciPy fft.dstn用法及代码示例
- Python SciPy fft.idctn用法及代码示例
- Python SciPy fft.next_fast_len用法及代码示例
- Python SciPy fft.fft2用法及代码示例
- Python SciPy fft.fftn用法及代码示例
- Python SciPy fft.ifft2用法及代码示例
- Python SciPy fft.ifftn用法及代码示例
- Python SciPy fft.ihfftn用法及代码示例
- Python SciPy fft.rfftfreq用法及代码示例
- Python SciPy fft.rfft用法及代码示例
- Python SciPy fft.fftfreq用法及代码示例
- Python SciPy fft.fht用法及代码示例
- Python SciPy fft.idstn用法及代码示例
- Python SciPy fft.rfftn用法及代码示例
- Python SciPy fft.hfft用法及代码示例
- Python SciPy fft.set_global_backend用法及代码示例
- Python SciPy fft.ifftshift用法及代码示例
- Python SciPy fft.ihfft用法及代码示例
- Python SciPy fft.irfftn用法及代码示例
- Python SciPy fft.set_backend用法及代码示例
- Python SciPy fft.idct用法及代码示例
- Python SciPy fft.fft用法及代码示例
- Python SciPy fft.get_workers用法及代码示例
- Python SciPy fft.hfftn用法及代码示例
注:本文由纯净天空筛选整理自scipy.org大神的英文原创作品 scipy.fft.dct。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。