Skip to content

算法Algorithm

谱混叠与去混叠

Spectral aliasing · Dealiasing

从频率模网格数的折叠推导二次非线性的补零与截断规则,完整算出一个伪低频反例。

形式陈述 ​

非线性乘积为什么能把不存在的低频制造出来?在 N 个等距周期点 xj=2πj/N 上,ei(k+ℓN)xj=eikxj。因此连续函数的频率相差 N 的整数倍时,采样无法区分。

若两个三角多项式的频率范围都是 |k|≤K,它们的乘积包含 |k|≤2K。在原来的 N=2K+1 个点相乘再作变换,会把频率按模 N 折回。伪谱计算得到的是折叠后的离散卷积,而非连续乘积的全部 Fourier 系数。

对只保留 |k|≤K 的二次乘积,使用 M>3K 个网格点即可使任何 |s|≤2K 的高频都不再折入保留区:若 s−k 是非零的 M 倍数,则 |s−k|≤3K<M,矛盾。这给出常说的约 3/2 倍补零规则,并明确了边界取整条件。

直觉

原网格像只显示钟面刻度的钟。转了一圈的高频与低频落在同一刻度上,采样只看到余数。乘积把频带加宽,旧钟面容纳不下时,就需要先用更多网格点辨认这些频率,再删去不需要的高频。

例子与边界

七点网格上的伪低频 ​

取 K=3,N=7,u(x)=cos⁡3x。真实平方为

u(x)2=12+12cos⁡6x.

因为在七点网格上 6≡−1(mod7),cos⁡6xj=cos⁡xj,所以原网格的插值平方是 12+12cos⁡x。若要把真实乘积投影到 |k|≤3,正确结果只有常数 1/2;那条振幅 1/2 的一阶余弦完全是混叠造成的。

补到 M=10>9 个点后,频率 6 折为 −4,仍在保留带 [−3,3] 外。截取低频后就得到正确常数。去混叠的目标是正确计算保留模态,未要求补零网格完整保留全部乘积频率。

实际算法 ​

先把输入 Fourier 系数按频率位置嵌入较长数组,高频补零;逆变换到细网格;逐点相乘;变换回系数;截取原保留带。若 FFT 使用未归一化正变换与带 1/M 的逆变换,补零时应按所选系数定义补偿 M/N 等尺度,最好用常数函数验证。

固定原网格时,另一做法是在相乘前和相乘后都截去最高约三分之一模态。对二次非线性,保留 |k|<N/3 可阻止折叠重新进入保留区,这就是 2/3 截断规则。严格不等号处理临界模态;不同偶奇和 Nyquist 约定应单独核对。

推论与应用

补零法的变换成本仍为 O(Nlog⁡N),常数增加;截断法计算较省,但减少有效带宽。三次及更高次非线性需要重新计算频带增长,不能机械沿用二次的 3/2 比例。

去混叠修正的是离散乘法,不会恢复本来没有解析的尖峰或间断,也不会修正时间积分误差。可用本页的单模态平方作为回归测试,专门隔离这项错误。

参考资料
关系图谱5 个相邻概念 · 1 类关系

拖动节点调整位置。

显示关系

显示:依赖

  1. 前置三跳
  2. 前置二跳
  3. 前置一跳
  4. 当前条目
  5. 后续一跳
  6. 后续二跳
  7. 后续三跳
文字版关系按与当前条目的最短距离分组