c++ - 在 fftw 中计算 3D 功率谱

标签 c++ fftw

我正在尝试计算 3D 功率谱——即频率壳中的平均功率。我想我正确地计算了壳密度,我只是不确定如何确定每个壳的频率。

假设每个维度的采样率Fs相同,每个维度的原始样本长度也为相同的值N。外壳“索引”是 idx = sqrt(i*i + j*j + k*k) 其中 i、j 和 k 是每个方向的范围。如何计算此 shell 的频率?

最佳答案

它比您想象的要简单: vector (i, j, k) 已经是 wave vector ,因此您可以通过获取其长度并将其除以立方体边缘的长度来获得相关频率。

f = sqrt(i*i + j*j + k*k)/edgelength

结果是空间频率。如果您正在寻找时间频率,则需要一些将两者联系在一起的附加信息。

您唯一需要注意的是零频率在 fft 变换立方体中的位置:一些算法会将其放置在左上角,其他算法会将其放置在中心。无论在哪里,您都需要注意不要将低频误解为相反方向的混叠高频,即。 e. i, j, k 的绝对值应始终小于立方体宽度的一半。

关于c++ - 在 fftw 中计算 3D 功率谱,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36729067/

相关文章:

c++ - 函数参数到子类c++的转换

c++ - 是否可以在 C++ 中初始化一个 vector 并同时返回它?

compilation - P3DFFT 编译 - "Undefined reference"但库已链接

g++ - 对于实际变换计算,FFTW 是否明显优于 GSL?

c++ - 在 C++ 中重组 vector

c++ - 删除不必要的包含时的最佳实践是什么?

c++ - 基准测试、代码重新排序、 volatile

ios - 为 iOS 构建 fftw

c++ - 使用 boost::graph 获取特定边缘

android - 使用 Android NDK 调用嵌套函数后应用程序被挂起