离散时间傅里叶级数与变换笔记
摘要
本文详细笔记了离散时间傅里叶级数(DTFS)与离散时间傅里叶变换(DTFT),涵盖其理论基础及信号处理应用实例。
<link rel="stylesheet" href="https://eli.thegreenplace.net/demos/discrete-fourier/discrete-fourier.css"><p>以下是我的笔记,内容涉及离散时间傅里叶级数(DTFS)以及离散时间傅里叶变换(DTFT)。这些主题构成了计算机使用DFT(将在未来的文章中介绍)进行数字信号处理的重要理论基础。</p>
<p>对于离散时间信号,我们使用方括号表示法来表示样本:<object class="valign-m5 latex-math" data="https://eli.thegreenplace.net/images/math/97897883b2ac574b045db012a128c024c5a05498.svg" style="height: 18px;" type="image/svg+xml">x[n]</object> 是信号
<object class="valign-0 latex-math" data="https://eli.thegreenplace.net/images/math/11f6ad8ec52a2984abaafd7c3b516503785c2072.svg" style="height: 8px;" type="image/svg+xml">x</object> 的第 n 个样本。</p>
<p>如果一个离散时间信号(为简洁起见,此后简称“离散”信号)是周期为 <object class="valign-0 latex-math" data="https://eli.thegreenplace.net/images/math/b51a60734da64be0e618bacbea2865a8a7dcd669.svg" style="height: 12px;" type="image/svg+xml">N</object> 的周期信号,当且仅当:</p>
<object class="align-center" data="https://eli.thegreenplace.net/images/math/72444fe45e23358b5515c447242702d052cf8b29.svg" style="height: 18px;" type="image/svg+xml">\[x[n]=x[n+N]\qquad\forall{n}\]</object>
<p>在讨论<a class="reference external" href="https://eli.thegreenplace.net/2026/notes-on-fourier-series/">连续时间傅里叶级数</a>时,我们从实三角函数开始,后来转向了复指数函数。这里,我们将直接从(离散)复指数函数开始——在两种表示之间转换并不困难,可以根据需要进行(本文的附录C有相关证明)。</p>
<p>我们将处理以下信号族<a class="footnote-reference" href="#footnote-1" id="footnote-reference-1">[1]</a>:</p>
<object class="align-center" data="https://eli.thegreenplace.net/images/math/893482d035c092058c8fe74a07d0d2007b2610f0.svg" style="height: 21px;" type="image/svg+xml">\[\phi_k[n]=e^{ikw_0n}=e^{ik(2\pi/N)n}\qquad \forall k\in\mathbb{Z}\]</object>
<p>这些是周期为 N 的离散复指数函数。<object class="valign-m6 latex-math" data="https://eli.thegreenplace.net/images/math/aff8cebf2b8fefea8ffbcb72636173fa560cb3c4.svg" style="height: 21px;" type="image/svg+xml">w_0=\frac{2\pi}{N}</object> 是<em>角频率</em>。如附录A所讨论的,这样的不同信号只有 N 个,因为:</p>
<object class="align-center" data="https://eli.thegreenplace.net/images/math/63dc5525074209448db49c6df6e21ad55681bd06.svg" style="height: 18px;" type="image/svg+xml">\[\phi_k[n]=\phi_{k+N}[n]\qquad\forall{k}\]</object>
<div class="section" id="coefficients-of-discrete-time-fourier-series">
<h2>离散时间傅里叶级数的系数</h2>
<p>我们希望考虑用 <object class="valign-m4 latex-math" data="https://eli.thegreenplace.net/images/math/1da2937ccce1ec5bb97b6acf3aa4c16b0600ac0a.svg" style="height: 18px;" type="image/svg+xml">\phi_k[n]</object> 的线性组合来表示任意以 N 为周期的 <object class="valign-m5 latex-math" data="https://eli.thegreenplace.net/images/math/97897883b2ac574b045db012a128c024c5a05498.svg" style="height: 18px;" type="image/svg+xml">x[n]</object>:</p>
<object class="align-center" data="https://eli.thegreenplace.net/images/math/bc26c473be832c359f7b4113522934be90ee741f.svg" style="height: 44px;" type="image/svg+xml">\[x[n]=\sum_{k=\langle N\rangle}a_k\phi_k[n]\]</object>
<p>符号 <object class="valign-m4 latex-math" data="https://eli.thegreenplace.net/images/math/7b3c13344886d907a02d04d04620598839f6b01f.svg" style="height: 18px;" type="image/svg+xml">k=\langle N\rangle</object> 表示 <object class="valign-0 latex-math" data="https://eli.thegreenplace.net/images/math/13fbd79c3d390e5d6585a21e11ff5ec1970cff0c.svg" style="height: 12px;" type="image/svg+xml">k</object> 遍历任意 <object class="valign-0 latex-math" data="https://eli.thegreenplace.net/images/math/b51a60734da64be0e618bacbea2865a8a7dcd669.svg" style="height: 12px;" type="image/svg+xml">N</object> 个连续整数的序列。由于只有 <object class="valign-0 latex-math" data="https://eli.thegreenplace.net/images/math/b51a60734da64be0e618bacbea2865a8a7dcd669.svg" style="height: 12px;" type="image/svg+xml">N</object> 个不同的信号 <object class="valign-m3 latex-math" data="https://eli.thegreenplace.net/images/math/ce4de0873a5958646dce9993ddaba5d4511d8b2d.svg" style="height: 16px;" type="image/svg+xml">\phi_k</object>,求和的顺序无关紧要——只要包含了所有的信号。因此,索引可以从 0 到 <object class="valign-m1 latex-math" data="https://eli.thegreenplace.net/images/math/4f927fbfe4d5898f228630ce76e5284ed202f837.svg" style="height: 14px;" type="image/svg+xml">N-1</object>,或从 1 到 <object class="valign-0 latex-math" data="https://eli.thegreenplace.net/images/math/b51a60734da64be0e618bacbea2865a8a7dcd669.svg" style="height: 12px;" type="image/svg+xml">N</object>,或从 2 到 <object class="valign-m1 latex-math" data="https://eli.thegreenplace.net/images/math/4bbff46d5e4a2066e44932399c1db699e807cf39.svg" style="height: 14px;" type="image/svg+xml">N+1</object>,依此类推。所有这些顺序都会遍历所有不同的 <object class="valign-m3 latex-math" data="https://eli.thegreenplace.net/images/math/ce4de0873a5958646dce9993ddaba5d4511d8b2d.svg" style="height: 16px;" type="image/svg+xml">\phi_k</object>。</p>
<p>回到我们的线性组合:</p>
<object class="align-center" data="https://eli.thegreenplace.net/images/math/60c500ee298bcca4f6a719dff3b72b2ecb114fda.svg" style="height: 44px;" type="image/svg+xml">\[x[n]=\sum_{k=\langle N\rangle}a_k\phi_k[n]=\sum_{k=\langle N\rangle}a_ke^{ikw_0n}\]</object>
<p>这就是 <object class="valign-m5 latex-math" data="https://eli.thegreenplace.net/images/math/97897883b2ac574b045db012a128c024c5a05498.svg" style="height: 18px;" type="image/svg+xml">x[n]</object> 的离散时间傅里叶级数(DTFS)表示,系数 <object class="valign-m3 latex-math" data="https://eli.thegreenplace.net/images/math/b93e6f239fad8d0444d74634490a6e0e067b8954.svg" style="height: 11px;" type="image/svg+xml">a_k</object> 就是傅里叶级数系数。请注意,这里不存在像连续情况那样的收敛问题,因为我们处理的是有限和。</p>
<p>为了找到系数 <object class="valign-m3 latex-math" data="https://eli.thegreenplace.net/images/math/b93e6f239fad8d0444d74634490a6e0e067b8954.svg" style="height: 11px;" type="image/svg+xml">a_k</object>,我们将采用与连续情况有些相似的方法。将上述等式两边乘以 <object class="valign-0 latex-math" data="https://eli.thegreenplace.net/images/math/4bd537f689b1c8840838d523803661568c9fafda.svg" style="height: 16px;" type="image/svg+xml">e^{-ir(2\pi/N)n}</object> 并对 <object class="valign-0 latex-math" data="https://eli.thegreenplace.net/images/math/b51a60734da64be0e618bacbea2865a8a7dcd669.svg" style="height: 12px;" type="image/svg+xml">N</object> 项求和:</p>
<object class="align-center" data="https://eli.thegreenplace.net/images/math/3ffeb7c8c33c990b9f29376bd6f897597e3d06b4.svg" style="height: 44px;" type="image/svg+xml">\[\sum_{n=\langle N\rangle}x[n]e^{-ir(2\pi/N)n}=
\sum_{n=\langle N\rangle}\sum_{k=\langle N\rangle}a_ke^{i(k-r)(2\pi/N)n}\]</object>
<p>交换右边求和的顺序:</p>
<object class="align-center" data="https://eli.thegreenplace.net/images/math/9804b43fc55e5f192b10cb39e6eb9a084be50542.svg" style="height: 44px;" type="image/svg+xml">\[\sum_{n=\langle N\rangle}x[n]e^{-ir(2\pi/N)n}=
\sum_{k=\langle N\rangle}a_k\sum_{n=\langle N\rangle}e^{i(k-r)(2\pi/N)n}\]</object>
查看缓存全文
缓存时间: 2026/09/20 02:29
# 离散时间傅里叶级数与变换笔记
来源:https://eli.thegreenplace.net/2026/notes-on-discrete-time-fourier-series-and-transform
以下是我关于离散时间傅里叶级数(DTFS)以及离散时间傅里叶变换(DTFT)的笔记。这些主题为计算机使用DFT(将在后续文章中介绍)进行数字信号处理提供了重要的理论基础。
对于离散时间信号,我们使用方括号表示法来表示采样点:是信号的第n个采样值。
若一个离散时间信号(为简洁起见,此后简称“离散”信号)具有周期N,则满足:
在讨论连续时间傅里叶级数(https://eli.thegreenplace.net/2026/notes-on-fourier-series/)时,我们从实数三角函数出发,后转向复指数表示。此处我们将直接从(离散)复指数开始讨论——两种表示形式间的转换并不困难,可按需进行(本文附录C将演示该过程)。
我们将处理以下信号族[[1]](https://eli.thegreenplace.net/2026/notes-on-discrete-time-fourier-series-and-transform#footnote-1):
这些是周期为N的离散复指数信号。其中是*角频率*。如附录A所述,这类信号仅有N个不同的独立信号,因为:
## 离散时间傅里叶级数的系数
我们将考虑将任意N周期信号表示为的线性组合:
其中表示n遍历任意连续整数序列。由于仅有N个不同的信号,求和顺序无关紧要——只要包含所有信号即可。求和范围可以从0到N-1,或从1到N,或从2到N+1,等等。所有顺序都将枚举出全部N个不同的。
回到我们的线性组合表达式:
这就是的离散时间傅里叶级数(DTFS)表示,系数为傅里叶级数系数。由于此处处理的是有限和,不存在连续情形中的收敛性问题。
为求得系数,我们将采用与连续情形类似的方法。将方程两边乘以并对n求和:
交换右侧求和顺序:
根据附录B,右侧内部求和在时等于N,否则为0。不失一般性——由于我们遍历连续值——不妨假设求和中时满足该条件(即,其中m为整数)。
于是方程变为:
或:
综上所述,将周期离散信号分解为周期复指数信号的傅里叶分解表示为:
## 示例:重访三角函数
让我们重访傅里叶级数文章(https://eli.thegreenplace.net/2026/notes-on-fourier-series)中的三角函数。此处将使用以下*采样*版本:
您的浏览器不支持HTML5 canvas标签。
采样采用每周期4个采样点中的12个样本。两个采样点之间的间隔为。另一种表达方式:
将其代入定义,得:
随后我们在范围内进行奇延拓[[2]](https://eli.thegreenplace.net/2026/notes-on-discrete-time-fourier-series-and-transform#footnote-2),并以周期重复。
类似于连续时间情形(https://eli.thegreenplace.net/2026/notes-on-fourier-series/)的考虑,由于我们的函数是奇函数,此处只需正弦级数:
这五项对应五个非零频率索引对;参见附录C。
系数为:
我们可以在半个周期上计算该求和,因为n和N-n处的项相等(两者及正弦函数均改变符号)。同时,n=0和n=N处的项因以下原因消失:
观察值:
类似地,我们可以计算所有直至:
所得傅里叶级数为:
您可以使用以下交互式绘图探索该离散三角函数的近似效果:
您的浏览器不支持HTML5 canvas标签。傅里叶级数项
下拉框选择绘制上述级数中的多少项。橙色叉号表示级数在整数索引处的数值,橙色线为插值线,以便更直观地观察叠加的正弦波。请注意,当使用所有系数时,DTFS*精确*重构输入信号。
在傅里叶变换文章(https://eli.thegreenplace.net/2026/notes-on-the-fourier-transform/)中,我们已看到非周期信号如何通过在极限条件下取傅里叶级数而在频域中表示。此处我们将对离散信号进行类似处理。
假设我们有一个有限持续时间的非周期离散信号(其在有限索引范围外为零)。以下是示例绘图:
您的浏览器不支持HTML5 canvas标签。
下半部分是——一个周期信号,其中一个周期()等于。我们选择足够大的N,使得在之外为零,并设。
由于是周期信号,可用DTFS表示[[3]](https://eli.thegreenplace.net/2026/notes-on-discrete-time-fourier-series-and-transform#footnote-3):
我们将采用角频率记号:
则:
现在是关键部分;由于在之外为零,将求和扩展至所有整数不会改变其值:
我们定义以下关于变量w的*连续*函数:
则在离散点处:
该函数即为的离散时间傅里叶变换(DTFT)。逆DTFT过程通过将代回DTFS公式来重构:
根据的定义,有:
因此:
与连续情形类似,我们认识到该和式为*Riemann和*。令。当间距趋近于零时,可将和式改写为积分:
综上所述,DTFT与逆DTFT对为:
是周期为的连续周期函数,因为:
因此,只需在任意长度为的区间上进行积分即可。
DTFS与DTFT密切相关。从有限持续时间信号出发,我们通过重复包含它的采样块来形成周期信号。其DTFS系数是DTFT等间距、按比例缩放的采样点:
该关系类似于连续情形中傅里叶级数与傅里叶变换的关系。
DTFT还具有类似于连续傅里叶变换的有用性质:线性、时移、卷积定理等,但此处我们不展开讨论。
## 附录A:离散时间复指数
离散时间复指数具有形式,其中是*角频率*。这些函数的离散特性导致了一些有趣的结果;例如,考虑角频率为的指数:
因此,角频率为的指数与角频率为的指数*完全相同*。在考虑离散复指数时,我们只需在长度为2π的区间内选择角频率。
这些函数的另一个有趣方面与其周期性有关。为使具有某个正整数周期K,必须满足:
换言之:
因此自身必须是π/K的整数倍。对于某个整数m:
对于固定的正整数K,考虑所有以K为周期的复指数:
但之前我们已指出,所有角频率相差2π的复指数信号是相同的。这意味着上述集合仅包含N个不同的指数。我们可以选择任何起始点,并得到角频率为,,...直到的不同信号。之后它们开始重复:等。
所有这些都与连续情形截然不同,其中角频率是实数。信号和仅在n的整数取值上相同,因此它们是n的不同函数。因此,对于固定的正周期T,连续时间指数信号对每个整数m都不同,从而产生无穷多个不同信号。
## 附录B:连续复指数之和
考虑以下离散函数,由求和定义:
我们将考虑两种情况:
(1)当是π的整数倍时:对于某个整数m(例如,m=0,1,2,...)
此时,求和变为:
由于N和n均为整数,指数是2π的整数倍,因此:
(2)当不是π的整数倍时,进行变量替换:
现在可以使用公比为的等比数列有限和公式;其和为:
注意由于不是π的整数倍,故。然而:
因此:
虽然这些计算演示了从0到N-1的求和,但它们对任何连续索引序列同样适用,因为被求和项关于n是周期为N的周期函数。因此:
## 附录C:的正弦级数分解
使用本文前文推导的DTFS公式:
回想在整个范围上是奇函数。具体而言,由于余弦是偶函数,对于任意n有:
因此余弦项在整个周期内相互抵消;第1项与第11项相同,依此类推。
剩下正弦项:
所有系数均为纯虚数。为方便起见,记:
回到傅里叶重构公式:
并将处的指数与处的指数配对:
同时,由于是实数,的共轭为:
因此将配对的指数与其系数相加,并利用欧拉公式:
故:
我们不包含和处的项,因为(整数倍π的正弦值为零)。
---
[[1]](https://eli.thegreenplace.net/2026/notes-on-discrete-time-fourier-series-and-transform#footnote-reference-1)该方程中使用了多种符号。n是信号的“时间”索引——其定义域;k枚举函数族中的第k个函数——每个函数都是n的函数;N是周期;i是虚数单位。
[[2]](https://eli.thegreenplace.net/2026/notes-on-discrete-time-fourier-series-and-transform#footnote-reference-2)奇延拓可能稍显困惑,因为我们未使用负索引。但索引是任意的!在我们的情形中,单周期内索引N-1等价于-1;若考虑围绕N/2中点的一个周期,很容易看出该函数确实是奇函数。
[[3]](https://eli.thegreenplace.net/2026/notes-on-discrete-time-fourier-series-and-transform#footnote-reference-3)请注意,在的求和公式中我们使用而非,因为在所选范围内两者相等。
相似文章
傅里叶变换笔记
深入探索傅里叶变换,从傅里叶级数出发,延伸至非周期函数,包含交互式可视化与数学推导。
手工计算离散傅里叶变换
本文提供了手工计算离散傅里叶变换(DFT)的逐步指南,展示其涉及类似深度神经网络中的矩阵乘法。
快速傅里叶变换 第一部分:库利-图基算法
本文详细推导了库利-图基快速傅里叶变换算法的数学原理,并解释了它如何降低离散傅里叶变换的复杂度。
观察圆圈、正弦与信号
介绍一个交互式网站,通过可视化和动画解释离散傅里叶变换和数字信号处理概念。
一个有趣的傅里叶变换 – 1/f 噪声
本文解释了幂律函数的傅里叶变换,重点关注1/f噪声这一有趣情况,以及时域和频域之间的对称性。