【问题标题】:Computing a 3D power spectrum in fftw在 fftw 中计算 3D 功率谱
【发布时间】:2016-08-12 06:17:30
【问题描述】:

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

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

【问题讨论】:

  • 什么是“频率壳”?这听起来更像是一个物理问题,而不是一个编程问题。通常,实值空间域体数据集的离散傅里叶变换将产生复值频域体数据集。看来您想要一些不同的东西。
  • 不完全确定您要问什么。您是想问如何设置 FFTW 计划、执行计划或解释结果吗?
  • @MooseBoys 我的意思是我想平均每个频率的密度值 (f x f*)。它是一个壳,因为它是 3D 的,它在 2D 中是一个圆。
  • @RyanP 抱歉,询问如何解释结果。在我打电话给fftw_plan_dft_r2c_3d 之后,我得到了三个维度的密度值。我在每个外壳上平均这些(radius = sqrt(i*i + j*j + k*k) 是相同的)。我的问题是,那个半径的频率是多少?
  • 三个频率,每个维度一个,不是一个频率。

标签: c++ fftw


【解决方案1】:

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

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

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

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

【讨论】:

  • 谢谢!在this answer 一维系统中,@Paul R 说 bin i 的频率是 freq = i * Fs / N。我是否同样通过将采样率除以一维范围来计算unitlength
  • 我原来的版本错了:除数不是单位长度,而是样本的长度,看我回答的更新版本。 Paul R 的回答是正确的:N/Fs 是样本的长度,所以i*Fs/Ni/samplelength 相同。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-05-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-14
  • 2015-05-24
相关资源
最近更新 更多