#include #include struct complex { float realpart; float imagpart; }; float yreal(float a, float b, float c, float d, float theta1) { float sum1; sum1=0.0; sum1= a+ c*cos(theta1)-d*sin(theta1); return sum1; } float yimaginary(float a, float b, float c, float d, float theta1) { float sum2; sum2=0.0; sum2=b+d*cos(theta1)+c*sin(theta1); return sum2; } int sort_4eights(float x[32], float y[32], float a2[32], float b2[32], int odds); main(){ int N=64; float theta1; float y0real, y0imaginary; int i, k, j; float increment= -3.141592; float increment1= -3.141592/2; float increment2= -3.141592/4; int odds; float x[64], y[64], a[32], b[32], a1[32], b1[32], a2[32], b2[32], x2[32], y2[32]; FILE *sombrero; FILE *sombrero2; /* Input is in linear order */ sombrero= fopen( "Card23.IN", "r"); for (i= 0; i< N; i++) { fscanf(sombrero, "%f\n", &a[i]); fscanf(sombrero, "%f\n", &b[i]); } fclose ( sombrero); sombrero2= fopen( "rhubarb.IN", "r"); fscanf(sombrero2,"%i\n", &odds); fclose(sombrero2); printf("Odds=%i\n", odds); printf("why would entry 50, 60-64 be different\n"); for (i= 0; i< N; i++) { printf("
x[%i]= %f\n", i, a[i]); printf("
y[%i]= %f\n", i, b[i]); } for (k=0; k< 8; k++) { for (i= 0; i<2; i++) { /* printf("i=%i\n", i); */ /* printf("k=%i\n", k); */ theta1=0.0; y0real=yreal(a[2*i+4*k],b[2*i+4*k],a[2*i+1+4*k], b[2*i+1+4*k], theta1); y0imaginary=yimaginary(a[2*i+ 4*k], b[2*i +4*k], a[2*i+1+4*k], b[2*i+1+4*k], theta1); a1[2*i+4*k]= y0real; b1[2*i+4*k]= y0imaginary; theta1= theta1+ increment; /* printf("i=%i\n", i); */ /* printf("k=%i\n", k); */ y0real=yreal(a[2*i + 4*k],b[2*i+ 4*k], a[2*i+1+4*k], b[2*i+1+ 4*k], theta1); y0imaginary=yimaginary(a[2*i+ 4*k], b[2*i+ 4*k], a[2*i+1+4*k], b[2*i+1+4*k], theta1); a1[2*i+1+4*k]= y0real; b1[2*i+1+4*k]= y0imaginary; } } printf("The output of the 2 point DIT FFTs are: \n"); printf("\n"); for (k=0; k < 16; k++) { for (i= 0; i< 2; i++) { printf("i=%i\n", i); printf("k=%i\n", k); printf("X[%i]=%f\n", i, a1[i+k*2]); printf("Y[%i]=%f\n", i, b1[i+k*2]); } } for (i=0; i< 8; i++) { x[0+4*i]= a1[0 +4*i]; y[0+4*i]= b1[0 +4*i]; x[1+4*i]= a1[2+ 4*i]; y[1+4*i]= b1[2+ 4*i]; x[2+4*i]= a1[1+4*i]; y[2+4*i]= b1[1+ 4*i]; x[3+4*i]= a1[3+4*i]; y[3+4*i]= b1[3+4*i]; } /* end for */ for (k=0; k< 8; k++) { for (i= 0; i< 2; i++) { if (i==0) { /* printf("i=%i\n", i); */ /* printf("k=%i\n", k); */ theta1= 0.0; y0real=yreal(x[2*i +4*k],y[2*i+ 4*k],x[2*i+1 +4*k],y[2*i+1+ 4*k], theta1); y0imaginary=yimaginary(x[2*i +4*k],y[2*i+4*k],x[2*i+1+4*k],y[2*i+1+4*k], theta1); a1[2*i+4*k]= y0real; b1[2*i+4*k]= y0imaginary; theta1= -3.141592; /* printf("i=%i\n", i); */ /* printf("k=%i\n", k); */ y0real=yreal(x[2*i +4*k],y[2*i+ 4*k],x[2*i+1 +4*k],y[2*i+1+ 4*k], theta1); y0imaginary=yimaginary(x[2*i +4*k],y[2*i+4*k],x[2*i+1+4*k],y[2*i+1+4*k], theta1); a1[2*i+4*k+1]= y0real; b1[2*i+4*k+1]= y0imaginary; } else if (i==1) { theta1= -3.141592/2.0; /* printf("i=%i\n", i); */ /* printf("k=%i\n", k); */ y0real=yreal(x[2*i+4*k],y[2*i+4*k],x[2*i+1+4*k],y[2*i+1+4*k], theta1); y0imaginary=yimaginary(x[2*i+4*k],y[2*i+4*k],x[2*i+1+4*k],y[2*i+1+4*k], theta1); a1[2*i+4*k]= y0real; b1[2*i+4*k]= y0imaginary; theta1= +3.141592/2.0; /* printf("i=%i\n", i); */ /* printf("k=%i\n", k); */ y0real=yreal(x[2*i +4*k],y[2*i+ 4*k],x[2*i+1 +4*k],y[2*i+1+ 4*k], theta1); y0imaginary=yimaginary(x[2*i +4*k],y[2*i+4*k],x[2*i+1+4*k],y[2*i+1+4*k], theta1); a1[2*i+1+4*k]= y0real; b1[2*i+1+4*k]= y0imaginary; } /*end if*/ } /*end for */ } for (i= 0; i< 32; i++) { /* printf("a1=%f\n", a1[i]); */ /* printf("b1=%f\n", b1[i]); */ } printf("\n"); for (i=0; i< 8; i++) { x[0+4*i]= a1[0 +4*i]; y[0+4*i]= b1[0 +4*i]; x[1+4*i]= a1[2+ 4*i]; y[1+4*i]= b1[2+ 4*i]; x[2+4*i]= a1[1+4*i]; y[2+4*i]= b1[1+ 4*i]; x[3+4*i]= a1[3+4*i]; y[3+4*i]= b1[3+4*i]; } /* end for */ printf("\n"); printf(" ** The 4 point DIT FFTs which are presented in linear order is: ** \n"); for (k=0; k< 8; k++) { for (i= 0; i< 4; i++) { printf("X[%i]=%f\n", i, x[i+4*k]); printf("Y[%i]=%f\n", i, y[i+4*k]); } } printf("\n"); for (i=0; i< 4; i++) { printf("i= %i\n", i); /* printf("result= %i\n", 0+8*i); */ a[0+ 8*i]= x[0 +8*i]; b[0+ 8*i]= y[0 +8*i]; /* printf("result= %i\n", 4+8*i); */ a[1 + 8*i]=x[4 +8*i]; b[1+ 8*i]= y[4 +8*i]; /* printf("result= %i\n", 1+8*i); */ a[2+ 8*i]= x[1+ 8*i]; b[2+ 8*i]= y[1+ 8*i]; /* printf("result= %i\n", 5+8*i); */ a[3+ 8*i]= x[5+ 8*i]; b[3+ 8*i]= y[5+ 8*i]; /* printf("result= %i\n", 2+8*i); */ a[4+ 8*i]= x[2+ 8*i]; b[4+ 8*i]= y[2+ 8*i]; /* printf("result= %i\n", 6+8*i); */ a[5+ 8*i]= x[6+ 8*i]; b[5+ 8*i]= y[6+ 8*i]; /* printf("result= %i\n", 3+8*i); */ a[6+ 8*i]= x[3+ 8*i]; b[6 +8*i]= y[3+ 8*i]; /* printf("result= %i\n", 7+8*i); */ a[7+ 8*i]= x[7+ 8*i]; b[7+ 8*i]= y[7+ 8*i]; } printf("\n"); for (k=0; k< 4; k++) { for (i= 0; i< 4; i ++) { theta1= i* increment2; y0real=yreal(a[2*i+ 8*k],b[2*i+8*k],a[2*i+1+ 8*k],b[2*i+1+ 8*k], theta1); y0imaginary=yimaginary(a[2*i+ 8*k],b[2*i + 8*k],a[2*i+1+ 8*k],b[2*i+1+ 8*k], theta1); a1[2*i+ 8*k]= y0real; b1[2*i+ 8*k]= y0imaginary; theta1= i*increment2 - 3.141592; y0real=yreal(a[2*i+ 8*k],b[2*i+ 8*k],a[2*i+1+8*k],b[2*i+1+ 8*k], theta1); y0imaginary=yimaginary(a[2*i+ 8*k],b[2*i+8*k],a[2*i+8*k+1],b[2*i+1+8*k], theta1); a1[2*i+1+ 8*k]= y0real; b1[2*i+1+ 8*k]= y0imaginary; } } printf("\n"); for (i=0; i< 4; i++) { x[0+8*i]= a1[0 +8*i]; y[0+8*i]= b1[0 +8*i]; x[1+8*i]= a1[2+ 8*i]; y[1+8*i]= b1[2+ 8*i]; x[2+8*i]= a1[4 + 8*i]; y[2+8*i]= b1[4 + 8*i]; x[3+8*i]= a1[6 +8*i]; y[3+8*i]= b1[6 +8*i]; x[4+8*i]= a1[1 +8*i]; y[4+8*i]= b1[1 +8*i]; x[5+8*i]= a1[3+ 8*i]; y[5+8*i]= b1[3+ 8*i]; x[6+8*i]= a1[5+8*i]; y[6+8*i]= b1[5+ 8*i]; x[7+8*i]= a1[7+8*i]; y[7+8*i]= b1[7+8*i]; } /* end for */ printf("\n"); printf("The 2 8 point DIT FFTS are \n"); for (i= 0; i< 16; i++) { printf("x=%f\n", x[i]); printf("y=%f\n", y[i]); } /* end for */ for (i= 0; i< 16; i++) { printf("X[%i], real =%f\n", i, x[i]); printf("X[%i], imaginary =%f\n", i, y[i]); } /* end for */ for (i=0; i< 16; i++) { x2[i]= x[i]; y2[i]= y[i]; } }