打印
[DSP编程]

FFT库计算后幅值不准确

[复制链接]
3674|9
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
吃肉的考拉|  楼主 | 2014-4-16 16:57 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
fft, pc, ip, IPC, PCB
        fft.ipcbptr = ipcb;
        fft.magptr = mag;
        fft.init(&fft);

        for(;;)
        {
                for(i = 0;i < N;i++)
                {
                        ipcb[i]=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[i] > mag_temp)
                {
                        mag_temp = mag[i];
                        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
要满足香农定理。

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

使用特权

评论回复
地板
吃肉的考拉|  楼主 | 2014-4-16 19:12 | 只看该作者
吃肉的考拉 发表于 2014-4-16 19:07
不是只要满足采样定理就可以了啊

一回事吧

使用特权

评论回复
5
吃肉的考拉|  楼主 | 2014-4-16 21:02 | 只看该作者
实验发现采样率最好是2的N次,结果比较准,不知道是不是你说的那个定理

使用特权

评论回复
6
wangch_sh| | 2014-4-16 21:25 | 只看该作者
一回事。FFT都是处理2的N次方个数据,方便计算。你可以看看数字信号处理得书。

使用特权

评论回复
7
吃肉的考拉|  楼主 | 2014-4-17 09:17 | 只看该作者
wangch_sh 发表于 2014-4-16 21:25
一回事。FFT都是处理2的N次方个数据,方便计算。你可以看看数字信号处理得书。 ...

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

使用特权

评论回复
8
wangch_sh| | 2014-4-17 17:54 | 只看该作者
那就不清楚啦。

使用特权

评论回复
9
aresc| | 2014-4-18 09:32 | 只看该作者
本帖最后由 aresc 于 2014-4-18 09:33 编辑

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

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

使用特权

评论回复
10
icekoor| | 2014-8-8 15:30 | 只看该作者
吃肉的考拉 发表于 2014-4-17 09:17
嗯,采样点数要求是2的N次方,我采集的是512个点,但是采样频率只要是信号的2倍以上就可以了吧,课我现在 ...

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

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

19

主题

58

帖子

0

粉丝