OS : Windows 10
CCS: v6.1.1
we will use MekeWave() make a input signal to FFT
in the same code
my classmate's answer is DATA[1]=0.8 but My is
DATA float[8] 0x00008930@Data 0x00008930@Data
[0] float 1.098337e-07 0x00008930@Data
[1] float -1.446653e+26 0x00008932@Data
[2] float -5.82354e-20 0x00008934@Data
[3] float NaN 0x00008936@Data
[4] float -269.142 0x00008938@Data
[5] float -0.09244925 0x0000893A@Data
[6] float -271840.9 0x0000893C@Data
[7] float 0.005257846 0x0000893E@Data
Code:
#include "math.h"
#define PI 3.1415926
#define SAMPLENUMBER 8
#define LOGNUM 3
void InitForFFT();
void MakeWave();
void FFT(float dataR[SAMPLENUMBER],float dataI[SAMPLENUMBER]);
float INPUT[SAMPLENUMBER],DATA[SAMPLENUMBER];
float fWaveR[SAMPLENUMBER],fWaveI[SAMPLENUMBER],w[SAMPLENUMBER];
float sin_tab[SAMPLENUMBER],cos_tab[SAMPLENUMBER];
int main(){
int i;
InitForFFT();
MakeWave();
for(i=0;i<SAMPLENUMBER;i++){
fWaveR[i]=INPUT[i];
fWaveI[i]=0.0f;
w[i]=0.0f;
}
FFT(fWaveR,fWaveI);
for(i=0;i<SAMPLENUMBER;i++)
{
DATA[i]=w[i];
}
return 0;
}
void InitForFFT(){
int i;
for(i=0;i<SAMPLENUMBER;i++){
sin_tab[i] = sin(PI*2*i/SAMPLENUMBER);
cos_tab[i] = cos(PI*2*i/SAMPLENUMBER);
}
}
void MakeWave(){
int i;
for(i=0;i<SAMPLENUMBER;i++){
if(i<SAMPLENUMBER/2){
INPUT[i]=0.2;
}else{
INPUT[i]=0;
}
}
}
void FFT(float dataR[SAMPLENUMBER],float dataI[SAMPLENUMBER])
{
int i,j,k,b,p,L,sum,g;
int Bit[LOGNUM];
float TR,TI,temp;
for(i=0;i<LOGNUM;i++){
Bit[i]=0;
}
for(i=0;i<SAMPLENUMBER;i++){
sum = 0;
for(g=0;g<LOGNUM;g++){
Bit[g]=(i/(int)pow(2,g))&01;
}
for(g=LOGNUM-1;g>=0;g--){
sum+=(Bit[g]*pow(2,LOGNUM-1-g));
}
dataI[sum]=dataR[i];
}
for(i=0;i<SAMPLENUMBER;i++){
dataR[i]=dataI[i];
dataI[i]=0;
}
for(L=1;L<=LOGNUM;L++){/*for(1)*/
b=1;
i=L-1;
while(i>0){
b=b*2;
i--;
}
for(j=0;j<=b-1;j++)/*for(2)*/
{
p=1;
i=LOGNUM-L;
while(i>0)
{
p=p*2;
i--;
}
p=p*j;
for(k=j;k<SAMPLENUMBER;k=k+2*b)/*for(3)*/
{
TR=dataR[k];
TI=dataI[k];
temp=dataR[b+k];
dataR[k]=dataR[k]+dataR[b+k]*cos_tab[p]+dataI[k+b]*sin_tab[p];
dataI[k]=dataI[k]-dataR[b+k]*sin_tab[p]+dataI[k+b]*cos_tab[p];
dataR[k+b]=TR-dataR[b+k]*cos_tab[p]-dataI[b+k]*sin_tab[p];
dataI[k+b]=TI+temp*sin_tab[p]-dataI[b+k]*cos_tab[p];
}/*for(3)*/
}/*for(2)*/
}/*for(1)*/
for(i=0;i<SAMPLENUMBER;i++)
{
w[i]=sqrt(dataR[i]*dataR[i]+dataI[i]*dataI[i]);
}
}/*END FFT*/
any help?