吃肉的考拉 发表于 2014-4-16 16:57

FFT库计算后幅值不准确

        fft.ipcbptr = ipcb;
        fft.magptr = mag;
        fft.init(&fft);

        for(;;)
        {
                for(i = 0;i < N;i++)
                {
                        ipcb=0.7*sin(PI*2*i*Fn/Fs)*2147483648;
                }
                fftflag=1;
                fft_subroutine();        //KickDog();       
        }


}



void fft_subroutine()
{
        int i;

        mag_temp = 0;

    if (fftflag==1)   // If the samples are acquired
    {
             
           RFFT32_brev(ipcb,ipcb,N);

       fft.calc(&fft);
           fft.split(&fft);
       fft.mag(&fft);

           for(i=0;i<(N/2+1);i++)
           {
                   if(mag > mag_temp)
                {
                        mag_temp = mag;
                        freq = i;                       
                }
                else
                {
                        ;
                }
           }

              max_mag = 2*(float)sqrt(mag_temp)/sqrt(1073741824);
              freq =(float) Fs/N*freq+0.0;
                     
       fftflag=0;      // Enable the next acquisition
         
    }

}采样点数N为512 不变,FS为采样频率,Fn是被采频率,对于同一幅值,FS和Fn改变时,有的时候算的准 有点时候误差好大。。。

wangch_sh 发表于 2014-4-16 18:52

要满足香农定理。

吃肉的考拉 发表于 2014-4-16 19:07

wangch_sh 发表于 2014-4-16 18:52 static/image/common/back.gif
要满足香农定理。

不是只要满足采样定理就可以了啊

吃肉的考拉 发表于 2014-4-16 19:12

吃肉的考拉 发表于 2014-4-16 19:07 static/image/common/back.gif
不是只要满足采样定理就可以了啊

一回事吧

吃肉的考拉 发表于 2014-4-16 21:02

实验发现采样率最好是2的N次,结果比较准,不知道是不是你说的那个定理

wangch_sh 发表于 2014-4-16 21:25

一回事。FFT都是处理2的N次方个数据,方便计算。你可以看看数字信号处理得书。

吃肉的考拉 发表于 2014-4-17 09:17

wangch_sh 发表于 2014-4-16 21:25 static/image/common/back.gif
一回事。FFT都是处理2的N次方个数据,方便计算。你可以看看数字信号处理得书。 ...

嗯,采样点数要求是2的N次方,我采集的是512个点,但是采样频率只要是信号的2倍以上就可以了吧,课我现在的结果是只有采样频率也是信号的2的N次方时,幅值才计算的准确

wangch_sh 发表于 2014-4-17 17:54

那就不清楚啦。

aresc 发表于 2014-4-18 09:32

本帖最后由 aresc 于 2014-4-18 09:33 编辑

建议楼主搜索一下一个老帖子关于FFT结果的物理意义,相信你会明白是为什么了!

帖子在这:https://bbs.21ic.com/forum.html?mod=viewthread&tid=125751

icekoor 发表于 2014-8-8 15:30

吃肉的考拉 发表于 2014-4-17 09:17 static/image/common/back.gif
嗯,采样点数要求是2的N次方,我采集的是512个点,但是采样频率只要是信号的2倍以上就可以了吧,课我现在 ...

不是你理解的那样,当采样点N满足2^r或者是4^r时,采用FFT库运算效率会很高,因为FFT库是按照2^r或者是4^r编写的。当然采样点还可以不满足2^r,这时可以采用任意数为基数的FFT算法。至于采样频率的选择,要根据你的采样点数N和关注的频率f,不能随意设定,不然结果就不对了,采样频率为两种的乘积,即为N*f。
页: [1]
查看完整版本: FFT库计算后幅值不准确