傅里叶级数展开可视化工具
免费的傅里叶级数展开可视化工具。可选择方波、三角波、锯齿波、半波整流,把项数从1调到50,实时观察部分和如何逼近原波形,并查看各次谐波的频谱与吉布斯现象带来的过冲。
什么是傅里叶级数展开
傅里叶级数展开是把周期函数改写成正弦波与余弦波之和的方法。本工具针对方波、三角波、锯齿波、半波整流这四种典型波形,直接采用教科书上的闭式系数,让您通过滑块改变叠加到第几次谐波,在图上观察部分和逐步逼近原波形的过程。由于没有使用数值积分,页面显示的系数在双精度浮点数的舍入误差范围内是精确值。
本工具最值得留意的地方,是四种波形的收敛速度截然不同。方波与锯齿波的系数按 1/n 衰减,即使叠加相当多的项,转角附近的波纹依然不会消失;三角波的系数按 1/n² 衰减,大约十项就几乎与原波形重合。对于含真正跳变的波形,无论叠加多少项,跳变前约 9% 的过冲都会保留下来,这一点可以通过「部分和的最大值」一栏用数值追踪。
傅里叶级数展开可视化工具的使用方法
- 选择波形 可在方波、三角波、锯齿波、半波整流四者中选择。选定后,下方会立即显示该波形的展开式及其收敛特点。
- 拖动项数滑块 项数 N 可在 1 到 50 之间调整。图中橙色实线为部分和,灰色虚线为原波形。
- 阅读收敛指标 均方根误差与最大误差会用数值告诉您,每增加一项能带来多少改善。部分和的最大值则用于衡量过冲。
- 对照系数表与频谱 柱状图与表格都会显示各次谐波所占的振幅。以方波为例,可以一眼看出所有偶次谐波都是空的。
用好本工具的小技巧
- 把方波依次设为 N = 5、15、45,会发现波纹的个数增加了,高度却几乎没变。这就是吉布斯现象,无论叠加多少项,过冲都停留在约 9%。
- 在相同项数下比较三角波与方波,1/n² 与 1/n 的衰减差别会立刻显现,误差数值通常会相差一个数量级以上。
- 只有半波整流带有常数项。整流电路的输出为什么会留下直流分量,答案就是展开式中的 1/π 这一项。
- 如果想得到自己定义的函数的系数,请使用以数值积分求出 a₀、aₙ、bₙ 的傅里叶系数计算工具。
傅里叶级数展开可视化工具的应用场景
在大学课程或电路教科书中学到时
只看闭式公式很难想象收敛的样子。拖动项数、看着波形逐步成形,公式的形状与结果就能对应起来。
处理谐波失真时
方波只含奇次谐波、锯齿波还含偶次谐波,这是滤波器设计与电磁兼容讨论的前提。频谱柱状图能让这种差别一目了然。
学习信号处理中的振铃时
限制项数正对应于限制带宽,转角附近看到的波纹,与陡峭低通滤波器造成的振铃是同一回事。
说明乐器音色时
基频相同的两个音,只要谐波成分不同,音色就会不同。方波与三角波频谱的差异是最直观的例子。
傅里叶级数展开的相关术语
- 傅里叶级数
- 把周期函数表示为若干正弦波与余弦波之和,这些波的周期是原周期的整数分之一。理论上项数无穷多。
- 部分和
- 把无穷级数截断到第 N 项后得到的有限和。本页的橙色实线就是部分和。
- 基波
- 级数中 n = 1 的成分,其周期与原函数相同。对声音而言,决定音高的正是这一成分。
- 谐波
- 频率为基波整数倍的成分。第 n 次谐波的频率是基波的 n 倍,它决定音色以及波形转角的锐利程度。
- 直流成分
- 频率为 0 的成分,等于函数在一个周期上的平均值。本工具将其显示为常数项 a₀/2。
- 吉布斯现象
- 含跳变点的函数在傅里叶部分和中,于跳变前出现过冲的现象。增加项数只会缩小受影响的区间,过冲仍保持在约 9%。
- 均方根误差
- 把原波形与部分和之差在一个周期上取平方平均再开方所得的值,是衡量整体拟合程度的常用指标。
关于傅里叶级数展开的常见问题
闲话 ― 曾被认为「带转角的函数不可能由光滑曲线拼出」的年代
傅里叶级数的起点,是约瑟夫·傅里叶在 1807 年为求解热传导问题而引入的想法。当时人们并不接受:带有转角的函数居然能写成完全光滑的三角函数之和,在拉格朗日等同时代数学家看来显然说不通,傅里叶因此遭到强烈反对。事实上他们也并非全错——并不是每个函数的级数都在每一点收敛——而弄清究竟哪些函数可以收敛,成了推动 19 世纪分析学的核心问题之一。狄利克雷的收敛条件与黎曼积分的严格构造,都由此而来。
吉布斯现象得名于物理学家约西亚·威拉德·吉布斯,但最早指出这一现象的是英国数学家亨利·威尔布拉汉姆,时间是 1848 年。吉布斯在 1898 年撰文讨论后,他的说法流传最广,名字也就此固定下来。过冲量约为 8.95% 这个看似古怪的数字,来自正弦积分函数的最大值,而且在任何波形的任何跳变点上都是同一个值。
这种过冲至今仍出现在工程实践中。把数字音频的高频切掉,就会产生前回声——在真正的起音之前先听到一丝声音;对图像做同样处理,则会出现紧贴锐利边缘的振铃条纹。压缩率过高的 JPEG 在分块边界上看到的模糊,根源也是同一现象。滤波器设计中精心选择窗函数,某种意义上就是在协商愿意接受多少这样的过冲——而拖动本页的项数滑块,可以让您亲眼看到这场交易究竟牺牲了什么。