你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

arm_cfft_radix2_q31 无法还原频率点的能量

[复制链接]
大星海 提问时间:2017-10-24 18:04 /
  1. arm_cfft_radix2_instance_q31 ifft;
  2.         arm_cfft_radix2_instance_q31 scfft;
复制代码

得出的fft_outputbuf信号能量很弱,只有131071;



我试过用arm_cfft_radix2_f32,这个得出结果就是正确的,可以还原出2147483648;



这是问什么啊?有什么特定的设置么



收藏 1 评论13 发布时间:2017-10-24 18:04

举报

13个回答
大星海 最优答案 回答时间:2017-10-24 18:07:22
  1. arm_cfft_radix2_instance_q31 ifft;
  2. arm_cfft_radix2_instance_q31 scfft;

  3. arm_cfft_radix2_init_q31(&ifft,FFT_LENGTH,1,1);//初始化scfft结构体,设定FFT相关参数
  4. arm_cfft_radix2_init_q31(&scfft,FFT_LENGTH,0,1);//初始化scfft结构体,设定FFT相关参数

  5. for(i=0;i<FFT_LENGTH;i++)//生成信号序列
  6.                         {
  7.                                  fft_inputbuf[2*i+1] = 0;
  8.                                  if(i == 500){
  9.                                           fft_inputbuf[2*i] = 2147483648;
  10.                                  }else{
  11.                                           fft_inputbuf[2*i] = 0;
  12.                                  }
  13.                         }
  14. arm_cfft_radix2_q31(&ifft,fft_inputbuf);

  15. arm_cfft_radix2_q31(&scfft,fft_inputbuf);
  16. arm_cmplx_mag_q31(fft_inputbuf,fft_outputbuf,FFT_LENGTH);
复制代码
大星海 回答时间:2017-10-24 18:06:20
代码没有显示出来
uwyciw100 回答时间:2017-10-25 08:21:25

1、楼主代码的意图是生成一个幅度为2147483648的冲激信号,而后做FFT,得到值同样为2147483648的恒值序列吗?
2、cfft是算复序列的,楼主生成的序列里是否有考虑?
3、f32和q31的区别,2147483648将有不一样的含义。

评分

参与人数 1ST金币 +3 收起 理由
zero99 + 3

查看全部评分

uwyciw100 回答时间:2017-10-25 08:21:54

1、楼主代码的意图是生成一个幅度为2147483648的冲激信号,而后做FFT,得到值同样为2147483648的恒值序列吗?
2、cfft是算复序列的,楼主生成的序列里是否有考虑?
3、f32和q31的区别,2147483648将有不一样的含义。
大星海 回答时间:2017-10-25 09:33:15
uwyciw100 发表于 2017-10-25 08:21
1、楼主代码的意图是生成一个幅度为2147483648的冲激信号,而后做FFT,得到值同样为2147483648的恒值序列 ...

1、我是先产生一个幅值为2147483648,频率点在500的频谱信号,然后做了下ifft变成时域信号;然后再将生成的时域信号做fft、求模,等到最终的频域信号fft_outputbuf;
2、cfft是算复序列的,但是这个arm_cmplx_mag_q31方式是将输入信号转成实部的值的,这个有问题吗,我不是很清楚...
3、q31是int,f32是float,都是32位的,可能我取得2147483648这个值有些误解,即使降低4倍变成536870912,结果也是这样:f32求得的fft_outputbuf最大值是536870912,但是q31求得的最大值就非常小....
uwyciw100 回答时间:2017-10-25 10:23:52
大星海 发表于 2017-10-25 09:33
1、我是先产生一个幅值为2147483648,频率点在500的频谱信号,然后做了下ifft变成时域信号;然后再将生成 ...

试了下,用浮点确实可以得到想要的结果。你用536870912得到的结果是多少。
大星海 回答时间:2017-10-25 11:03:42
uwyciw100 发表于 2017-10-25 10:23
试了下,用浮点确实可以得到想要的结果。你用536870912得到的结果是多少。 ...

输入536870912,然后用f32得到的结果就是536870912
大星海 回答时间:2017-10-25 11:04:19
uwyciw100 发表于 2017-10-25 10:23
试了下,用浮点确实可以得到想要的结果。你用536870912得到的结果是多少。 ...

但是用q31,结果好像只有32768,反正值很小的
大星海 回答时间:2017-10-26 14:22:48
uwyciw100 发表于 2017-10-25 10:23
试了下,用浮点确实可以得到想要的结果。你用536870912得到的结果是多少。 ...

知道这是什么原因吗?
大星海 回答时间:2017-11-1 17:06:14
uwyciw100 发表于 2017-10-25 10:23
试了下,用浮点确实可以得到想要的结果。你用536870912得到的结果是多少。 ...

大神,可以帮忙看看么~~
uwyciw100 回答时间:2017-11-1 17:33:47
大星海 发表于 2017-11-1 17:06
大神,可以帮忙看看么~~

,是什么原因,我也确实没想出来,不好意思啦。
大星海 回答时间:2017-11-13 14:16:57

评分

参与人数 1ST金币 +2 收起 理由
zero99 + 2 结帖奖励

查看全部评分

无薪税绵 回答时间:2017-12-18 12:38:09
数据类型应该是用 unsigned int 才对吧。

所属标签

相似问题

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版