fft test software using cmsis DSP library FRDM k22f

Dependencies:   mbed-dsp mbed

Committer:
cpm219
Date:
Fri Sep 30 14:51:31 2016 +0000
Revision:
0:015ecf1bac06
Child:
1:6b7e5eae3a55
v1

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 0:015ecf1bac06 15 const int FFT_LEN = 64;
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 0:015ecf1bac06 34
cpm219 0:015ecf1bac06 35 // Init arm_ccft_32
cpm219 0:015ecf1bac06 36 switch (FFT_LEN)
cpm219 0:015ecf1bac06 37 {
cpm219 0:015ecf1bac06 38 case 16:
cpm219 0:015ecf1bac06 39 S = & arm_cfft_sR_f32_len16;
cpm219 0:015ecf1bac06 40 break;
cpm219 0:015ecf1bac06 41 case 32:
cpm219 0:015ecf1bac06 42 S = & arm_cfft_sR_f32_len32;
cpm219 0:015ecf1bac06 43 break;
cpm219 0:015ecf1bac06 44 case 64:
cpm219 0:015ecf1bac06 45 S = & arm_cfft_sR_f32_len64;
cpm219 0:015ecf1bac06 46 break;
cpm219 0:015ecf1bac06 47 case 128:
cpm219 0:015ecf1bac06 48 S = & arm_cfft_sR_f32_len128;
cpm219 0:015ecf1bac06 49 break;
cpm219 0:015ecf1bac06 50 case 256:
cpm219 0:015ecf1bac06 51 S = & arm_cfft_sR_f32_len256;
cpm219 0:015ecf1bac06 52 break;
cpm219 0:015ecf1bac06 53 case 512:
cpm219 0:015ecf1bac06 54 S = & arm_cfft_sR_f32_len512;
cpm219 0:015ecf1bac06 55 break;
cpm219 0:015ecf1bac06 56 case 1024:
cpm219 0:015ecf1bac06 57 S = & arm_cfft_sR_f32_len1024;
cpm219 0:015ecf1bac06 58 break;
cpm219 0:015ecf1bac06 59 case 2048:
cpm219 0:015ecf1bac06 60 S = & arm_cfft_sR_f32_len2048;
cpm219 0:015ecf1bac06 61 break;
cpm219 0:015ecf1bac06 62 case 4096:
cpm219 0:015ecf1bac06 63 S = & arm_cfft_sR_f32_len4096;
cpm219 0:015ecf1bac06 64 break;
cpm219 0:015ecf1bac06 65 }
cpm219 0:015ecf1bac06 66
cpm219 0:015ecf1bac06 67 /*populate some dummy sin data*/
cpm219 0:015ecf1bac06 68 for(i = 0; i< FFT_LEN*2; i+=2)
cpm219 0:015ecf1bac06 69 {
cpm219 0:015ecf1bac06 70 //fast math sine table[512+1]
cpm219 0:015ecf1bac06 71 samples[i] = sinTable_f32[i*4];
cpm219 0:015ecf1bac06 72 samples[i+1] = 0;
cpm219 0:015ecf1bac06 73 }
cpm219 0:015ecf1bac06 74
cpm219 0:015ecf1bac06 75 // Run FFT on sample data.
cpm219 0:015ecf1bac06 76 arm_cfft_f32(S, samples, 0, 1);
cpm219 0:015ecf1bac06 77 // Calculate magnitude of complex numbers output by the FFT.
cpm219 0:015ecf1bac06 78 arm_cmplx_mag_f32(samples, magnitudes, FFT_LEN);
cpm219 0:015ecf1bac06 79
cpm219 0:015ecf1bac06 80 for(i = 0; i< FFT_LEN; i++)
cpm219 0:015ecf1bac06 81 {
cpm219 0:015ecf1bac06 82 printf("magnitudes[%f]: %f\r\n",i,magnitudes[i]);
cpm219 0:015ecf1bac06 83 }
cpm219 0:015ecf1bac06 84
cpm219 0:015ecf1bac06 85
cpm219 0:015ecf1bac06 86 printf("test complete");
cpm219 0:015ecf1bac06 87
cpm219 0:015ecf1bac06 88 while(1)
cpm219 0:015ecf1bac06 89 {
cpm219 0:015ecf1bac06 90
cpm219 0:015ecf1bac06 91 }
cpm219 0:015ecf1bac06 92 }