算法学习笔记(46): 离散余弦变换(DCT)

前置知识:离散傅里叶变换

傅里叶变换在上文中更多的是 OI 中的理解以及应用。但是傅里叶变换奥秘还很多。

回顾 ωn 在傅里叶变换中的定义:ei2πn,存在 ωnn=1 的性质。意味着离散傅里叶变换实际上是周期性的,这也变相的解释了为什么存在循环卷积的性质。

傅里叶级数

我们回顾什么是傅里叶级数。傅里叶断言,对于任何周期信号 x(t) 都可以表示为成谐波关系的虚指数信号的线性组合,即:

x(t)=k=akejkω0t

虽然后来证明当 x(t) 满足狄里赫利条件时才成立……

周期信号 x(t) 满足存在一个正值 T 满足:

t,x(t)=x(t+T)

最小的 T 称为基波周期,w0=2πT 称为基波频率。

如果我们知道了一个 x(t) 该如何求 ak 呢?

利用积分:

0Tx(t)ejnω0tdt=0Tk=akejkω0tejnω0tdt

将后面变形:

0Tk=akejkω0tejnω0tdt=kak[0Tej(kn)ω0tdt]

注意到:

0Tej(kn)ω0tdt=0Tcos[(kn)ω0t]dt+i0Tsin[(kn)ω0t]dt

中,存在:

0Tsin[(kn)ω0t]dt={Tk=n0kn

所以:

ak=1T0Tx(t)ejkω0tdt

DCT 变换与 DFT 的联系

DCT 实际上就是 DFT 的一种特殊形式。

在傅立叶级数的推导中:

0Tsin[(kn)ω0t]dt={Tk=n0kn

是非常有趣的。

这反映出了如果对一个周期为 T,并且周期内是个奇函数的函数 0T,结果一定 =0,反之不为 0

那么我们考虑将一个一般的周期信号变成一个周期内的偶函数,这样和 sin 这个奇函数相乘后还是奇函数,积分出来也就没了,从而使得 DFT 的虚部没了。

上面所说的连续的情况,但是实际上离散的情况也是一样。

考察 DFT 的式子:

bk=i=0n1ωnikai

m=2n,使得 ak=amk1,那么其 DFT:

bk=i=0m1ωmikai=i=0n1ai(ωik+ω(2nk1)k)

发现并不优美,考虑将幂平移 k2

bk=i=0m1aiωki+k2=i=0n1ai[(cosπk(i+12)n+cosπk(i+12)n)+i(sinπk(i+12)n+sinπk(i+12)n)]=2i=0n1aicosπk(i+12)n

中间是利用 eix=cosx+isinx 展开推导而来。

发现虚部直接没了,这符合前面得出的结论。

然后我们成功的学会了 DCT。

IDCT

由于 DCT 本质上就是 DFT,所以 IDCT 本质上就是 IDFT。所以理解是简单的了。

posted @   jeefy  阅读(319)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
点击右上角即可分享
微信分享提示