algorithm - Matlab 中的离散傅里叶变换 - 理论困惑

标签 algorithm matlab fft dft

我有一个周期性的术语

v(x) = sum over K of [exp(iKx) V(K) ] 

其中 K =2*pi*n/a 其中 a 是项的周期,n =0,1,2,3....

现在我想找到对应于特定 K 的傅里叶系数 V(K)。假设我有一个向量 v(x) 有 10000 个点

x = 0,0.01a,0.02a,...a,1.01a,....2a....100a 

这样我的格子的大小就是 100a。对该向量的 FFT 给出 10000 个傅立叶系数。这些傅立叶系数对应的K值为2*pi*n/(10000*0.01),其中n=0,1,2,3,...9999。

但是由于晶格的周期性,我的 K 具有 2*pi*n/a 的形式。我错过了什么?

最佳答案

您的函数可能并不复杂,因此您需要在复杂的傅立叶级数表达式中使用负频率。在 FFT 期间,这无关紧要,因为负频率与较高的正频率混叠,但在作为连续函数的表达式中,这可能会产生奇怪的结果。

这意味着如果 N 是采样的大小,则 n 的范围是从 -N/2 到 N/2-1。

请注意,如果您从 0a 以 0.01a 步长开始并以 100a 结束,则您给出的点数为 10001。所以N=10000点的最后一个点应该是100a-0.01a=99.99a。

您的采样频率是采样步长的倒数,Fs=1/(0.01a)。那么FFT的频率就是2*pi*n/N*Fs=2*pi*n/(10000*0.01a)=2*pi*n/(100*a),每100个对应一个你的 K.

这并不奇怪,因为采样超过了函数的 100 个周期,周期越长,基本频率就越低。如果信号 v(x) 确实是周期性的,则除 n 可被 100 整除的振幅外,所有振幅都将为零。如果由于噪声和测量误差导致信号不是完全周期性的,则峰值将泄漏到相邻频率中。要获得原始任务的正确结果,您必须对峰值上的振幅进行积分。

关于algorithm - Matlab 中的离散傅里叶变换 - 理论困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22026363/

相关文章:

java - JTransforms FFT 的大小与 MATLAB 的比较

java - 检查二维矩阵上的所选图 block 是否全部连接

javascript - 有什么办法可以自动可视化 JavaScript 代码树?

matlab - 在 MATLAB 中使用匿名函数会降低性能……其他人是否注意到了这一点?

c++ - 在 Matlab 中进行类型转换

java - android audioRecord-应用变化增益

c# - 没有从 Exocortex FFT 获得预期的输出

java - 代码在 java 中正常工作,但相同的代码在 C 中的某些测试用例中失败

c++ - 合并按 vector 排序的 N C++

matlab - 在 Matlab 中按下一个键停止无限循环