
fft test software using cmsis DSP library FRDM k22f
main.cpp@1:6b7e5eae3a55, 2016-09-30 (annotated)
- 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?
User | Revision | Line number | New 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 | } |