mos*_*osi 4 c++ signal-processing fft kissfft
我对傅里叶变换的有限理解是,您应该能够在时域和频域之间切换,而无需更改原始数据.所以,这里是我(我想)我在做什么的总结:
使用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)的值来解决这个问题,但是如果没有理解为什么那么修复会使我感到非常不安.
请问你能说出我做错的愚蠢事吗?
use*_*136 14
这是可以预期的:反向离散傅立叶变换(可以使用快速傅里叶变换实现),需要除以1/N:
乘以DFT和IDFT(此处为1和1/N)的标准化因子和指数的符号仅仅是惯例,并且在一些处理方面不同.这些约定的唯一要求是DFT和IDFT具有相反符号指数,并且它们的归一化因子的乘积为1/N. 对于DFT和IDFT,\ sqrt {1/N}的归一化使得变换是单一的,这具有一些理论上的优点.但是,如上所述,在数值计算中通常更加实际地一次执行缩放(并且单位缩放在其他方面可以是方便的).
http://en.wikipedia.org/wiki/Dft
| 归档时间: |
|
| 查看次数: |
1564 次 |
| 最近记录: |