算法学习笔记(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算法并不会对这个算法的理解产生影响 ...
随机推荐
- Docker部署Node应用简单实践
简介: 本文将从零至一,介绍如何在云服务器上通过 Docker 容器运行一个简单的Node应用. 前言 本文将从零至一,介绍如何在云服务器上通过 Docker 容器运行一个简单的Node应用.本文假设 ...
- Spring Cloud Gateway 突发高危漏洞,下一代云原生网关恰逢其时?
简介:Log4j2 的漏洞刚告一段落,Spring 官方在 2022 年 3 月 1 日发布了 Spring Cloud Gateway 的两个 CVE 漏洞:分别为 CVE-2022-22946( ...
- Hologres揭秘:如何支持超高QPS在线服务(点查)场景
简介: 本期我们将揭秘Hologres如何支持超高QPS在线服务(点查)场景. Hologres(中文名交互式分析)是阿里云自研的一站式实时数仓,这个云原生系统融合了实时服务和分析大数据的场景,全面兼 ...
- 基于权电阻网络的VGA色条显示#DE10-lite#verilog#qp
- C语言程序设计-笔记8-结构
C语言程序设计-笔记8-结构 例9-1 输出平均分最高的学生信息.根据学生的基本信息包括学号.姓名.三门课程成绩以及个人平均成绩.输入n个学生的成绩信息,计算并输出平均分最高的学生信息. #incl ...
- vue-cli快速搭建项目的几个文件(一)
===========app.vue文件============= <template> <div id="app"> <router ...
- webapi授权认证
webapi授权认证 一.需要类包 Microsoft.AspNetCore.Authentication.JwtBearer 二.相关名词 Authentication(认证):标识用户的身份,一般 ...
- Ollama开发指南
安装必备工具 确保已安装以下软件的正确版本: CMake 3.24 或更高版本 Go 1.22 或更高版本 GCC 11.4.0 或更高版本 使用 Homebrew 安装这些工具(适用于macOS和L ...
- HZ2023 远足游记
你说得对,但是我放假之前写的 P4689 代码没了 所以来摆 4.6(远足) 上午 走路,刚开始感觉没啥 走到园博园发现没预料中那么顺利 但是还感觉没啥 因为也没预料到 \(N·m\) 学校会让我们原 ...
- 程序员天天 CURD,怎么才能成长,职业发展的思考(2)
接着上一篇:程序员天天 CURD,怎么才能成长,职业发展思考 上一篇写到了用年限来谈程序员的发展,在 4 - 6 年这个时间段需要做的一些事情,接着写这个时间段的. 第 4.5 年时候,你可能会做一些 ...