有两个不同但相关大小的向量.较大的是(2 * RESOLUTION) + INDEX_OFFSET(例如2050)而较小的是RESOLUTION(例如1024).我认为它足够安全,可以假设它uint16_t可以用来包含向量索引.
通过递增resultIndex2 来执行通过较大向量的迭代.在每次迭代期间,对索引处的较小向量进行赋值(resultIndex - INDEX_OFFSET) / 2.
本质上,代码依赖于以下假设:无论INDEX_OFFSET是奇数还是偶数,上面的2除以总是向下舍入,无论架构如何.例如,如果resultIndex是0或1,则预期为0,如果是2或3则预期为1,依此类推.在上述参数范围内,这是一个安全的假设吗?
NB我承认存在'划分整数类型 - 结果是否可预测?' 但它似乎并不完全匹配.
我对傅里叶变换的有限理解是,您应该能够在时域和频域之间切换,而无需更改原始数据.所以,这里是我(我想)我在做什么的总结:
使用kiss_fft_next_fast_size(994)以确定我应该使用1000.
使用kiss_fft_alloc(...)创建kiss_fft_cfg用nfft = 1000.
通过将额外点填充为零,将输入数据从大小994扩展到1000.
将kiss_fft_cfg传递给kiss_fft(...)我的输入和输出数组.
使用kiss_fft_alloc(...)创建逆kiss_fft_cfg用nfft = 1000.
传递逆kiss_fft_cfg以kiss_fft(...)输入先前的输出数组.
期待原始数据回来,但每个数据准确地大1000倍!
我在这里放了一个完整的例子,最后可以找到我的50多行代码.虽然我可以通过将每个结果除以OPTIMAL_SIZE(即1000)的值来解决这个问题,但是如果没有理解为什么那么修复会使我感到非常不安.
请问你能说出我做错的愚蠢事吗?