在代码的角度理解傅里叶变换
C++代码傅里叶变换如下

#include <stdio.h> #include <math.h> #define pi 3.1415926 #define rows 3 #define colums 5 typedef struct { float re;// really float im;// imaginary }complex, * pcomplex; complex complexadd(complex a, complex b) //复数加 { complex rt; rt.re = a.re + b.re; rt.im = a.im + b.im; return rt; } complex complexMult(complex a, complex b) //复数乘 { complex rt; rt.re = a.re * b.re - a.im * b.im; rt.im = a.im * b.re + a.re * b.im; return rt; } //离散傅里叶变换 void dft(complex F[], complex x[], int N) //X[]标识变换后频域,x[]为时域采样信号 { complex temp; int k, n; for (int k = 0; k < N; k++) { F[k].re = 0; F[k].im = 0; for (int n = 0; n < N; n++) { temp.re = (float)cos(2 * pi * k * n / N); temp.im = -(float)sin(2 * pi * k * n / N); F[k] = complexadd(F[k], complexMult(x[n], temp)); } F[k].re = F[k].re / N; F[k].im = F[k].im / N; } }
其中复数加法可以理解为向量相加,复数的乘积可以理解为拉伸与旋转,下图出自:如何理解复数的四则运算? - 知乎 (zhihu.com)
傅里叶的核心代码 :F[k] = complexadd(F[k], complexMult(x[n], temp));就是把时域函数值(虚部全部为0的特殊的复数函数)依次拉伸1倍并旋转2pi * k * n/N弧度再累加起来再除以N就是频率为k的三角函数,用(a,bi)来表示。
验证可参考C++用代码验证“一切函数皆可傅里叶” - 阿坦 - 博客园 (cnblogs.com)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧