| 请教关于fft运算结果,和matlab计算的对不上 |
| 新闻出处:21ic 发布时间:2007-10-31 |
lvgaopan 发布于 2007-10-31 20:55:00 请教各位前辈,我在用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[i] = 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); }
结果分析请看下楼
* - 本贴最后修改时间:2007-10-31 21:00:42 修改者:lvgaopan lvgaopan 发布于 2007-10-31 20:59:00 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:00 这个计算结果,我的理解是 第一项:-0.231201 + i0 第二项:0.266693 - i(3.05176e-05) 第三项:-0.11557 - i0.00283813 第四项:-0.00137329 + i0 第五项:(-9.15527e-05) + i0 第六项:-0.00195313 + i0
这个结果与matlab计算出来的结果明显不符。请问是我的理解有问题(该如何理解结果数据)?还是程序计算有问题(错在什么地方)?
谢谢
* - 本贴最后修改时间:2007-10-31 21:15:50 修改者:lvgaopan 
lvgaopan 发布于 2007-10-31 21:18:00 什么是“归一化处理”? 好像在文档里看到有类似的描述,但不太理解。 如果这些数据是对的,那应该如何与matlab计算的数据对应起来? 谢谢
lvgaopan 发布于 2007-10-31 21:33:00 比如有四个数,分别为
原数 归一化处理后 1 >> 0.25 2 >> 0.5 3 >> 0.75 4 >> 1
|
| 【关闭】 【打印】 |
|
|
|
|