大星海 发表于 2017-10-24 18:04:32

arm_cfft_radix2_q31 无法还原频率点的能量

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


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


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


大星海 发表于 2017-10-24 18:07:22

arm_cfft_radix2_instance_q31 ifft;
arm_cfft_radix2_instance_q31 scfft;

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

for(i=0;i<FFT_LENGTH;i++)//生成信号序列
                        {
                               fft_inputbuf = 0;
                               if(i == 500){
                                          fft_inputbuf = 2147483648;
                               }else{
                                          fft_inputbuf = 0;
                               }
                        }
arm_cfft_radix2_q31(&ifft,fft_inputbuf);

arm_cfft_radix2_q31(&scfft,fft_inputbuf);
arm_cmplx_mag_q31(fft_inputbuf,fft_outputbuf,FFT_LENGTH);

大星海 发表于 2017-10-24 18:06:20

代码没有显示出来

uwyciw100 发表于 2017-10-25 08:21:25

大星海 发表于 2017-10-24 18:07


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

uwyciw100 发表于 2017-10-25 08:21:54

大星海 发表于 2017-10-24 18:07


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得到的结果是多少。 ...

知道这是什么原因吗?
页: [1] 2
查看完整版本: arm_cfft_radix2_q31 无法还原频率点的能量