2011-03-07 18 views
0

我已经为我正在处理的数据集编码了FFT。我的目的是创建一个结果的瀑布图,但我遇到的问题是如果我改变我的输入数据大小,然后我得到不同数量的频率箱。目前,我只是将我的输入数据集制作为我需要映射到的像素数量的两倍。我试图找出将任何数据集大小的频率分区映射到特定数量的像素的方法。例如,将500个值的数组映射到长度为1250个元素的数组。如果可以选择对数据映射执行线性和非线性插值,将会很不错。我也可能需要另辟蹊径,比如将值映射到300个元素的数组。我不是数学专业,我在这个问题上留下了一个空白。重新映射C#中的FFT频率仓分布

回答

2

所有你需要做的就是将你的输入零填充到你想要显示的像素数。这可以通过简单地将零添加到输入中来使其达到所需的像素长度。 FFT执行时,将在零填充后的长度完成,并为您提供与像素相同数量的输出采样。

当您填零FFT输入时,FFT会自动在频域内插。检查this了。注意,即使频域样本的数量增加,但实际上并没有在频域中提供任何更多信息(新的频率内容不会仅通过使用此方法出现)。这只是对现有数据进行过采样。

我不确定去其他方式的最佳方式(缩减采样),但我认为一种方法是转换您需要的前N个采样。你会因此丢失数据,但取决于应用程序可能并不重要。

+0

降采样最好在FFT后完成,降低高频。 – wnoise 2011-03-07 22:00:30

+0

这对于增加数据点的数量是一个很好的建议。我几乎有办法让样品完成。 – Davido 2011-03-08 16:22:42

1

离散傅立叶变换(快或不)将总是给你输入数组相同大小的输出数组。如果您想扩展它,那么您需要查看使用sinc函数和适当的窗口。见例如http://en.wikipedia.org/wiki/Lanczos_resampling

+0

我想我可能在我的问题上有点不清楚。基本上我想要输出数组并插入它的值,以将其映射到具有不同长度的数组,或者更小或更大。如果这就是Lanczos重新采样所做的那样,那么它可能会超出我的头。它看起来像是沿着正确的路线,但我不知道如何实现它。 – Davido 2011-03-07 20:13:22

+0

@Davido,就是这样。如果你环顾四周,我希望你能找到一个实现它的图书馆。 – 2011-03-07 22:52:47