scipy.fftpack.dct

函数原型: scipy.fftpack.dct (x,type=2,n=None,axis=-1,norm=None,overwrite_x=False)

返回任意类型序列x的离散余弦变换。

  • 参数:

    x: array_like

    ​ 输入的序列、矩阵

    type:可选参数

    ​ 可以是{1,2,3,4},默认为2;是DCT的类型参数(参阅注释)

    n:int,可选参数

    ​ DCT的长度,如果n <x.shape [axis],则x被截断。 如果n> x.shape [axis],则x补零。 默认结果为n = x.shape [axis]。

    axis: int,可选参数

    ​ 计算dct的轴; 默认值位于最后一个轴上(即axis = -1)。

    norm:{None, ‘ortho’},可选参数

    ​ 规范化模式(参阅注释),默认为无。

    overwrite_x:bool,可选参数

    ​ 如果为True,则x的内容可以被销毁; 默认值为False。

  • 返回:

    y:实数数组

    ​ 输入序列转换后的数组。

  • 注释

    对于一维数组x,dct(x,norm ='ortho')等于MATLAB dct(x)

    理论上,DCT有8种类型,只有前4种类型可以实现。 "the"DCT通常是指DCT类型2,而“ the” Inverse DCT通常是指DCT类型3。

    • 类型1

      类型1有几种定义。 我们使用以下内容(对于norm = None):

                                         N-2
      y[k] = x[0] + (-1)**k x[N-1] + 2 * sum x[n]*cos(pi*k*n/(N-1))
                                         n=1
      

      如果norm =‘ortho’,则将x [0]和x [N-1]乘以sqrt(2)的比例因子,并将y [k]乘以比例因子f:

      f = 0.5*sqrt(1/(N-1)) if k = 0 or N-1,
      f = 0.5*sqrt(2/(N-1)) otherwise.
      

      注意:仅当输入大小 > 1时,类型1才可以用。

    • 类型2

      类型2有几种定义,我们使用以下内容(对于norm = None):

                N-1
      y[k] = 2* sum x[n]*cos(pi*k*(2n+1)/(2*N)), 0 <= k < N.
                n=0
      

      如果norm =‘ortho’,则将y [k]乘以缩放因子f:

      f = sqrt(1/(4*N)) if k = 0,
      f = sqrt(1/(2*N)) otherwise.
      

      这使得相应的系数矩阵正交。

    • 类型3

      类型3有几种定义,我们使用以下内容(对于norm = None):

                        N-1
      y[k] = x[0] + 2 * sum x[n]*cos(pi*(k+0.5)*n/N), 0 <= k < N.
                        n=1
      

      或者,对于norm ='ortho’且0 <= k <N:

                                          N-1
      y[k] = x[0] / sqrt(N) + sqrt(2/N) * sum x[n]*cos(pi*(k+0.5)*n/N)
                                          n=1
      

      (未归一化的)DCT-III是(未归一化的)DCT-II的倒数,最大为2N;正交规范化的DCT-III恰好是正交规范化的DCT-II的逆。

    • 类型4

      类型4有几种定义,我们使用以下内容(对于norm = None):

                N-1
      y[k] = 2* sum x[n]*cos(pi*(2k+1)*(2n+1)/(4*N)), 0 <= k < N.
                n=0
      

      如果norm =‘ortho’,则将y [k]乘以缩放因子f:

      f = 0.5*sqrt(2/N)
      
  • 举例

    对于实数,偶对称的输入,类型1的DCT等效于FFT(尽管更快)。 输出也是实数,甚至是对称的。 一半的FFT输入用于生成一半的FFT输出:

    >>> from scipy.fftpack 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.])
    
  • 5
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值