/* FFT1fltr.c */ #include #include #include #include "FFT1.h" double data[FFT_MAX]; /* real part of original data */ double jdata[FFT_MAX]; /* imaginary part of original data */ void display_data( ) { int i; for (i = 0; i < num_of_data; i++) { printf("No.%3d: Re_part =%12.5f, Im_part =%12.5f\n", i,data[i],jdata[i]); } printf("Enter any key : "); (void)getchar( ); printf("\n"); } void make_test_data( ) /* Testing data generation (ex. trapzoid-shaped) */ { int i, min, max; num_of_data = 16; min = 4; max = 12; for (i = 0; i < num_of_data; i++) { if (min <= i && i < max) { data[i] = 100.0; } else { data[i] = 0.0; } jdata[i] = 0.0; } } void lowpass_filtering( ) /* filtering in frequency domain */ { int i, max; /* ex. lowpass filtering */ max = num_of_data / 4; for (i = 0; i < num_of_data; i++) { if (max <= i && i <= (num_of_data - max)) { data[i] = 0.0; jdata[i] = 0.0; } } } main( ) { int i, j, k, offset=20; char str[65]; make_test_data( ); printf("Testing data is generated.\n"); display_data( ); /* FFT */ FFT1(data, jdata, num_of_data, 1); printf("FFT is completed.\n"); display_data( ); /* Filtering in frequency domain */ lowpass_filtering( ); printf("Lowpass filtering is completed.\n"); display_data( ); /* Inverse FFT */ FFT1(data, jdata, num_of_data, -1); printf("Inverse FFT is completed.\n"); display_data( ); for (i = 0; i < num_of_data; i++) { str[64] = '\0'; for (j = 0; j < 64; j++) { str[j] = ' '; } str[offset / 2] = '|'; if (i >= 4 && i < 12) { str[60] = '@'; } else { str[offset / 2] = '@'; } k = ((int)data[i] + offset) / 2; str[k] = '*'; printf("%3d %s\n", i, str); } printf("\n"); return 0; }