我有一个周期性的术语
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/