本文主要是将先前的博客 离散傅里叶变换DFT、离散余弦变换DCT、离散正弦变换DST,原理与公式推导 从图片修改为 Markdown 脚本,方便读者浏览,同时增加了部分内容。但由于文章字符过多,无法全部放在一篇博客上,所以将之前的文章拆分为三部分,可通过以下链接查看其它部分。

  • 理解DCT与DST【一】:离散傅里叶变换
  • 理解DCT与DST【三】:离散正弦变换

2 离散余弦变换(Discrete Cosine Transform, DCT)

由 1.5.5 节内容可知,对于有限长对称实序列,其 DFT 序列同样是有限长对称实序列。更重要的是,有限长对称实序列的 DFT 的计算只需要用到序列的一半采样点数据,而且可以转化为只涉及余弦函数的实数运算,简化了 DFT 的计算,这就是离散余弦变换的出发点。

实际上,离散余弦变换对应着非对称有限长实序列的对称延拓序列的离散傅里叶变换的非冗余部分,不同的延拓方式对应着不同的延拓序列长度以及不同的离散傅里叶变换系数,因此也就对应着不同的离散余弦变换系数。根据 1.5.6 节的分析,离散傅里叶变换系数中的非冗余部分即独立分量的个数与原序列中的独立分量个数是一致的,因此离散余弦变换系数的个数也就对应着延拓序列中独立分量的个数。

数学上离散余弦变换总共定义了 8 种形式,对应着 8 种有限长非对称实序列的对称延拓方式,分别用 DCT-I ~ DCT-VIII 来表示。在 H.266 视频编解码标准中,主要用到了 DCT-II 和 DCT-VIII,下面主要对这两种 DCT 进行推导和分析,其他类型的 DCT 只给出相应的延拓方式和对应的公式定义。

作为示例,假设有长度 N=3N=3N=3 的有限长非对称实序列 x[n]:4,1,3;n=0,1,2x[n]:{\text{ }}4,{\text{ }}1,{\text{ }}3;{\text{ }}n = 0,1,2x[n]: 4, 1, 3; n=0,1,2,如图 2-1 所示,后面的分析都将基于该序列进行展开。

图 2-1 原始有限长实序列

2.1 DCT-II

图 2-1 所示的有限长非对称实序列 x[n]x[n]x[n] 的 DCT-II 对称及周期延拓如图 2-2(a) 所示。由于序列右移了 1/2,所有采样点都处于非整数索引位置,而离散序列在计算机内都是以整数索引存储的,因此需要对该序列进行 2 倍的插零上采样,得到离散序列如图 2-2(b) 所示。准确来说,延拓序列的公式化定义如式(2-1)所示,其中波浪线代表相应有限长序列的周期延拓,非整数索引位置默认为 0。

y~[m+4kN]=x~[∣m∣−12],m=−2N,−2N+1,...,2N−1.(2-1)\tilde y[m + 4kN] = \tilde x\left[ {\frac{{|m| - 1}}{2}} \right],{\text{ }}m = - 2N, - 2N + 1,...,2N - 1. \tag{2-1}y~​[m+4kN]=x~[2∣m∣−1​], m=−2N,−2N+1,...,2N−1.(2-1)

那么有限长对称实序列 y[m]y[m]y[m] 的长度为 4N4N4N,而独立分量只有 NNN 个,可以预见对应 DFT 的独立分量也只有 NNN 个。

图 2-2 DCT-II 延拓(a)及其插零上采样(b)
图 2-3 DCT-II 延拓序列的 DFT 序列

根据前面的内容,可以得到 y[m]y[m]y[m] 的 4N4N4N 点 DFT 为

Y~[l]=∑m=−2N2N−1y~[m]e−j2πlm4N=∑m=12N−1y[m][e−jπlm2N+ejπlm2N]=2∑m=02N−1y[m]cos⁡[πlm2N]=2∑n=0N−1x[n]cos⁡[πl(2n+1)2N](2-2)\begin{aligned} \tilde Y[l] &= \sum\limits_{m = - 2N}^{2N - 1} {\tilde y[m]{e^{ - j\frac{{2\pi lm}}{{4N}}}}} = \sum\limits_{m = 1}^{2N - 1} {y[m]\left[ {{e^{ - j\frac{{\pi lm}}{{2N}}}} + {e^{j\frac{{\pi lm}}{{2N}}}}} \right]} \\ &= 2\sum\limits_{m = 0}^{2N - 1} {y[m]\cos \left[ {\frac{{\pi lm}}{{2N}}} \right]} = 2\sum\limits_{n = 0}^{N - 1} {x[n]\cos \left[ {\frac{{\pi l\left( {2n + 1} \right)}}{{2N}}} \right]} \\ \end{aligned} \tag{2-2}Y~[l]​=m=−2N∑2N−1​y~​[m]e−j4N2πlm​=m=1∑2N−1​y[m][e−j2Nπlm​+ej2Nπlm​]=2m=0∑2N−1​y[m]cos[2Nπlm​]=2n=0∑N−1​x[n]cos[2Nπl(2n+1)​]​(2-2)

进一步,我们可以得到以下性质,

Y~[l+2N]=2∑n=0N−1x[n]cos⁡[π(l+2N)(2n+1)2N]=2∑n=0N−1x[n]cos⁡[πl(2n+1)2N+π(2n+1)]=−2∑n=0N−1x[n]cos⁡[πl(2n+1)2N]=−Y~[l](2-3)\begin{aligned} \tilde Y[l + 2N] &= 2\sum\limits_{n = 0}^{N - 1} {x[n]\cos \left[ {\frac{{\pi \left( {l + 2N} \right)\left( {2n + 1} \right)}}{{2N}}} \right]} \\ &= 2\sum\limits_{n = 0}^{N - 1} {x[n]\cos \left[ {\frac{{\pi l\left( {2n + 1} \right)}}{{2N}} + \pi \left( {2n + 1} \right)} \right]} \\ &= - 2\sum\limits_{n = 0}^{N - 1} {x[n]\cos \left[ {\frac{{\pi l\left( {2n + 1} \right)}}{{2N}}} \right]} = - \tilde Y[l] \\ \end{aligned} \tag{2-3}Y~[l+2N]​=2n=0∑N−1​x[n]cos[2Nπ(l+2N)(2n+1)​]=2n=0∑N−1​x[n]cos[2Nπl(2n+1)​+π(2n+1)]=−2n=0∑N−1​x[n]cos[2Nπl(2n+1)​]=−Y~[l]​(2-3)

Y~[l]=Y~[−l]Y~[2N−l]=Y~[l−2N]=Y~[l+2N]=−Y~[l]Y~[N]=Y~[2N−N]=−Y~[N]⇒Y~[N]=0(2-4)\begin{gathered} \tilde Y[l] = \tilde Y[ - l] \\ \tilde Y[2N - l] = \tilde Y[l - 2N] = \tilde Y[l + 2N] = - \tilde Y[l] \\ \tilde Y[N] = \tilde Y[2N - N] = - \tilde Y[N] \Rightarrow \tilde Y[N] = 0 \\ \end{gathered} \tag{2-4}Y~[l]=Y~[−l]Y~[2N−l]=Y~[l−2N]=Y~[l+2N]=−Y~[l]Y~[N]=Y~[2N−N]=−Y~[N]⇒Y~[N]=0​(2-4)

因此,有限长对称实序列 y[m]y[m]y[m] 的4N4N4N 点 DFT 中的独立分量确实只有 NNN 个。作为示例,图 2-2(b) 中定义的延拓序列的 DFT 如图 2-3 所示。根据以上性质,可以得到其逆变换为

y[m]=14N∑l=04N−1Y[l]ej2πlm4N=14N∑l=02N−1Y[l][ej2πlm4N−ej2π(2N+l)m4N]=14N[1−(−1)m]⋅∑l=02N−1Y[l]ejπlm2N=14N[1−(−1)m]⋅{∑l=1N−1Y[l][ejπlm2N−ejπ(2N−l)m2N]+Y[0]}=14N[1−(−1)m]⋅{∑l=1N−1Y[l][ejπlm2N−(−1)me−jπlm2N]+Y[0]}=14N[1−(−1)m]⋅[∑l=1N−1Y[l](ejπlm2N+e−jπlm2N)+Y[0]]=12N[1−(−1)m]⋅∑l=0N−1εlY[l]cos⁡(πlm2N)(2-5)\begin{aligned} y[m] &= \frac{1}{{4N}}\sum\limits_{l = 0}^{4N - 1} {Y[l]{e^{j\frac{{2\pi lm}}{{4N}}}}} = \frac{1}{{4N}}\sum\limits_{l = 0}^{2N - 1} {Y[l]\left[ {{e^{j\frac{{2\pi lm}}{{4N}}}} - {e^{j\frac{{2\pi \left( {2N + l} \right)m}}{{4N}}}}} \right]} \\ &= \frac{1}{{4N}}\left[ {1 - {{\left( { - 1} \right)}^m}} \right] \cdot \sum\limits_{l = 0}^{2N - 1} {Y[l]{e^{j\frac{{\pi lm}}{{2N}}}}} \\ &= \frac{1}{{4N}}\left[ {1 - {{\left( { - 1} \right)}^m}} \right] \cdot \left\{ {\sum\limits_{l = 1}^{N - 1} {Y[l]\left[ {{e^{j\frac{{\pi lm}}{{2N}}}} - {e^{j\frac{{\pi \left( {2N - l} \right)m}}{{2N}}}}} \right] + Y[0]} } \right\} \\ &= \frac{1}{{4N}}\left[ {1 - {{\left( { - 1} \right)}^m}} \right] \cdot \left\{ {\sum\limits_{l = 1}^{N - 1} {Y[l]\left[ {{e^{j\frac{{\pi lm}}{{2N}}}} - {{\left( { - 1} \right)}^m}{e^{ - j\frac{{\pi lm}}{{2N}}}}} \right] + Y[0]} } \right\} \\ &= \frac{1}{{4N}}\left[ {1 - {{\left( { - 1} \right)}^m}} \right] \cdot \left[ {\sum\limits_{l = 1}^{N - 1} {Y[l]\left( {{e^{j\frac{{\pi lm}}{{2N}}}} + {e^{ - j\frac{{\pi lm}}{{2N}}}}} \right) + Y[0]} } \right] \\ &= \frac{1}{{2N}}\left[ {1 - {{\left( { - 1} \right)}^m}} \right] \cdot \sum\limits_{l = 0}^{N - 1} {{\varepsilon _l}Y[l]\cos \left( {\frac{{\pi lm}}{{2N}}} \right)} \\ \end{aligned} \tag{2-5}y[m]​=4N1​l=0∑4N−1​Y[l]ej4N2πlm​=4N1​l=0∑2N−1​Y[l][ej4N2πlm​−ej4N2π(2N+l)m​]=4N1​[1−(−1)m]⋅l=0∑2N−1​Y[l]ej2Nπlm​=4N1​[1−(−1)m]⋅{l=1∑N−1​Y[l][ej2Nπlm​−ej2Nπ(2N−l)m​]+Y[0]}=4N1​[1−(−1)m]⋅{l=1∑N−1​Y[l][ej2Nπlm​−(−1)me−j2Nπlm​]+Y[0]}=4N1​[1−(−1)m]⋅[l=1∑N−1​Y[l](ej2Nπlm​+e−j2Nπlm​)+Y[0]]=2N1​[1−(−1)m]⋅l=0∑N−1​εl​Y[l]cos(2Nπlm​)​(2-5)

其中

εl={12,l=01,l≠0.{\varepsilon _l} = \left\{ {\begin{array}{c} {\frac{1}{2},}&{l = 0} \\ {1,}&{l \ne 0} \end{array}} \right..εl​={21​,1,​l=0l=0​.

由此,定义 DCT-II 的计算公式如下,

X[k]=DCT2[x[n]]=Y[k]=2∑n=0N−1x[n]cos⁡[πk(2n+1)2N]x[n]=IDCT2[X[k]]=y[2n+1]=1N∑k=0N−1εkX[k]cos⁡[πk(2n+1)2N]wheren,k=0,1,...,N−1(2-6)\begin{gathered} X[k] = DC{T_2}\left[ {x[n]} \right] = Y[k] = 2\sum\limits_{n = 0}^{N - 1} {x[n]\cos \left[ {\frac{{\pi k\left( {2n + 1} \right)}}{{2N}}} \right]} \\ x[n] = IDC{T_2}\left[ {X[k]} \right] = y[2n + 1] = \frac{1}{N}\sum\limits_{k = 0}^{N - 1} {{\varepsilon _k}X[k]\cos \left[ {\frac{{\pi k\left( {2n + 1} \right)}}{{2N}}} \right]} \\ where{\text{ }}n,k = 0,1,...,N - 1 \\ \end{gathered} \tag{2-6}X[k]=DCT2​[x[n]]=Y[k]=2n=0∑N−1​x[n]cos[2Nπk(2n+1)​]x[n]=IDCT2​[X[k]]=y[2n+1]=N1​k=0∑N−1​εk​X[k]cos[2Nπk(2n+1)​]where n,k=0,1,...,N−1​(2-6)

可以看到,DCT-II 与由式(2-1)所定义延拓序列的 DFT 是对应的,但只包含了部分分量。为了公式的一致性,将式(2-6)的系数平均分配到两边,则有

X[k]=DCT2[x[n]]=2Nεk∑n=0N−1x[n]cos⁡[πk(2n+1)2N]x[n]=IDCT2[X[k]]=2Nεk∑k=0N−1X[k]cos⁡[πk(2n+1)2N]wheren,k=0,1,...,N−1(2-7)\begin{gathered} X[k] = DC{T_2}\left[ {x[n]} \right] = \sqrt {\frac{2}{N}} {\varepsilon _k}\sum\limits_{n = 0}^{N - 1} {x[n]\cos \left[ {\frac{{\pi k\left( {2n + 1} \right)}}{{2N}}} \right]} \\ x[n] = IDC{T_2}\left[ {X[k]} \right] = \sqrt {\frac{2}{N}} {\varepsilon _k}\sum\limits_{k = 0}^{N - 1} {X[k]\cos \left[ {\frac{{\pi k\left( {2n + 1} \right)}}{{2N}}} \right]} \\ where{\text{ }}n,k = 0,1,...,N - 1 \\ \end{gathered} \tag{2-7}X[k]=DCT2​[x[n]]=N2​​εk​n=0∑N−1​x[n]cos[2Nπk(2n+1)​]x[n]=IDCT2​[X[k]]=N2​​εk​k=0∑N−1​X[k]cos[2Nπk(2n+1)​]where n,k=0,1,...,N−1​(2-7)

逆变换这里 εk{\varepsilon _k}εk​ 写在了求和符号前面,主要是为了表达与正变换公式的一致性,严谨的话应该放在求和符号里面。注意此时

εk={12,k=01,k≠0.{\varepsilon _k} = \left\{ {\begin{array}{c} {\frac{1}{{\sqrt 2 }},}&{k = 0} \\ {1,}&{k \ne 0} \end{array}} \right.. εk​={2​1​,1,​k=0k=0​.

写成矩阵形式,则有

X=Ax,x=ATX⇒X=AATX⇒AAT=I⇒AT=A−1A∈RN×N,Akn=2Nεkcos⁡[πk(2n+1)2N](2-8)\begin{gathered} {\mathbf{X}} = {\mathbf{Ax}},{\mathbf{x}} = {{\mathbf{A}}^T}{\mathbf{X}} \Rightarrow {\mathbf{X}} = {\mathbf{A}}{{\mathbf{A}}^T}{\mathbf{X}} \Rightarrow {\mathbf{A}}{{\mathbf{A}}^T} = {\mathbf{I}} \Rightarrow {{\mathbf{A}}^T} = {{\mathbf{A}}^{ - 1}} \\ {\mathbf{A}} \in {\mathbb{R}^{N \times N}},{\text{ }}{A_{kn}} = \sqrt {\frac{2}{N}} {\varepsilon _k}\cos \left[ {\frac{{\pi k\left( {2n + 1} \right)}}{{2N}}} \right] \\ \end{gathered} \tag{2-8}X=Ax,x=ATX⇒X=AATX⇒AAT=I⇒AT=A−1A∈RN×N, Akn​=N2​​εk​cos[2Nπk(2n+1)​]​(2-8)

这意味着变换矩阵 A\mathbf{A}A 是正交矩阵,也就是说式(2-7)定义的离散余弦变换与逆变换属于正交变换。那么,矩阵 A\mathbf{A}A 的每一行或者每一列都是线性无关的,时域或空域的离散信号序列 x\mathbf{x}x 可以表示为矩阵 A\mathbf{A}A 行向量的转置 an\mathbf{a}_nan​ 关于离线余弦变换系数 X[k]X[k]X[k] 的线性组合,如式(2-9)所示,这些向量 an\mathbf{a}_nan​ 组成了一个规范正交基,每个基向量代表着信号不同的变化频率,例如 k=0k=0k=0 时代表了直流分量,kkk 越大,信号变化的频率越快,这时称为交流分量,这与傅里叶变换的分析是类似的。

ak=[Ak0Ak1⋯Ak(N−1)]Tx=ATX=[a0a1⋯aN−1][X0X0⋮XN−1]=X0a0+X1a1+⋯+XN−1aN−1(2-9)\begin{gathered} {{\mathbf{a}}_k} = {\left[ {\begin{array}{c} {{A_{k0}}}&{{A_{k1}}}& \cdots &{{A_{k\left( {N - 1} \right)}}} \end{array}} \right]^T} \\ {\mathbf{x}} = {{\mathbf{A}}^T}{\mathbf{X}} = \left[ {\begin{array}{c} {{{\mathbf{a}}_0}}&{{{\mathbf{a}}_1}}& \cdots &{{{\mathbf{a}}_{N - 1}}} \end{array}} \right]\left[ {\begin{array}{c} {{X_0}} \\ {{X_0}} \\ \vdots \\ {{X_{N - 1}}} \end{array}} \right] = {X_0}{{\mathbf{a}}_0} + {X_1}{{\mathbf{a}}_1} + \cdots + {X_{N - 1}}{{\mathbf{a}}_{N - 1}} \\ \end{gathered} \tag{2-9}ak​=[Ak0​​Ak1​​⋯​Ak(N−1)​​]Tx=ATX=[a0​​a1​​⋯​aN−1​​]⎣⎡​X0​X0​⋮XN−1​​⎦⎤​=X0​a0​+X1​a1​+⋯+XN−1​aN−1​​(2-9)

拓展到二维信号例如常见的图像信号,在 1.7 节我们证明了二维离散傅里叶变换是可分离的,因此容易证明二维离散余弦变换同样是可分离的,这里不赘述。假设有宽高为 M×NM \times NM×N 的二维信号 x[m,n]x[m,n]x[m,n],令 P\mathbf{P}P,Q\mathbf{Q}Q 分别为大小为 M×MM \times MM×M 和 N×NN \times NN×N 的变换矩阵,由 1.7 节内容及前面的分析知,

X=(P(Qx)T)T=QxPT⇒x=QTQxPTP=QTXPx=[q0q1⋯qN−1]X[p0Tp1T⋮pM−1T]=∑m=0M−1∑n=0N−1X[m,n]qnpmTwhereP∈RM×M,Q∈RN×N(2-10)\begin{gathered} {\mathbf{X}} = {\left( {{\mathbf{P}}{{\left( {{\mathbf{Qx}}} \right)}^T}} \right)^T} = {\mathbf{Qx}}{{\mathbf{P}}^T} \Rightarrow {\mathbf{x}} = {{\mathbf{Q}}^T}{\mathbf{Qx}}{{\mathbf{P}}^T}{\mathbf{P}} = {{\mathbf{Q}}^T}{\mathbf{XP}} \\ {\mathbf{x}} = \left[ {\begin{array}{c} {{{\mathbf{q}}_{\mathbf{0}}}}&{{{\mathbf{q}}_1}}& \cdots &{{{\mathbf{q}}_{N - 1}}} \end{array}} \right]{\mathbf{X}}\left[ {\begin{array}{c} {{\mathbf{p}}_0^T} \\ {{\mathbf{p}}_1^T} \\ \vdots \\ {{\mathbf{p}}_{M - 1}^T} \end{array}} \right] = \sum\limits_{m = 0}^{M - 1} {\sum\limits_{n = 0}^{N - 1} {X[m,n]{{\mathbf{q}}_n}{\mathbf{p}}_m^T} } \\ where{\text{ }}{\mathbf{P}} \in {\mathbb{R}^{M \times M}},{\text{ }}{\mathbf{Q}} \in {\mathbb{R}^{N \times N}} \\ \end{gathered} \tag{2-10}X=(P(Qx)T)T=QxPT⇒x=QTQxPTP=QTXPx=[q0​​q1​​⋯​qN−1​​]X⎣⎡​p0T​p1T​⋮pM−1T​​⎦⎤​=m=0∑M−1​n=0∑N−1​X[m,n]qn​pmT​where P∈RM×M, Q∈RN×N​(2-10)

这时,我们将每个大小 N×MN \times MN×M 的 qnpmT{{\mathbf{q}}_n}{\mathbf{p}}_m^Tqn​pmT​ 矩阵称为二维离散余弦变换的基图像,其中 pm{{\mathbf{p}}_m}pm​ 和 qn{{\mathbf{q}}_n}qn​ 分别反映了信号水平和垂直的变化频率。那么二维信号 x\mathbf{x}x 可以表示为这些基图像的线性组合,其权值即为离散余弦变换的系数。而离散余弦变换的各个系数是通过基图像与信号之间的內积求得的,因此刚好又代表了信号与各个基图像之间的相关性或者相似度,即信号与某个基图像越相似,则该基图像对应的离散余弦变换系数就会越大,反之则越小。因此,离散余弦变换是否能把信号的信息尽量压缩到少数几个系数上,关键在于是否能通过少数几个基图像的线性组合来尽可能准确地还原原始的信号。

图 2-4 展示了 8×88×88×8 的二维 DCT-II 的 64 个基图像。可以看到,左上角的基图像代表了信号的直流分量,此时信号在空间上没有任何变化;而在最上边一行(最左边的一列),其反映了信号在水平(垂直)方向上强度周期变化的特点,且越往右(下)边,信号变化的频率越来越高,从而组成了从宽粗到窄细、从稀疏到密集的各种垂直(水平)线条,而这种模式(pattern)刚好与图像中的纹理细节十分的相像;而在右下角,信号变化的频率越来越高,基图像也越来越表现得像马赛克,相邻像素之间的相关性也越来越低,这种模式又十分符合同分布随机噪声(比如高斯白噪声)的分布特性。因为我们一般关注的是图像的整体亮度以及细节纹理,这恰好使得图像的信息能够大致通过图 2-4 中左上角少数几个基图像的线性组合来表示,所以图 2-4 所代表的 DCT-II 也被广泛应用于图像视频压缩以及降噪当中。但要注意,不同类型的 DCT 由于变换公式不一样,它们所产生的基图像也各不相同,并不是所有类型的 DCT 都能产生如图 2-4 中这种比较规则变化的图形,因此也不是所有类型的 DCT 都能与 DCT-II 相提并论。但相比于 DCT-II,在某些应用场景中,某些 DCT 以及后面会讲述的 DST 类型也会产生一些比 DCT-II 更加符合信号分布的基图像组合。比如在 H.266 中,DCT-VIII 和 DST-VII 在某些情况下相比于 DCT-II 可获得更优的残差变换压缩性能。在文章的末尾,我会给出各种 DCT 类型的基图像给大家作为参考。

根据图 2-4 可以知道,对于水平方向缓慢变化的信号,其 DCT 系数将主要集中在左边垂直方向;而对于垂直方向缓慢变化的信号,其 DCT 系数将主要集中在上边水平方向。在基于预测的图像编码中,例如 H.266,不同的角度预测模式会产生不同的残差分布。例如对于水平预测,水平方向的残差通常会呈现从左到右基本相同或者逐渐逐渐增大的特性,而垂直方向由于各行彼此参考的像素各不相关,从而表现出随机变化的特性,因此对残差进行离散余弦变换后,其 DCT 系数通常会集中在左侧的少数几列,这时配合垂直方向的系数扫描,可以使得系数更加集中,利于后续的熵编码操作。同理,对于其他的预测模式,我们也可以相应采用 Zigzag 扫描或者水平扫描,从而获得更好的压缩特性。

图 2-4 8×8 大小的 DCT-II 基图像

2.2 DCT-VIII

图 2-1 所示的有限长非对称实序列 x[n]x[n]x[n] 的 DCT-VIII 对称及周期延拓如图 2-5(a) 所示。类似于 DCT-II 延拓,由于序列右移了 1/2,所有采样点都处于非整数索引位置,而离散序列在计算机内都是以整数索引存储的,因此需要对该序列进行 2 倍的插零上采样,得到离散序列如图 2-5(b) 所示。准确来说,延拓序列的公式化定义如式(2-11)所示,其中波浪线代表相应有限长序列的周期延拓,非整数索引位置默认为 0。

y~[m+k(8N+4)]={x~[∣m∣−12],∣m∣⩽2N0,∣m∣=2N+1−x~[4N+1−∣m∣2],∣m∣⩾2N+2wherem=−4N−2,−4N−1,...,4N+1.(2-11)\begin{gathered} \tilde y\left[ {m + k\left( {8N + 4} \right)} \right] = \left\{ {\begin{array}{l} {\tilde x\left[ {\frac{{\left| m \right| - 1}}{2}} \right],}&{\left| m \right| \leqslant 2N} \\ {0,}&{\left| m \right| = 2N + 1} \\ { - \tilde x\left[ {\frac{{4N + 1 - \left| m \right|}}{2}} \right],}&{\left| m \right| \geqslant 2N + 2} \end{array}} \right. \\ where{\text{ }}m = - 4N - 2, - 4N - 1,...,4N + 1. \\ \end{gathered} \tag{2-11}y~​[m+k(8N+4)]=⎩⎨⎧​x~[2∣m∣−1​],0,−x~[24N+1−∣m∣​],​∣m∣⩽2N∣m∣=2N+1∣m∣⩾2N+2​where m=−4N−2,−4N−1,...,4N+1.​(2-11)

图 2-5 DCT-VIII 延拓(a)及其插零上采样(b)
图 2-6 DCT-VIII 延拓序列的 DFT 序列

那么,有限长对称实序列 y[m]y[m]y[m] 的长度为 8N+48N+48N+4,而独立分量只有 NNN 个,因此可以预见其 DFT 的独立分量也只有 NNN 个。根据前面的内容可得,

Y~[l]=∑m=−4N−24N+1y~[m]e−j2πlm8N+4=∑m=14N+1y[m](e−jπlm4N+2+ejπlm4N+2)=2∑m=14N+1y[m]cos⁡(πlm4N+2)=2∑n=0N−1x[n]cos⁡[πl(2n+1)4N+2]−2∑n=0N−1x[n]cos⁡[πl(4N+2−2n−1)4N+2]=2∑n=0N−1x[n]cos⁡[πl(2n+1)4N+2]−2∑n=0N−1x[n]cos⁡[πl−πl(2n+1)4N+2]=2[1−(−1)l]⋅∑n=0N−1x[n]cos⁡[πl(2n+1)4N+2](2-12)\begin{aligned} \tilde Y[l] &= \sum\limits_{m = - 4N - 2}^{4N + 1} {\tilde y[m]{e^{ - j\frac{{2\pi lm}}{{8N + 4}}}}} \\ &= \sum\limits_{m = 1}^{4N + 1} {y[m]\left( {{e^{ - j\frac{{\pi lm}}{{4N + 2}}}} + {e^{j\frac{{\pi lm}}{{4N + 2}}}}} \right)} \\ &= 2\sum\limits_{m = 1}^{4N + 1} {y[m]\cos \left( {\frac{{\pi lm}}{{4N + 2}}} \right)} \\ &= 2\sum\limits_{n = 0}^{N - 1} {x[n]\cos \left[ {\frac{{\pi l\left( {2n + 1} \right)}}{{4N + 2}}} \right]} - 2\sum\limits_{n = 0}^{N - 1} {x[n]\cos \left[ {\frac{{\pi l\left( {4N + 2 - 2n - 1} \right)}}{{4N + 2}}} \right]} \\ &= 2\sum\limits_{n = 0}^{N - 1} {x[n]\cos \left[ {\frac{{\pi l\left( {2n + 1} \right)}}{{4N + 2}}} \right]} - 2\sum\limits_{n = 0}^{N - 1} {x[n]\cos \left[ {\pi l - \frac{{\pi l\left( {2n + 1} \right)}}{{4N + 2}}} \right]} \\ &= 2\left[ {1 - {{\left( { - 1} \right)}^l}} \right] \cdot \sum\limits_{n = 0}^{N - 1} {x[n]\cos \left[ {\frac{{\pi l\left( {2n + 1} \right)}}{{4N + 2}}} \right]} \\ \end{aligned} \tag{2-12}Y~[l]​=m=−4N−2∑4N+1​y~​[m]e−j8N+42πlm​=m=1∑4N+1​y[m](e−j4N+2πlm​+ej4N+2πlm​)=2m=1∑4N+1​y[m]cos(4N+2πlm​)=2n=0∑N−1​x[n]cos[4N+2πl(2n+1)​]−2n=0∑N−1​x[n]cos[4N+2πl(4N+2−2n−1)​]=2n=0∑N−1​x[n]cos[4N+2πl(2n+1)​]−2n=0∑N−1​x[n]cos[πl−4N+2πl(2n+1)​]=2[1−(−1)l]⋅n=0∑N−1​x[n]cos[4N+2πl(2n+1)​]​(2-12)

因此,我们可以得到以下性质,

Y~[2l]=0,Y~[l]=Y~[−l]Y~[l+4N+2]=−Y~[l]Y~[4N+2−l]=Y~[l−4N−2+8N+4]=Y~[l+4N+2]=−Y[l]Y~[2N+1]=−Y~[4N+2−2N−1]=−Y~[2N+1]=0(2-13)\begin{gathered} \tilde Y[2l] = 0,{\text{ }}\tilde Y[l] = \tilde Y[ - l] \\ \tilde Y[l + 4N + 2] = - \tilde Y[l] \\ \tilde Y[4N + 2 - l] = \tilde Y[l - 4N - 2 + 8N + 4] = \tilde Y[l + 4N + 2] = - Y[l] \\ \tilde Y[2N + 1] = - \tilde Y[4N + 2 - 2N - 1] = - \tilde Y[2N + 1] = 0 \\ \end{gathered} \tag{2-13}Y~[2l]=0, Y~[l]=Y~[−l]Y~[l+4N+2]=−Y~[l]Y~[4N+2−l]=Y~[l−4N−2+8N+4]=Y~[l+4N+2]=−Y[l]Y~[2N+1]=−Y~[4N+2−2N−1]=−Y~[2N+1]=0​(2-13)

所以,有限长对称实序列 y[m]y[m]y[m] 的 8N+48N+48N+4 点 DFT 中的独立分量确实只有 NNN 个。作为示例,图 2-5(b) 中定义的延拓序列的 DFT 如图 2-6 所示。根据以上性质,可以得到其逆变换为

y[m]=18N+4∑l=08N+3Y[l]ej2πlm8N+4=18N+4∑l=04N+1Y[l][ej2πlm8N+4−ej2π(4N+2+l)m8N+4]=18N+4[1−(−1)m]⋅∑l=04N+1Y[l]ejπlm4N+2=18N+4[1−(−1)m]⋅∑l=0N−1Y[2l+1][ejπ(2l+1)m4N+2−ejπ(4N+2−2l−1)m4N+2]=18N+4[1−(−1)m]⋅∑l=0N−1Y[2l+1][ejπ(2l+1)m4N+2+e−jπ(2l+1)m4N+2]=14N+2[1−(−1)m]⋅∑l=0N−1Y[2l+1]cos⁡[π(2l+1)m4N+2](2-14)\begin{aligned} y[m] &= \frac{1}{{8N + 4}}\sum\limits_{l = 0}^{8N + 3} {Y[l]{e^{j\frac{{2\pi lm}}{{8N + 4}}}}} \\ &= \frac{1}{{8N + 4}}\sum\limits_{l = 0}^{4N + 1} {Y[l]\left[ {{e^{j\frac{{2\pi lm}}{{8N + 4}}}} - {e^{j\frac{{2\pi \left( {4N + 2 + l} \right)m}}{{8N + 4}}}}} \right]} \\ &= \frac{1}{{8N + 4}}\left[ {1 - {{\left( { - 1} \right)}^m}} \right] \cdot \sum\limits_{l = 0}^{4N + 1} {Y[l]{e^{j\frac{{\pi lm}}{{4N + 2}}}}} \\ &= \frac{1}{{8N + 4}}\left[ {1 - {{\left( { - 1} \right)}^m}} \right] \cdot \sum\limits_{l = 0}^{N - 1} {Y[2l + 1]\left[ {{e^{j\frac{{\pi \left( {2l + 1} \right)m}}{{4N + 2}}}} - {e^{j\frac{{\pi \left( {4N + 2 - 2l - 1} \right)m}}{{4N + 2}}}}} \right]} \\ &= \frac{1}{{8N + 4}}\left[ {1 - {{\left( { - 1} \right)}^m}} \right] \cdot \sum\limits_{l = 0}^{N - 1} {Y[2l + 1]\left[ {{e^{j\frac{{\pi \left( {2l + 1} \right)m}}{{4N + 2}}}} + {e^{ - j\frac{{\pi \left( {2l + 1} \right)m}}{{4N + 2}}}}} \right]} \\ &= \frac{1}{{4N + 2}}\left[ {1 - {{\left( { - 1} \right)}^m}} \right] \cdot \sum\limits_{l = 0}^{N - 1} {Y[2l + 1]\cos \left[ {\frac{{\pi \left( {2l + 1} \right)m}}{{4N + 2}}} \right]} \\ \end{aligned} \tag{2-14}y[m]​=8N+41​l=0∑8N+3​Y[l]ej8N+42πlm​=8N+41​l=0∑4N+1​Y[l][ej8N+42πlm​−ej8N+42π(4N+2+l)m​]=8N+41​[1−(−1)m]⋅l=0∑4N+1​Y[l]ej4N+2πlm​=8N+41​[1−(−1)m]⋅l=0∑N−1​Y[2l+1][ej4N+2π(2l+1)m​−ej4N+2π(4N+2−2l−1)m​]=8N+41​[1−(−1)m]⋅l=0∑N−1​Y[2l+1][ej4N+2π(2l+1)m​+e−j4N+2π(2l+1)m​]=4N+21​[1−(−1)m]⋅l=0∑N−1​Y[2l+1]cos[4N+2π(2l+1)m​]​(2-14)

由此,定义 DCT-VIII 的计算公式如下,

X[k]=DCT8[x[n]]=4∑n=0N−1x[n]cos⁡[π(2k+1)(2n+1)4N+2]x[n]=IDCT8[X[k]]=12N+1∑k=0N−1X[k]cos⁡[π(2k+1)(2n+1)4N+2]wheren,k=0,1,...,N−1.(2-15)\begin{gathered} X[k] = DC{T_8}\left[ {x[n]} \right] = 4\sum\limits_{n = 0}^{N - 1} {x[n]\cos \left[ {\frac{{\pi \left( {2k + 1} \right)\left( {2n + 1} \right)}}{{4N + 2}}} \right]} \\ x[n] = IDC{T_8}\left[ {X[k]} \right] = \frac{1}{{2N + 1}}\sum\limits_{k = 0}^{N - 1} {X[k]\cos \left[ {\frac{{\pi \left( {2k + 1} \right)\left( {2n + 1} \right)}}{{4N + 2}}} \right]} \\ where{\text{ }}n,k = 0,1,...,N - 1. \\ \end{gathered} \tag{2-15}X[k]=DCT8​[x[n]]=4n=0∑N−1​x[n]cos[4N+2π(2k+1)(2n+1)​]x[n]=IDCT8​[X[k]]=2N+11​k=0∑N−1​X[k]cos[4N+2π(2k+1)(2n+1)​]where n,k=0,1,...,N−1.​(2-15)

为了公式的一致性,将式(2-15)的系数平均分配到两边,则有

X[k]=DCT8[x[n]]=22N+1∑n=0N−1x[n]cos⁡[π(2k+1)(2n+1)4N+2]x[n]=IDCT8[X[k]]=22N+1∑k=0N−1X[k]cos⁡[π(2k+1)(2n+1)4N+2]wheren,k=0,1,...,N−1.(2-16)\begin{gathered} X[k] = DC{T_8}\left[ {x[n]} \right] = \frac{2}{{\sqrt {2N + 1} }}\sum\limits_{n = 0}^{N - 1} {x[n]\cos \left[ {\frac{{\pi \left( {2k + 1} \right)\left( {2n + 1} \right)}}{{4N + 2}}} \right]} \\ x[n] = IDC{T_8}\left[ {X[k]} \right] = \frac{2}{{\sqrt {2N + 1} }}\sum\limits_{k = 0}^{N - 1} {X[k]\cos \left[ {\frac{{\pi \left( {2k + 1} \right)\left( {2n + 1} \right)}}{{4N + 2}}} \right]} \\ where{\text{ }}n,k = 0,1,...,N - 1. \\ \end{gathered} \tag{2-16}X[k]=DCT8​[x[n]]=2N+1​2​n=0∑N−1​x[n]cos[4N+2π(2k+1)(2n+1)​]x[n]=IDCT8​[X[k]]=2N+1​2​k=0∑N−1​X[k]cos[4N+2π(2k+1)(2n+1)​]where n,k=0,1,...,N−1.​(2-16)

容易证明,类似于 DCT-II,式(2-16)所定义的离散余弦变换同样属于正交变换,在此不再赘述。

2.3 DCT-I

DCT-I 延拓的公式化表示如下,

y~[m+k(2N−2)]=x~[∣m∣],m=−N+1,−N+1,...,N−2.(2-17)\tilde y\left[ {m + k\left( {2N - 2} \right)} \right] = \tilde x\left[ {\left| m \right|} \right],{\text{ }}m = - N + 1, - N + 1,...,N - 2. \tag{2-17}y~​[m+k(2N−2)]=x~[∣m∣], m=−N+1,−N+1,...,N−2.(2-17)

作为示例,图 2-1 所定义的有限长非对称实序列的 DCT-I 对称及周期延拓如图 2-7 所示,其对应的离散傅里叶变换序列如图 2-8 所示。

图 2-7 DCT-I 延拓 图 2-8 DCT-I 延拓序列的 DFT 序列

容易得到 DCT-I 对应的离散余弦变换公式如下,

X[k]=DCT1[x[n]]=2N−1γkγn∑n=0N−1x[n]cos⁡(πknN−1)x[n]=IDCT1[X[k]]=2N−1γkγn∑k=0N−1X[k]cos⁡(πknN−1)wheren,k=0,1,...,N−1.(2-18)\begin{gathered} X[k] = DC{T_1}\left[ {x[n]} \right] = \sqrt {\frac{2}{{N - 1}}} {\gamma _k}{\gamma _n}\sum\limits_{n = 0}^{N - 1} {x[n]\cos \left( {\frac{{\pi kn}}{{N - 1}}} \right)} \\ x[n] = IDC{T_1}\left[ {X[k]} \right] = \sqrt {\frac{2}{{N - 1}}} {\gamma _k}{\gamma _n}\sum\limits_{k = 0}^{N - 1} {X[k]\cos \left( {\frac{{\pi kn}}{{N - 1}}} \right)} \\ where{\text{ }}n,k = 0,1,...,N - 1. \\ \end{gathered} \tag{2-18}X[k]=DCT1​[x[n]]=N−12​​γk​γn​n=0∑N−1​x[n]cos(N−1πkn​)x[n]=IDCT1​[X[k]]=N−12​​γk​γn​k=0∑N−1​X[k]cos(N−1πkn​)where n,k=0,1,...,N−1.​(2-18)

其中

γp={12,p=0orp=N−11,others.{\gamma _p} = \left\{ {\begin{array}{l} {\frac{1}{{\sqrt 2 }},}&{p = 0{\text{ }}or{\text{ }}p = N - 1} \\ {1,}&{others} \end{array}} \right..γp​={2​1​,1,​p=0 or p=N−1others​.

2.4 DCT-III

DCT-III 延拓的公式化表示如下,

y~[m+4kN]={x~[∣m∣],∣m∣⩽N−10,∣m∣=N−x~[2N−∣m∣],∣m∣⩾N+1wherem=−2N,−2N+1,...,2N−1.(2-19)\begin{gathered} \tilde y[m + 4kN] = \left\{ {\begin{array}{l} {\tilde x\left[ {\left| m \right|} \right],}&{\left| m \right| \leqslant N - 1} \\ {0,}&{\left| m \right| = N} \\ { - \tilde x\left[ {2N - \left| m \right|} \right],}&{\left| m \right| \geqslant N + 1} \end{array}} \right. \\ where{\text{ }}m = - 2N, - 2N + 1,...,2N - 1. \\ \end{gathered} \tag{2-19}y~​[m+4kN]=⎩⎨⎧​x~[∣m∣],0,−x~[2N−∣m∣],​∣m∣⩽N−1∣m∣=N∣m∣⩾N+1​where m=−2N,−2N+1,...,2N−1.​(2-19)

作为示例,图 2-1 所定义的有限长非对称实序列的 DCT-III 对称及周期延拓如图 2-9 所示,其对应的离散傅里叶变换序列如图 2-10 所示。

图 2-9 DCT-III 延拓 图 2-10 DCT-III 延拓序列的 DFT 序列

容易得到 DCT-III 对应的离散余弦变换公式如下,

X[k]=DCT3[x[n]]=2Nεn∑n=0N−1x[n]cos⁡[π(2k+1)n2N]x[n]=IDCT3[X[k]]=2Nεn∑k=0N−1X[k]cos⁡[π(2k+1)n2N]wheren,k=0,1,...,N−1.(2-20)\begin{gathered} X[k] = DC{T_3}\left[ {x[n]} \right] = \sqrt {\frac{2}{N}} {\varepsilon _n}\sum\limits_{n = 0}^{N - 1} {x[n]\cos \left[ {\frac{{\pi \left( {2k + 1} \right)n}}{{2N}}} \right]} \\ x[n] = IDC{T_3}\left[ {X[k]} \right] = \sqrt {\frac{2}{N}} {\varepsilon _n}\sum\limits_{k = 0}^{N - 1} {X[k]\cos \left[ {\frac{{\pi \left( {2k + 1} \right)n}}{{2N}}} \right]} \\ where{\text{ }}n,k = 0,1,...,N - 1. \\ \end{gathered} \tag{2-20}X[k]=DCT3​[x[n]]=N2​​εn​n=0∑N−1​x[n]cos[2Nπ(2k+1)n​]x[n]=IDCT3​[X[k]]=N2​​εn​k=0∑N−1​X[k]cos[2Nπ(2k+1)n​]where n,k=0,1,...,N−1.​(2-20)

其中

εn={12,n=01,n≠0{\varepsilon _n} = \left\{ {\begin{array}{l} {\frac{1}{{\sqrt 2 }},}&{n = 0} \\ {1,}&{n \ne 0} \end{array}} \right.εn​={2​1​,1,​n=0n=0​

2.5 DCT-IV

图 2-1 所示有限长非对称实序列 x[n]x[n]x[n] 的 DCT-IV 对称及周期延拓如图 2-11(a) 所示。由于序列右移了 1/2,所有采样点都处于非整数索引位置,因此需要对该序列进行 2 倍的插零上采样,得到离散序列如图 2-12(b) 所示。准确来说,延拓序列的公式化定义如式(2-21)所示,其中波浪线代表相应有限长序列的周期延拓,非整数索引位置默认为 0。

y~[m+8kN]={x~[∣m∣−12],∣m∣⩽2N−1−x~[4N−1−∣m∣2],∣m∣⩾2Nwherem=−4N,−4N+1,...,4N−1.(2-21)\begin{gathered} \tilde y\left[ {m + 8kN} \right] = \left\{ {\begin{array}{l} {\tilde x\left[ {\frac{{\left| m \right| - 1}}{2}} \right],}&{\left| m \right| \leqslant 2N - 1} \\ { - \tilde x\left[ {\frac{{4N - 1 - \left| m \right|}}{2}} \right],}&{\left| m \right| \geqslant 2N} \end{array}} \right. \\ where{\text{ }}m = - 4N, - 4N + 1,...,4N - 1. \\ \end{gathered} \tag{2-21}y~​[m+8kN]=⎩⎨⎧​x~[2∣m∣−1​],−x~[24N−1−∣m∣​],​∣m∣⩽2N−1∣m∣⩾2N​where m=−4N,−4N+1,...,4N−1.​(2-21)

图 2-11(b) 所示延拓序列的 DFT 序列如图 2-12 所示。

图 2-11 DCT-IV 延拓(a)及其插零上采样(b) 图 2-12 DCT-IV 延拓序列的 DFT 序列

容易可得 DCT-IV 对应的离散余弦变换公式如下,

X[k]=DCT4[x[n]]=2N∑n=0N−1x[n]cos⁡[π(2k+1)(2n+1)4N]x[n]=IDCT4[X[k]]=2N∑k=0N−1X[k]cos⁡[π(2k+1)(2n+1)4N]wheren,k=0,1,...,N−1(2-22)\begin{gathered} X[k] = DC{T_4}\left[ {x[n]} \right] = \sqrt {\frac{2}{N}} \sum\limits_{n = 0}^{N - 1} {x[n]\cos \left[ {\frac{{\pi \left( {2k + 1} \right)\left( {2n + 1} \right)}}{{4N}}} \right]} \\ x[n] = IDC{T_4}\left[ {X[k]} \right] = \sqrt {\frac{2}{N}} \sum\limits_{k = 0}^{N - 1} {X[k]\cos \left[ {\frac{{\pi \left( {2k + 1} \right)\left( {2n + 1} \right)}}{{4N}}} \right]} \\ where{\text{ }}n,k = 0,1,...,N - 1 \\ \end{gathered} \tag{2-22}X[k]=DCT4​[x[n]]=N2​​n=0∑N−1​x[n]cos[4Nπ(2k+1)(2n+1)​]x[n]=IDCT4​[X[k]]=N2​​k=0∑N−1​X[k]cos[4Nπ(2k+1)(2n+1)​]where n,k=0,1,...,N−1​(2-22)

2.6 DCT-V

DCT-V 延拓的公式化表示如下,

y~[m+k(2N−1)]=x~[∣m∣],m=−N+1,−N+2,...,N−1.(2-23)\tilde y\left[ {m + k\left( {2N - 1} \right)} \right] = \tilde x\left[ {\left| m \right|} \right],{\text{ }}m = - N + 1, - N + 2,...,N - 1. \tag{2-23}y~​[m+k(2N−1)]=x~[∣m∣], m=−N+1,−N+2,...,N−1.(2-23)

作为示例,图 2-1 所定义的有限长非对称实序列的 DCT-V 对称及周期延拓如图 2-13 所示,其对应的离散傅里叶变换序列如图 2-14 所示。

图 2-13 DCT-V 延拓 图 2-14 DCT-V 延拓序列的 DFT 序列

容易得到DCT-V对应的离散余弦变换公式如下,

X[k]=DCT5[x[n]]=22N−1εkεn∑n=0N−1x[n]cos⁡(2πkn2N−1)x[n]=IDCT5[X[k]]=22N−1εkεn∑k=0N−1X[k]cos⁡(2πkn2N−1)wheren,k=0,1,...,N−1.(2-24)\begin{gathered} X[k] = DC{T_5}\left[ {x[n]} \right] = \frac{2}{{\sqrt {2N - 1} }}{\varepsilon _k}{\varepsilon _n}\sum\limits_{n = 0}^{N - 1} {x[n]\cos \left( {\frac{{2\pi kn}}{{2N - 1}}} \right)} \\ x[n] = IDC{T_5}\left[ {X[k]} \right] = \frac{2}{{\sqrt {2N - 1} }}{\varepsilon _k}{\varepsilon _n}\sum\limits_{k = 0}^{N - 1} {X[k]\cos \left( {\frac{{2\pi kn}}{{2N - 1}}} \right)} \\ where{\text{ }}n,k = 0,1,...,N - 1. \\ \end{gathered} \tag{2-24}X[k]=DCT5​[x[n]]=2N−1​2​εk​εn​n=0∑N−1​x[n]cos(2N−12πkn​)x[n]=IDCT5​[X[k]]=2N−1​2​εk​εn​k=0∑N−1​X[k]cos(2N−12πkn​)where n,k=0,1,...,N−1.​(2-24)

其中

εp={12,p=01,p≠0.{\varepsilon _p} = \left\{ {\begin{array}{l} {\frac{1}{{\sqrt 2 }},}&{p = 0} \\ {1,}&{p \ne 0} \end{array}} \right..εp​={2​1​,1,​p=0p=0​.

2.7 DCT-VI

图 2-1 所示有限长非对称实序列 x[n]x[n]x[n] 的 DCT-VI 对称及周期延拓如图 2-15(a) 所示。由于序列右移了 1/2,所有采样点都处于非整数索引位置,因此需要对该序列进行 2 倍的插零上采样,得到离散序列如图 2-15(b) 所示。准确来说,延拓序列的公式化定义如式(2-25)所示,其中波浪线代表相应有限长序列的周期延拓,非整数索引位置默认为 0。

y~[m+k(4N−2)]=x~[∣m∣−12],m=−2N+1,−2N+2,...,2N−2.(2-25)\tilde y\left[ {m + k\left( {4N - 2} \right)} \right] = \tilde x\left[ {\frac{{\left| m \right| - 1}}{2}} \right],{\text{ }}m = - 2N + 1, - 2N + 2,...,2N - 2.\tag{2-25}y~​[m+k(4N−2)]=x~[2∣m∣−1​], m=−2N+1,−2N+2,...,2N−2.(2-25)

图 2-15(b) 所示延拓序列的 DFT 序列如图 2-16 所示。

图 2-15 DCT-VI 延拓(a)及其插零上采样(b) 图 2-16 DCT-VI 延拓序列的 DFT 序列

容易可得 DCT-VI 对应的离散余弦变换公式如下,

X[k]=DCT6[x[n]]=22N−1εkηn∑n=0N−1x[n]cos⁡[πk(2n+1)2N−1]x[n]=IDCT6[X[k]]=22N−1εkηn∑k=0N−1X[k]cos⁡[πk(2n+1)2N−1]wheren,k=0,1,...,N−1.(2-26)\begin{gathered} X[k] = DC{T_6}\left[ {x[n]} \right] = \frac{2}{{\sqrt {2N - 1} }}{\varepsilon _k}{\eta _n}\sum\limits_{n = 0}^{N - 1} {x[n]\cos \left[ {\frac{{\pi k\left( {2n + 1} \right)}}{{2N - 1}}} \right]} \\ x[n] = IDC{T_6}\left[ {X[k]} \right] = \frac{2}{{\sqrt {2N - 1} }}{\varepsilon _k}{\eta _n}\sum\limits_{k = 0}^{N - 1} {X[k]\cos \left[ {\frac{{\pi k\left( {2n + 1} \right)}}{{2N - 1}}} \right]} \\ where{\text{ }}n,k = 0,1,...,N - 1. \\ \end{gathered} \tag{2-26}X[k]=DCT6​[x[n]]=2N−1​2​εk​ηn​n=0∑N−1​x[n]cos[2N−1πk(2n+1)​]x[n]=IDCT6​[X[k]]=2N−1​2​εk​ηn​k=0∑N−1​X[k]cos[2N−1πk(2n+1)​]where n,k=0,1,...,N−1.​(2-26)

其中,

εk={12,k=01,k≠0,ηn={12,n=N−11,n≠N−1.{\varepsilon _k} = \left\{ {\begin{array}{l} {\frac{1}{{\sqrt 2 }},}&{k = 0} \\ {1,}&{k \ne 0} \end{array}} \right.,{\text{ }}{\eta _n} = \left\{ {\begin{array}{l} {\frac{1}{{\sqrt 2 }},}&{n = N - 1} \\ {1,}&{n \ne N - 1} \end{array}} \right..εk​={2​1​,1,​k=0k=0​, ηn​={2​1​,1,​n=N−1n=N−1​.

2.8 DCT-VII

DCT-VII 延拓的公式化表示如下,

y~[m+k(4N−2)]={x~[∣m∣],∣m∣⩽N−1−x~[2N−1−∣m∣],∣m∣⩾Nm=−2N+1,−2N+2,...,2N−2.(2-27)\begin{gathered} \tilde y\left[ {m + k\left( {4N - 2} \right)} \right] = \left\{ {\begin{array}{l} {\tilde x\left[ {\left| m \right|} \right],}&{\left| m \right| \leqslant N - 1} \\ { - \tilde x\left[ {2N - 1 - \left| m \right|} \right],}&{\left| m \right| \geqslant N} \end{array}} \right. \\ m = - 2N + 1, - 2N + 2,...,2N - 2. \\ \end{gathered} \tag{2-27}y~​[m+k(4N−2)]={x~[∣m∣],−x~[2N−1−∣m∣],​∣m∣⩽N−1∣m∣⩾N​m=−2N+1,−2N+2,...,2N−2.​(2-27)

作为示例,图 2-1 所定义的有限长非对称实序列的 DCT-VII 对称及周期延拓如图 2-17 所示,其对应的离散傅里叶变换序列如图 2-18 所示。

图 2-17 DCT-VII 延拓 图 2-18 DCT-VII 延拓序列的 DFT 序列

容易可得 DCT-VII 对应的离散余弦变换公式如下,

X[k]=DCT7[x[n]]=22N−1ηkεn∑n=0N−1x[n]cos⁡[π(2k+1)n2N−1]x[n]=IDCT7[X[k]]=22N−1ηkεn∑k=0N−1X[k]cos⁡[π(2k+1)n2N−1]wheren,k=0,1,...,N−1.(2-28)\begin{gathered} X[k] = DC{T_7}\left[ {x[n]} \right] = \frac{2}{{\sqrt {2N - 1} }}{\eta _k}{\varepsilon _n}\sum\limits_{n = 0}^{N - 1} {x[n]\cos \left[ {\frac{{\pi \left( {2k + 1} \right)n}}{{2N - 1}}} \right]} \\ x[n] = IDC{T_7}\left[ {X[k]} \right] = \frac{2}{{\sqrt {2N - 1} }}{\eta _k}{\varepsilon _n}\sum\limits_{k = 0}^{N - 1} {X[k]\cos \left[ {\frac{{\pi \left( {2k + 1} \right)n}}{{2N - 1}}} \right]} \\ where{\text{ }}n,k = 0,1,...,N - 1. \\ \end{gathered} \tag{2-28}X[k]=DCT7​[x[n]]=2N−1​2​ηk​εn​n=0∑N−1​x[n]cos[2N−1π(2k+1)n​]x[n]=IDCT7​[X[k]]=2N−1​2​ηk​εn​k=0∑N−1​X[k]cos[2N−1π(2k+1)n​]where n,k=0,1,...,N−1.​(2-28)

其中,

ηk={12,k=N−11,k≠N−1,εn={12,n=01,n≠0.{\eta _k} = \left\{ {\begin{array}{l} {\frac{1}{{\sqrt 2 }},}&{k = N - 1} \\ {1,}&{k \ne N - 1} \end{array}} \right.,{\text{ }}{\varepsilon _n} = \left\{ {\begin{array}{l} {\frac{1}{{\sqrt 2 }},}&{n = 0} \\ {1,}&{n \ne 0} \end{array}} \right..ηk​={2​1​,1,​k=N−1k=N−1​, εn​={2​1​,1,​n=0n=0​.

附录

附录 A DCT 的 8 种延拓方式

附录 B DCT 的 8 种变换公式

DCT-I

X[k]=DCT1[x[n]]=2N−1γkγn∑n=0N−1x[n]cos⁡(πknN−1).X[k] = DC{T_1}\left[ {x[n]} \right] = \sqrt {\frac{2}{{N - 1}}} {\gamma _k}{\gamma _n}\sum\limits_{n = 0}^{N - 1} {x[n]\cos \left( {\frac{{\pi kn}}{{N - 1}}} \right)} .X[k]=DCT1​[x[n]]=N−12​​γk​γn​n=0∑N−1​x[n]cos(N−1πkn​).

DCT-II

X[k]=DCT2[x[n]]=2Nεk∑n=0N−1x[n]cos⁡[πk(2n+1)2N].X[k] = DC{T_2}\left[ {x[n]} \right] = \sqrt {\frac{2}{N}} {\varepsilon _k}\sum\limits_{n = 0}^{N - 1} {x[n]\cos \left[ {\frac{{\pi k\left( {2n + 1} \right)}}{{2N}}} \right]} .X[k]=DCT2​[x[n]]=N2​​εk​n=0∑N−1​x[n]cos[2Nπk(2n+1)​].

DCT-III

X[k]=DCT3[x[n]]=2Nεn∑n=0N−1x[n]cos⁡[π(2k+1)n2N].X[k] = DC{T_3}\left[ {x[n]} \right] = \sqrt {\frac{2}{N}} {\varepsilon _n}\sum\limits_{n = 0}^{N - 1} {x[n]\cos \left[ {\frac{{\pi \left( {2k + 1} \right)n}}{{2N}}} \right]} .X[k]=DCT3​[x[n]]=N2​​εn​n=0∑N−1​x[n]cos[2Nπ(2k+1)n​].

DCT-IV

X[k]=DCT4[x[n]]=2N∑n=0N−1x[n]cos⁡[π(2k+1)(2n+1)4N].X[k] = DC{T_4}\left[ {x[n]} \right] = \sqrt {\frac{2}{N}} \sum\limits_{n = 0}^{N - 1} {x[n]\cos \left[ {\frac{{\pi \left( {2k + 1} \right)\left( {2n + 1} \right)}}{{4N}}} \right]} .X[k]=DCT4​[x[n]]=N2​​n=0∑N−1​x[n]cos[4Nπ(2k+1)(2n+1)​].

DCT-V

X[k]=DCT5[x[n]]=22N−1εkεn∑n=0N−1x[n]cos⁡(2πkn2N−1).X[k] = DC{T_5}\left[ {x[n]} \right] = \frac{2}{{\sqrt {2N - 1} }}{\varepsilon _k}{\varepsilon _n}\sum\limits_{n = 0}^{N - 1} {x[n]\cos \left( {\frac{{2\pi kn}}{{2N - 1}}} \right)} .X[k]=DCT5​[x[n]]=2N−1​2​εk​εn​n=0∑N−1​x[n]cos(2N−12πkn​).

DCT-VI

X[k]=DCT6[x[n]]=22N−1εkηn∑n=0N−1x[n]cos⁡[πk(2n+1)2N−1].X[k] = DC{T_6}\left[ {x[n]} \right] = \frac{2}{{\sqrt {2N - 1} }}{\varepsilon _k}{\eta _n}\sum\limits_{n = 0}^{N - 1} {x[n]\cos \left[ {\frac{{\pi k\left( {2n + 1} \right)}}{{2N - 1}}} \right]} .X[k]=DCT6​[x[n]]=2N−1​2​εk​ηn​n=0∑N−1​x[n]cos[2N−1πk(2n+1)​].

DCT-VII

X[k]=DCT7[x[n]]=22N−1ηkεn∑n=0N−1x[n]cos⁡[π(2k+1)n2N−1].X[k] = DC{T_7}\left[ {x[n]} \right] = \frac{2}{{\sqrt {2N - 1} }}{\eta _k}{\varepsilon _n}\sum\limits_{n = 0}^{N - 1} {x[n]\cos \left[ {\frac{{\pi \left( {2k + 1} \right)n}}{{2N - 1}}} \right]} .X[k]=DCT7​[x[n]]=2N−1​2​ηk​εn​n=0∑N−1​x[n]cos[2N−1π(2k+1)n​].

DCT-VIII

X[k]=DCT8[x[n]]=22N+1∑n=0N−1x[n]cos⁡[π(2k+1)(2n+1)4N+2].X[k] = DC{T_8}\left[ {x[n]} \right] = \frac{2}{{\sqrt {2N + 1} }}\sum\limits_{n = 0}^{N - 1} {x[n]\cos \left[ {\frac{{\pi \left( {2k + 1} \right)\left( {2n + 1} \right)}}{{4N + 2}}} \right]} .X[k]=DCT8​[x[n]]=2N+1​2​n=0∑N−1​x[n]cos[4N+2π(2k+1)(2n+1)​].

εp={12,p=01,p≠0,ηp={12,p=N−11,p≠N−1,γp={12,p=0orp=N−11,others,k,n,p=0,1,...,N−1.\begin{aligned} {\varepsilon _p} &= \left\{ {\begin{array}{c} {\frac{1}{{\sqrt 2 }},}&{p = 0} \\ {1,}&{p \ne 0} \end{array}} \right., \\ {\text{ }}{\eta _p} &= \left\{ {\begin{array}{c} {\frac{1}{{\sqrt 2 }},}&{p = N - 1} \\ {1,}&{p \ne N - 1} \end{array}} \right.,{\text{ }} \\ {\gamma _p} &= \left\{ {\begin{array}{c} {\frac{1}{{\sqrt 2 }},}&{p = 0{\text{ }}or{\text{ }}p = N - 1} \\ {1,}&{others} \end{array}} \right.,\\ {\text{ }}k,n,p &= 0,1,...,N - 1. \\ \end{aligned} εp​ ηp​γp​ k,n,p​={2​1​,1,​p=0p=0​,={2​1​,1,​p=N−1p=N−1​, ={2​1​,1,​p=0 or p=N−1others​,=0,1,...,N−1.​

附录 C DCT 的 8 种变换对应的基图像

DCT 基图像生成脚本

# -*- coding: utf-8 -*-
from __future__ import division
import numpy as np
import matplotlib.pyplot as pltdef dct1_kern(N):x = np.zeros([N, N])for k in range(N):x[k, :] = np.cos(np.pi * k * np.arange(N) / (N - 1))x[:,  0] /= np.sqrt(2)x[:, -1] /= np.sqrt(2)x[0,  :] /= np.sqrt(2)x[-1, :] /= np.sqrt(2)x *= np.sqrt(2. / (N - 1))return xdef dct2_kern(N):x = np.zeros([N, N])for k in range(N):x[k, :] = np.cos(np.pi * k * (2 * np.arange(N) + 1) / (2 * N))x[0, :] /= np.sqrt(2)x *= np.sqrt(2. / N)return xdef dct3_kern(N):x = np.zeros([N, N])for k in range(N):x[k] = np.cos(np.pi * (2 * k + 1) * np.arange(N) / (2 * N))x[:, 0] /= np.sqrt(2)x *= np.sqrt(2. / N)return xdef dct4_kern(N):x = np.zeros([N, N])for k in range(N):x[k] = np.cos(np.pi * (2 * k + 1) * (2 * np.arange(N) + 1) / (4 * N))x *= np.sqrt(2. / N)return xdef dct5_kern(N):x = np.zeros([N, N])for k in range(N):x[k] = np.cos(2 * np.pi * k * np.arange(N) / (2 * N - 1))x[:, 0] /= np.sqrt(2)x[0, :] /= np.sqrt(2)x *= np.sqrt(4. / (2 * N - 1))return xdef dct6_kern(N):x = np.zeros([N, N])for k in range(N):x[k] = np.cos(np.pi * k * (2 * np.arange(N) + 1) / (2 * N - 1))x[:, -1] /= np.sqrt(2)x[0,  :] /= np.sqrt(2)x *= np.sqrt(4. / (2 * N - 1))return xdef dct7_kern(N):x = np.zeros([N, N])for k in range(N):x[k] = np.cos(np.pi * (2 * k + 1) * np.arange(N) / (2 * N - 1))x[:,  0] /= np.sqrt(2)x[-1, :] /= np.sqrt(2)x *= np.sqrt(4. / (2 * N - 1))return xdef dct8_kern(N):x = np.zeros([N, N])for k in range(N):x[k] = np.cos(np.pi * (2 * k + 1) * (2 * np.arange(N) + 1) / (4 * N + 2))x *= np.sqrt(4. / (2 * N + 1))return xif __name__ == '__main__':path = 'dct_img/basis/'num = ['I', 'II', 'III', 'IV', 'V', 'VI', 'VII', 'VIII']for n in range(1, 9):kern = globals().get('dct{}_kern'.format(n))(8)'''把变换矩阵按行分块,记第k行的转置为ak,那么 h=[a1.T, a2.T, ..., a8.T],用矩阵分块的知识得到 v.dot(h) 的每一个子块是 ai.dot(aj.T),这样一次性就可以得到64个基图像拼起来的64x64的总图像了。'''h = kern.reshape([1, -1])v = h.Timg = v.dot(h)plt.figure(figsize=(8, 8))plt.imshow(img, 'gray')plt.savefig(path+'/dct8x8_{}_all.png'.format(n), dpi='figure')imgs = []for i in range(8):for j in range(8):imgs.append(img[8*i:8*i+8, 8*j:8*j+8])#imgs.append(kern[[i], :].T.dot(kern[[j], :])) # 这种方法就是基图像一个一个地求imgs = np.stack(imgs)vmin, vmax = np.min(imgs), np.max(imgs)plt.figure(figsize=(32, 33))for i in range(8):for j in range(8):plt.subplot(8, 8, i*8+j+1)plt.imshow(imgs[i*8+j], 'gray', vmin=vmin, vmax=vmax)plt.axis('off')plt.tight_layout()plt.subplots_adjust(0.02, 0.02, 0.98, 0.95, 0.1, 0.1)plt.suptitle('DCT-'+num[n-1]+' basis', fontsize=48)plt.savefig(path+'/dct8x8_{}.png'.format(n), dpi=32)

理解DCT与DST【二】:离散余弦变换相关推荐

  1. day26:离散余弦变换

    由于二维变换展开形式过于复杂,这里不进行展开 感兴趣的读者可以查阅相关资料进行学习. OpenCV4 提供了 dct()函数用于计算离散余弦变换. 离散余弦逆变换 离散余弦变换的正逆交换是相反的交换, ...

  2. 语音信号处理(九)——离散余弦变换

    文章目录 1.定义 2.用C语言实现离散余弦变换 1.定义 DCT(Discrete Cosine Transform)离散余弦变换,其常见用途是对音视频进行数据压缩.离散余弦变换具有信号谱分量丰富. ...

  3. 理解DCT与DST【三】:离散正弦变换

    本文主要是将先前的博客 离散傅里叶变换DFT.离散余弦变换DCT.离散正弦变换DST,原理与公式推导 从图片修改为 Markdown 脚本,方便读者浏览,同时增加了部分内容.但由于文章字符过多,无法全 ...

  4. JPEG压缩原理与DCT离散余弦变换

    原文网址:http://blog.csdn.net/newchenxf/article/details/51719597 转载请注明出处喔 1 前言 JPEG是joint Photographic E ...

  5. JPEG图像压缩原理与DCT离散余弦变换

    原文网址:http://blog.csdn.net/newchenxf/article/details/51719597 转载请注明出处喔 1 前言 JPEG是joint Photographic E ...

  6. dct变换的主要优点有哪些_数字图像处理(三)—— 离散余弦变换

    离散余弦变换(Discrete Cosine Transform)本质上也是离散傅里叶变换(Discrete Fourier Transform),但是只有实数部分.有这样一个性质:如果信号 在给定区 ...

  7. 图像处理 离散余弦变换

    什么是DCT 一维DCT变换 一维DCT变换时二维DCT变换的基础,所以我们先来讨论下一维DCT变换.一维DCT变换共有8种形式,其中最常用的是第二种形式,由于其运算简单.适用范围广.我们在这里只讨论 ...

  8. python实现傅里叶变换求幅值和相位_Python 实现图像快速傅里叶变换和离散余弦变换...

    图像的正交变换在数字图像的处理与分析中起着很重要的作用,被广泛应用于图像增强.去噪.压缩编码等众多领域.本文手工实现了二维离散傅里叶变换和二维离散余弦变换算法,并在多个图像样本上进行测试,以探究二者的 ...

  9. 利用python对图像进行傅里叶变换_Python 实现图像快速傅里叶变换和离散余弦变换...

    图像的正交变换在数字图像的处理与分析中起着很重要的作用,被广泛应用于图像增强.去噪.压缩编码等众多领域.本文手工实现了 二维离散傅里叶变换 和 二维离散余弦变换 算法,并在多个图像样本上进行测试,以探 ...

最新文章

  1. JavaScript 利用location对象实现跨页面传参
  2. 从蛋白质结构到功能的生物信息学研究 From Protein Structure to Function with Bioinformatics PDF
  3. 开始一个django项目
  4. win10装sql2000卡在选择配置_恢复win10系统安装SQL2000卡在MADC不动的妙计
  5. 计算机组成原理实验 组装实验报告,计算机组成原理实验一实验报告..doc
  6. 解决vs2019中暂时无法为.net core WinForms使用 Designer 的临时方法
  7. ASP.NET企业开发框架IsLine FrameWork系列之六--DataProvider 数据访问(下)
  8. 用Mask-RCNN训练自定义大小的数据集
  9. Java IO 之 介质流
  10. 判断字符串是只是数字
  11. WPFの三种方式实现快捷键
  12. Web 应用程序渗透测试清单
  13. 仿QQ音乐(HTML+CSS)
  14. SAP 软件价格体系及SAP项目实施费用构成介绍
  15. 将读书笔记自动生成思维导图(Markdown)
  16. 分糖果系列一(DP+暴力)
  17. Zookeeper用作注册中心的原理
  18. Python nose测试大法
  19. linux在防火墙上打开1521端口
  20. 程序员同事表演加班一个月后,我离职了

热门文章

  1. 安信可VB01离线语音模块接入智能窗帘指导
  2. mysql中是如何处理周数,一年的第一周到底从哪天开始计算?
  3. QT painter控件绘制指示灯
  4. php mirror怎么安装,如何安装ThinkPHP框架?
  5. 签名签名签名签名签名签名签名
  6. 在一家公司待久了没有目标,没有动力,我该怎么办?
  7. UNI-APP在使用SubNvue原生子窗体时,清理缓存的问题
  8. HutoolUtil
  9. 小米手机多功能计算机都怎么使用方法,MIUI12.5手机电脑如何同步使用-小米11MIUI12.5新功能miui+使用方法...
  10. oracle EM的安装配置