算法学习笔记(46): 离散余弦变换(DCT)
前置知识:离散傅里叶变换
傅里叶变换在上文中更多的是 OI 中的理解以及应用。但是傅里叶变换奥秘还很多。
回顾 \(\omega_n\) 在傅里叶变换中的定义:\(e^{i \frac {2\pi} n}\),存在 \(\omega_n^n = 1\) 的性质。意味着离散傅里叶变换实际上是周期性的,这也变相的解释了为什么存在循环卷积的性质。
傅里叶级数
我们回顾什么是傅里叶级数。傅里叶断言,对于任何周期信号 \(x(t)\) 都可以表示为成谐波关系的虚指数信号的线性组合,即:
\]
虽然后来证明当 \(x(t)\) 满足狄里赫利条件时才成立……
周期信号 \(x(t)\) 满足存在一个正值 \(T\) 满足:
\]
最小的 \(T\) 称为基波周期,\(w_0 = \frac {2\pi} T\) 称为基波频率。
如果我们知道了一个 \(x(t)\) 该如何求 \(a_k\) 呢?
利用积分:
\]
将后面变形:
\]
注意到:
\]
中,存在:
T & k = n \\
0 & k \ne n
\end{cases}
\]
所以:
\]
DCT 变换与 DFT 的联系
DCT 实际上就是 DFT 的一种特殊形式。
在傅立叶级数的推导中:
T & k = n \\
0 & k \ne n
\end{cases}
\]
是非常有趣的。
这反映出了如果对一个周期为 \(T\),并且周期内是个奇函数的函数 \(\int_0^T\),结果一定 \(= 0\),反之不为 \(0\)。
那么我们考虑将一个一般的周期信号变成一个周期内的偶函数,这样和 \(\sin\) 这个奇函数相乘后还是奇函数,积分出来也就没了,从而使得 DFT 的虚部没了。
上面所说的连续的情况,但是实际上离散的情况也是一样。
考察 DFT 的式子:
\]
令 \(m = 2n\),使得 \(a_k = a_{m - k - 1}\),那么其 DFT:
\]
发现并不优美,考虑将幂平移 \(\frac k 2\):
b_k &= \sum_{i = 0}^{m - 1} a_i \omega^{ki + \frac k 2} \\
&= \sum_{i = 0}^{n - 1} a_i \left[ \left(\cos \frac {\pi k (i + \frac 12)} n + \cos \frac {- \pi k (i + \frac 12)} n \right) + i\left(\sin \frac {\pi k (i + \frac 12)} n + \sin \frac {- \pi k (i + \frac 12)} n \right) \right] \\
&= 2 \sum_{i = 0}^{n - 1} a_i \cos \frac {\pi k(i + \frac 12)} n
\end{aligned}
\]
中间是利用 \(e^{ix} = \cos x + i \sin x\) 展开推导而来。
发现虚部直接没了,这符合前面得出的结论。
然后我们成功的学会了 DCT。
IDCT
由于 DCT 本质上就是 DFT,所以 IDCT 本质上就是 IDFT。所以理解是简单的了。
算法学习笔记(46): 离散余弦变换(DCT)的更多相关文章
- 算法学习笔记(9): 中国剩余定理(CRT)以及其扩展(EXCRT)
扩展中国剩余定理 讲解扩展之前,我们先叙述一下普通的中国剩余定理 中国剩余定理 中国剩余定理通过一种非常精巧的构造求出了一个可行解 但是毕竟是构造,所以相对较复杂 \[\begin{cases} x ...
- C / C++算法学习笔记(8)-SHELL排序
原始地址:C / C++算法学习笔记(8)-SHELL排序 基本思想 先取一个小于n的整数d1作为第一个增量(gap),把文件的全部记录分成d1个组.所有距离为dl的倍数的记录放在同一个组中.先在各组 ...
- Manacher算法学习笔记 | LeetCode#5
Manacher算法学习笔记 DECLARATION 引用来源:https://www.cnblogs.com/grandyang/p/4475985.html CONTENT 用途:寻找一个字符串的 ...
- Johnson算法学习笔记
\(Johnson\)算法学习笔记. 在最短路的学习中,我们曾学习了三种最短路的算法,\(Bellman-Ford\)算法及其队列优化\(SPFA\)算法,\(Dijkstra\)算法.这些算法可以快 ...
- 某科学的PID算法学习笔记
最近,在某社团的要求下,自学了PID算法.学完后,深切地感受到PID算法之强大.PID算法应用广泛,比如加热器.平衡车.无人机等等,是自动控制理论中比较容易理解但十分重要的算法. 下面是博主学习过程中 ...
- Johnson 全源最短路径算法学习笔记
Johnson 全源最短路径算法学习笔记 如果你希望得到带互动的极简文字体验,请点这里 我们来学习johnson Johnson 算法是一种在边加权有向图中找到所有顶点对之间最短路径的方法.它允许一些 ...
- 算法学习笔记(5): 最近公共祖先(LCA)
最近公共祖先(LCA) 目录 最近公共祖先(LCA) 定义 求法 方法一:树上倍增 朴素算法 复杂度分析 方法二:dfs序与ST表 初始化与查询 复杂度分析 方法三:树链剖分 DFS序 性质 重链 重 ...
- 算法学习笔记(3): 倍增与ST算法
倍增 目录 倍增 查找 洛谷P2249 重点 变式练习 快速幂 ST表 扩展 - 运算 扩展 - 区间 变式答案 倍增,字面意思即"成倍增长" 他与二分十分类似,都是基于" ...
- Miller-Rabin 与 Pollard-Rho 算法学习笔记
前言 Miller-Rabin 算法用于判断一个数 \(p\) 是否是质数,若选定 \(w\) 个数进行判断,那么正确率约是 \(1-\frac{1}{4^w}\) ,时间复杂度为 \(O(\log ...
- 算法学习笔记(20): AC自动机
AC自动机 前置知识: 字典树:可以参考我的另一篇文章 算法学习笔记(15): Trie(字典树) KMP:可以参考 KMP - Ricky2007,但是不理解KMP算法并不会对这个算法的理解产生影响 ...
随机推荐
- Jenkins实战系列(一)——Jenkins简介
Jenkins是一个开源的自动化构建工具,可以帮助开发人员自动构建.测试和部署软件.它支持多种编程语言.版本控制系统和构建工具,如Java.Git.Maven等.Jenkins的核心功能是通过一系列插 ...
- 当服务器间通讯出现No route to host(Host unreachable)
服务器间通讯出现No route to host(Host unreachable) 背景:因为某些原因,主机房服务器集体重启,其中部署的系统也需要重启,负责的系统是五台服务器,两台用来作为应用的应用 ...
- 力扣69(java&python)-x的平方根(简单)
题目: 给你一个非负整数 x ,计算并返回 x 的 算术平方根 . 由于返回类型是整数,结果只保留 整数部分 ,小数部分将被 舍去 . 注意:不允许使用任何内置指数函数和算符,例如 pow(x, 0. ...
- 力扣238(java)-除自身以外数组的乘积(中等)
题目: 给你一个整数数组 nums,返回 数组 answer ,其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积 . 题目数据 保证 数组 nums之中任意元素的全 ...
- “让专业的人做专业的事”,畅捷通与阿里云的云原生故事 | 云原生 Talk
简介: 如何借助阿里云强大的 IaaS 和 PaaS 能力去构建新一代的 SaaS 企业应用,从而给客户提供更好.更强的服务,这是畅捷通一直在思考和实践的方向.最终,畅捷通选定阿里云企业级分布式应用服 ...
- DataV 3D 平面地图 2.0 焕新上线
简介:DataV3月,3D平面地图2.0现已上线~ 3D 平面地图 2.0 现已上线~ 让我们来看看更新了哪些功能吧! 01 交互升级,省市区自由下钻 自带行政区域数据,无需配置: 甚至,可以通 ...
- 埃森哲携手阿里云,采用K8s容器云服务为客户提供无限弹性
简介: 埃森哲作为全球领先的专业服务公司,在数字化.云计算等领域拥有全球领先的能力,我们在多年的实际客户项目中,找到并沉淀出了适合企业数字化转型的方法论,积累了丰富的落地经验. 作者:姚迪.周警伟 随 ...
- Alibaba Cloud Toolkit 中SLS插件助力线上服务问题排查
简介:Alibaba Cloud Toolkit 是一款非常优秀的插件,新增SLS日志服务的功能,针对软件开发者日常工作中常见的问题排查场景,将日志服务平台的功能集成到ide当中,省去了不同窗口之间 ...
- 揭秘远程证明架构EAA:机密容器安全部署的最后一环 | 龙蜥技术
简介:如果需要在云上 HW-TEE 环境里启动一个加密容器,如何在启动过程中获取容器的解密密钥? 文 / 周亮, 云原生机密计算 SIG 核心成员. 在云原生场景下,基于HW-TEE(如Inte ...
- MaxCompute Spark 资源使用优化祥解
简介: 本文主要讲解MaxCompute Spark资源调优,目的在于在保证Spark任务正常运行的前提下,指导用户更好地对Spark作业资源使用进行优化,极大化利用资源,降低成本. 本文作者:吴数傑 ...