打印

请教关于fft运算结果,和matlab计算的对不上

[复制链接]
6710|11
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
lvgaopan|  楼主 | 2007-10-31 20:55 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
请教各位前辈,我在用2407a做fft运算实验,使用ti的库函数。但程序计算出来的结果和matlab计算出来的结果不一样(峰值频率对得上,但幅值不对)。
源程序如下:
#include "math.h"

#include "fft.h"

#define N 128 /* FFT Length */

#pragma DATA_SECTION(ipcb, "FFTipcb");
#pragma DATA_SECTION(mag, "FFTmag");
#pragma DATA_SECTION(win, "FFTwin");

FFT128C fft=FFT128C_DEFAULTS;

int ipcb[2*N]; /* In place computation buffer */
int mag[N]; /* Magnitude buffer */
int win[N/2]=HAMMING128; /* Window coefficient array */

int src[N];

#define PI (3.141592654)

main()

    int i;
    int peak,freq;

    disable();
    lf2407a_init();


    /* FFT initialization */
    fft.ipcbptr=ipcb; /* FFT computation buffer */
    fft.magptr=mag; /* Store mag. square in separate buff */
    fft.winptr=win; /* Window coefficient array */
    fft.init(); /* Copy Twiddle factor */
    /* Acquire samples in bit reversed order or
    Bit-reverse the in-order data using bit-rev utility */

    for(i=0;i<N;i++)
    {
        src = 32768 * cos(2*PI*i/N);
    }
    FFTC_brev1(src, ipcb, N);


    /* FFT Computation */
    fft.win(&fft); /* Window the input data */
    fft.izero(&fft); /* Zero the imaginary part */
    fft.calc(&fft); /* Compute the FFT */
    fft.mag(&fft); /* Obtain the magnitude square */

    peak=fft.peakmag;
    freq=fft.peakfrq;

    while(1);
}

结果分析请看下楼

相关帖子

沙发
lvgaopan|  楼主 | 2007-10-31 20:59 | 只看该作者

这是matlab计算的前六项结果

matlab上的操作:
i=0:127
src=cos((2*3.14159*i)/128)
fft(src)

第一项:-0.0001
第二项:64.0000 - 0.0002i   
第三项:0.0000 - 0.0000i   
第四项:0.0000 - 0.0000i   
第五项:0.0000 - 0.0000i   
第六项:0.0000 - 0.0000i

使用特权

评论回复
板凳
lvgaopan|  楼主 | 2007-10-31 21:05 | 只看该作者

计算结果ipcb

这个计算结果,我的理解是
第一项:-0.231201 + i0
第二项:0.266693 - i(3.05176e-05)
第三项:-0.11557 - i0.00283813
第四项:-0.00137329 + i0
第五项:(-9.15527e-05) + i0
第六项:-0.00195313 + i0

这个结果与matlab计算出来的结果明显不符。请问是我的理解有问题(该如何理解结果数据)?还是程序计算有问题(错在什么地方)?

谢谢

使用特权

评论回复
地板
lvgaopan|  楼主 | 2007-10-31 21:07 | 只看该作者

计算结果mag

使用特权

评论回复
5
computer00| | 2007-10-31 21:08 | 只看该作者

DSP中的为了防止运算结果溢出,做了归一化处理吧?

使用特权

评论回复
6
lvgaopan|  楼主 | 2007-10-31 21:09 | 只看该作者

峰值频率

使用特权

评论回复
7
lvgaopan|  楼主 | 2007-10-31 21:18 | 只看该作者

弱弱地问

什么是“归一化处理”?
好像在文档里看到有类似的描述,但不太理解。
如果这些数据是对的,那应该如何与matlab计算的数据对应起来?
谢谢

使用特权

评论回复
8
lvgaopan|  楼主 | 2007-10-31 21:33 | 只看该作者

归一化是不是这样理解?

比如有四个数,分别为

原数       归一化处理后
1     >>   0.25
2     >>   0.5
3     >>   0.75
4     >>   1

使用特权

评论回复
9
computer00| | 2007-10-31 23:47 | 只看该作者

结果除以FFT点数就是了

使用特权

评论回复
10
selina1983| | 2012-5-23 23:20 | 只看该作者
mark^_^

使用特权

评论回复
11
kdurant| | 2012-5-24 09:00 | 只看该作者
是不是有字长效应影响

使用特权

评论回复
12
shiyue0415| | 2013-7-29 22:47 | 只看该作者
假设原始信号的峰值为A,那么FFT的结果的每个点(除了第一个点直流分量之外)的模值就是A的N/2倍。而第一个点就是直流分量,它的模值就是直流分量的N倍

使用特权

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

本版积分规则

5

主题

35

帖子

0

粉丝