/* * Simple dft * Nick Gamroth * May 2007 */ #include #include #include #define PI 3.14159265 /* Returns n samples of a sine wave with f=1 */ double* sinegen(int n) { int i; double *rval; double s; double d = 0.0; rval = malloc(n * sizeof(double)); for(i = 0 ; i < n ; i++) { d = ((double)i) * PI / 180; rval[i] = sin(d); } return rval; } double* dft(int N, double* x) { double Wk; int k, n; double *rval; rval = malloc(N * sizeof(double)); for(k = 0 ; k < N - 1 ; k++) { Wk = (2 * PI * k) / N; for(n = 0 ; n < N - 1 ; n++) { rval[k] += x[n] * -1 * cos(n * Wk); } } return rval; } int main(int argc, char* argv) { int n = 360; int N = 16; int i; double *signal, *freq; FILE *sig, *result; sig = fopen("signal.txt", "w"); result = fopen("results.txt", "w"); signal = sinegen(n); freq = dft(N, signal); for(i = 0 ; i < N ; i++) { //printf("%f\n", freq[i]); fprintf(result, "%f\n", freq[i]); } for(i = 0 ; i < n ; i++) { fprintf(sig, "%f\n", signal[i]); } free(signal); fclose(result); fclose(sig); return 0; }