【发布时间】:2012-08-15 16:58:35
【问题描述】:
我对傅里叶变换的有限理解是,您应该能够在不更改原始数据的情况下在时域和频域之间切换。所以,这里是我(认为我)在做什么的总结:
使用
kiss_fft_next_fast_size(994)来确定我应该使用1000。使用
kiss_fft_alloc(...)创建带有nfft = 1000的kiss_fft_cfg。通过将额外点填充为零,将我的输入数据从 994 大小扩展到 1000。
将 kiss_fft_cfg 与我的输入和输出数组一起传递给
kiss_fft(...)。使用
kiss_fft_alloc(...)创建带有nfft = 1000的inverse Kiss_fft_cfg。将inverse Kiss_fft_cfg传递给
kiss_fft(...),输入前一个输出数组。期待原始数据返回,但每个数据都恰好大 1000 倍!
我已经输入了full example here,我的 50 多行代码就在末尾strong>。虽然我可以通过将每个结果除以 OPTIMAL_SIZE 的值(即 1000)来解决这个问题,但这个修复让我非常不安,不明白为什么。
你能告诉我我做错了什么愚蠢的事情吗?
【问题讨论】:
-
就像积分一样——我们通常不会提到常数。
-
这真的取决于实现。检查有关缩放的 Kiss 文档。通常,除以 n 是逆 FFT 例程的一部分。看起来他们在 Kiss 中跳过了这一步。
标签: c++ signal-processing fft kissfft