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

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管理
行使您的权利
官方最新发布
STM32Cube扩展软件包
意法半导体边缘AI套件
ST - 理想汽车豪华SUV案例
ST意法半导体智能家居案例
STM32 ARM Cortex 32位微控制器
关注我们
st-img 微信公众号
st-img 手机版