fft test software using cmsis DSP library FRDM k22f

Dependencies:   mbed-dsp mbed

Committer:
cpm219
Date:
Fri Sep 30 16:05:16 2016 +0000
Revision:
1:6b7e5eae3a55
Parent:
0:015ecf1bac06
latest version test software on frdm k22f

Who changed what in which revision?

UserRevisionLine numberNew contents of line
cpm219 0:015ecf1bac06 1 // Print messages when the AnalogIn is greater than 50%
cpm219 0:015ecf1bac06 2
cpm219 0:015ecf1bac06 3 #include "mbed.h"
cpm219 0:015ecf1bac06 4 #include "arm_math.h"
cpm219 0:015ecf1bac06 5 #include "arm_const_structs.h"
cpm219 0:015ecf1bac06 6
cpm219 0:015ecf1bac06 7
cpm219 0:015ecf1bac06 8 #define led_on 0x00
cpm219 0:015ecf1bac06 9 #define led_off 0x01
cpm219 0:015ecf1bac06 10
cpm219 0:015ecf1bac06 11 DigitalOut led_r(PTA1);
cpm219 0:015ecf1bac06 12 DigitalOut led_g(PTA2);
cpm219 0:015ecf1bac06 13 DigitalOut led_b(PTD5);
cpm219 0:015ecf1bac06 14
cpm219 1:6b7e5eae3a55 15 const int FFT_LEN = 1024;
cpm219 0:015ecf1bac06 16 const int bins = 32;
cpm219 0:015ecf1bac06 17
cpm219 0:015ecf1bac06 18
cpm219 0:015ecf1bac06 19 const static arm_cfft_instance_f32 *S;
cpm219 0:015ecf1bac06 20
cpm219 0:015ecf1bac06 21 float samples[FFT_LEN*2];
cpm219 0:015ecf1bac06 22 float magnitudes[FFT_LEN];
cpm219 0:015ecf1bac06 23 float freq_window[bins];
cpm219 0:015ecf1bac06 24
cpm219 0:015ecf1bac06 25
cpm219 0:015ecf1bac06 26 int main()
cpm219 0:015ecf1bac06 27 { //initialize led to all off
cpm219 0:015ecf1bac06 28 led_r.write(led_off);
cpm219 0:015ecf1bac06 29 led_g.write(led_off);
cpm219 0:015ecf1bac06 30 led_b.write(led_off);
cpm219 0:015ecf1bac06 31
cpm219 0:015ecf1bac06 32
cpm219 0:015ecf1bac06 33 int32_t i = 0;
cpm219 1:6b7e5eae3a55 34 printf("\r\n\r\nFFT test program!\r\n");
cpm219 1:6b7e5eae3a55 35 printf("by Curtis Mattull\r\n\r\n\r\n");
cpm219 1:6b7e5eae3a55 36
cpm219 1:6b7e5eae3a55 37
cpm219 0:015ecf1bac06 38 // Init arm_ccft_32
cpm219 0:015ecf1bac06 39 switch (FFT_LEN)
cpm219 0:015ecf1bac06 40 {
cpm219 0:015ecf1bac06 41 case 16:
cpm219 0:015ecf1bac06 42 S = & arm_cfft_sR_f32_len16;
cpm219 0:015ecf1bac06 43 break;
cpm219 0:015ecf1bac06 44 case 32:
cpm219 0:015ecf1bac06 45 S = & arm_cfft_sR_f32_len32;
cpm219 0:015ecf1bac06 46 break;
cpm219 0:015ecf1bac06 47 case 64:
cpm219 0:015ecf1bac06 48 S = & arm_cfft_sR_f32_len64;
cpm219 0:015ecf1bac06 49 break;
cpm219 0:015ecf1bac06 50 case 128:
cpm219 0:015ecf1bac06 51 S = & arm_cfft_sR_f32_len128;
cpm219 0:015ecf1bac06 52 break;
cpm219 0:015ecf1bac06 53 case 256:
cpm219 0:015ecf1bac06 54 S = & arm_cfft_sR_f32_len256;
cpm219 0:015ecf1bac06 55 break;
cpm219 0:015ecf1bac06 56 case 512:
cpm219 0:015ecf1bac06 57 S = & arm_cfft_sR_f32_len512;
cpm219 0:015ecf1bac06 58 break;
cpm219 0:015ecf1bac06 59 case 1024:
cpm219 0:015ecf1bac06 60 S = & arm_cfft_sR_f32_len1024;
cpm219 0:015ecf1bac06 61 break;
cpm219 0:015ecf1bac06 62 case 2048:
cpm219 0:015ecf1bac06 63 S = & arm_cfft_sR_f32_len2048;
cpm219 0:015ecf1bac06 64 break;
cpm219 0:015ecf1bac06 65 case 4096:
cpm219 0:015ecf1bac06 66 S = & arm_cfft_sR_f32_len4096;
cpm219 0:015ecf1bac06 67 break;
cpm219 0:015ecf1bac06 68 }
cpm219 0:015ecf1bac06 69
cpm219 0:015ecf1bac06 70 /*populate some dummy sin data*/
cpm219 0:015ecf1bac06 71 for(i = 0; i< FFT_LEN*2; i+=2)
cpm219 0:015ecf1bac06 72 {
cpm219 0:015ecf1bac06 73 //fast math sine table[512+1]
cpm219 1:6b7e5eae3a55 74 samples[i] = sinTable_f32[i/4];
cpm219 0:015ecf1bac06 75 samples[i+1] = 0;
cpm219 0:015ecf1bac06 76 }
cpm219 0:015ecf1bac06 77
cpm219 1:6b7e5eae3a55 78 /*multiply the dummy data with more dummy data*/
cpm219 1:6b7e5eae3a55 79 // for(i = 0; i< FFT_LEN*2; i+=2)
cpm219 1:6b7e5eae3a55 80 // {
cpm219 1:6b7e5eae3a55 81 // //fast math sine table[512+1]
cpm219 1:6b7e5eae3a55 82 // samples[i] +=sinTable_f32[i/2] ;
cpm219 1:6b7e5eae3a55 83 // samples[i+1] = 0;
cpm219 1:6b7e5eae3a55 84 // }
cpm219 1:6b7e5eae3a55 85
cpm219 0:015ecf1bac06 86 // Run FFT on sample data.
cpm219 0:015ecf1bac06 87 arm_cfft_f32(S, samples, 0, 1);
cpm219 0:015ecf1bac06 88 // Calculate magnitude of complex numbers output by the FFT.
cpm219 0:015ecf1bac06 89 arm_cmplx_mag_f32(samples, magnitudes, FFT_LEN);
cpm219 0:015ecf1bac06 90
cpm219 1:6b7e5eae3a55 91 printf("\r\nThe first 20 bins:\r\n");
cpm219 1:6b7e5eae3a55 92
cpm219 1:6b7e5eae3a55 93 for(i = 0; i< 20; i++)
cpm219 0:015ecf1bac06 94 {
cpm219 1:6b7e5eae3a55 95 printf("magnitudes[%i]: %f\r\n",i,magnitudes[i]);
cpm219 0:015ecf1bac06 96 }
cpm219 0:015ecf1bac06 97
cpm219 1:6b7e5eae3a55 98 led_g.write(led_on);
cpm219 0:015ecf1bac06 99
cpm219 1:6b7e5eae3a55 100 printf("test complete\r\n");
cpm219 1:6b7e5eae3a55 101 wait(1);
cpm219 0:015ecf1bac06 102 while(1)
cpm219 0:015ecf1bac06 103 {
cpm219 0:015ecf1bac06 104
cpm219 0:015ecf1bac06 105 }
cpm219 0:015ecf1bac06 106 }