在 fftw 中计算 3D 功率谱
Computing a 3D power spectrum in fftw
我正在尝试计算 3D 功率谱——即频率 shells 的平均功率。我认为我正在正确计算 shell 密度,我只是不确定如何确定每个 shell 的频率。
假设每个维度的采样率Fs
相同,每个维度原始样本的长度也是相同的值N
。 shell "index" 是 idx = sqrt(i*i + j*j + k*k)
,其中 i、j 和 k 是每个方向的范围。如何计算此 shell?
的频率
它比您想象的要简单:矢量 (i, j, k)
已经是 wave vector,因此您可以通过取其长度并将其除以立方体边缘的长度来获得关联的频率。
f = sqrt(i*i + j*j + k*k)/edgelength
结果就是空间频率。如果您正在寻找时间频率,则需要一些将两者联系在一起的附加信息。
您唯一需要注意的是零频率在 fft 变换立方体中的位置:一些算法会将其放置在左上角,其他算法会将其放置在中心。无论在哪里,您都需要注意不要将低频误解为相反方向的混叠高频,即。 e. i, j, k
的绝对值应始终小于立方体宽度的一半。
我正在尝试计算 3D 功率谱——即频率 shells 的平均功率。我认为我正在正确计算 shell 密度,我只是不确定如何确定每个 shell 的频率。
假设每个维度的采样率Fs
相同,每个维度原始样本的长度也是相同的值N
。 shell "index" 是 idx = sqrt(i*i + j*j + k*k)
,其中 i、j 和 k 是每个方向的范围。如何计算此 shell?
它比您想象的要简单:矢量 (i, j, k)
已经是 wave vector,因此您可以通过取其长度并将其除以立方体边缘的长度来获得关联的频率。
f = sqrt(i*i + j*j + k*k)/edgelength
结果就是空间频率。如果您正在寻找时间频率,则需要一些将两者联系在一起的附加信息。
您唯一需要注意的是零频率在 fft 变换立方体中的位置:一些算法会将其放置在左上角,其他算法会将其放置在中心。无论在哪里,您都需要注意不要将低频误解为相反方向的混叠高频,即。 e. i, j, k
的绝对值应始终小于立方体宽度的一半。