使用FFTW的fftw_plan_dft_c2r_1d()由于未归一化结果错误的解决方案

1 致谢

感谢congwulong网友的博文
链接如下:http://blog.csdn.net/congwulong/article/details/7576012
congwulong网友的这篇文章写得很好 虽然很大一部分是转载的
但是加入了自己的修改和补充 尤其对于我关于fftw_plan_dft_c2r_1d()问题的解决起到了很大的帮助
在此表示感谢

2 问题描述

今天又在继续FFTW的编程 今天编程时遇到了一个很奇怪的问题
让我思考了很久 我使用了FFTW中的fftw_plan_dft_r2c_1d()和fftw_plan_dft_c2r_1d()分别进行正反变换来进行计算
初步整体测试的时候结果一直不正确 后来我就进行了一下单元测试
单元测试的时候我是这样进行的 令输入实数组f = [1 2 … i+1 …]
然后直接使用上面的这两个函数 进行正反变换
以验证这两个函数的正确性 后来发现结果如下


其中result111是对比数据 这里不作叙述
其中result222才是测试的结果
按照设想来说 f经过正反变换之后应当会还原为原来的序列
但是这里并没有显示出与f相同的数值 让人感到十分奇怪
根据观察之后 发现这里的数值是有规律的分别是[1*8192 2*8192 … (i+1)*8192 …]
这让我想到了以前学习连续时间变换FFT时说到的归一化十分相似 因为这里我们的帧长就是8192*2 = 16384
所以我猜测可能跟fftw_plan_dft_c2r_1d()函数的性质有关
于是我就百度了一下 找到上面的博文

3 解决方案

直接用Ctrl+F搜索了一下“归一化”的关键字之后 看到这样的内容


看到这里我就明白了 果然是因为没有归一化的原因
所以最后得到的序列还需要进行归一化的处理 
这里通过以上的测试可以看出 
单序列正反变换的归一化处理时:除以N/2

4 测试

测试成功

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值