frank dunn
/
fft_test_stmf411
test noise on 50hz
main.cpp@2:0ca66fc9adc9, 2020-06-25 (annotated)
- Committer:
- frank_dunn1
- Date:
- Thu Jun 25 08:24:35 2020 +0000
- Revision:
- 2:0ca66fc9adc9
- Parent:
- 1:6b7e5eae3a55
test
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 | |
frank_dunn1 | 2:0ca66fc9adc9 | 8 | |
frank_dunn1 | 2:0ca66fc9adc9 | 9 | |
cpm219 | 0:015ecf1bac06 | 10 | |
frank_dunn1 | 2:0ca66fc9adc9 | 11 | const int FFT_LEN = 32; |
frank_dunn1 | 2:0ca66fc9adc9 | 12 | const int bins = 64; |
cpm219 | 0:015ecf1bac06 | 13 | |
cpm219 | 0:015ecf1bac06 | 14 | |
cpm219 | 0:015ecf1bac06 | 15 | const static arm_cfft_instance_f32 *S; |
cpm219 | 0:015ecf1bac06 | 16 | |
frank_dunn1 | 2:0ca66fc9adc9 | 17 | float samples[FFT_LEN*2]={0.74749772289107352,-0.6620341598054913,2.5810074680698305,2.0375690829541551,0.85501630972362808,2.4491971123982741,0.96898486707269238,0.071615312869874215,4.135489449279282,2.8204892200482625, |
frank_dunn1 | 2:0ca66fc9adc9 | 18 | 1.004264658763629,1.0598806981968543,1.3924726256823439,1.1527769317445544,0.16468389119249338,-0.27422782796214529,1.8047039643381464,0.79038862751269323,-0.44495813830147357,0.53068869150488007, |
frank_dunn1 | 2:0ca66fc9adc9 | 19 | 1.3484439163009583,1.4200129154057697,0.88845273294643168,1.8349129948395904,1.0701928581879496,0.90708728254350102,2.4103567463264239,2.6309595238537535,2.5569927393322835,-0.58523807239622561, |
frank_dunn1 | 2:0ca66fc9adc9 | 20 | -0.51517227902319718,0.69679202690936726,1.2722062355241623,0.15100625736779782,-1.6440964183517333,-1.7653834312280656,-0.70269258104390242,1.142109051997795,1.9091357377458946,0.86960141090930632, |
frank_dunn1 | 2:0ca66fc9adc9 | 21 | 0.96627954013362549,1.7838151901061594,2.0938256426948465,2.4378461326556282,2.2612077719971997,0.153796332301813,2.4901349915557365,2.4431403321019047,-0.35438693729683535,2.8433009646491154, |
frank_dunn1 | 2:0ca66fc9adc9 | 22 | 0.51019781464390002,0.42022358860095488,0.2968374005289679,2.4566906658298451,0.33088401348465118,2.3551821216079407,0.9486742272689056,1.3010822355769571,1.4433689356494175,0.88483024478861216, |
frank_dunn1 | 2:0ca66fc9adc9 | 23 | 0.60929525861200262,2.8294626914715204,1.9228669058909631,0.9947297034997874}; |
cpm219 | 0:015ecf1bac06 | 24 | float magnitudes[FFT_LEN]; |
cpm219 | 0:015ecf1bac06 | 25 | float freq_window[bins]; |
frank_dunn1 | 2:0ca66fc9adc9 | 26 | Serial pc(USBTX, USBRX); |
cpm219 | 0:015ecf1bac06 | 27 | |
cpm219 | 0:015ecf1bac06 | 28 | int main() |
frank_dunn1 | 2:0ca66fc9adc9 | 29 | { |
frank_dunn1 | 2:0ca66fc9adc9 | 30 | pc.baud(115200); |
cpm219 | 0:015ecf1bac06 | 31 | int32_t i = 0; |
cpm219 | 1:6b7e5eae3a55 | 32 | printf("\r\n\r\nFFT test program!\r\n"); |
cpm219 | 1:6b7e5eae3a55 | 33 | printf("by Curtis Mattull\r\n\r\n\r\n"); |
cpm219 | 1:6b7e5eae3a55 | 34 | |
cpm219 | 1:6b7e5eae3a55 | 35 | |
cpm219 | 0:015ecf1bac06 | 36 | // Init arm_ccft_32 |
cpm219 | 0:015ecf1bac06 | 37 | switch (FFT_LEN) |
cpm219 | 0:015ecf1bac06 | 38 | { |
cpm219 | 0:015ecf1bac06 | 39 | case 16: |
cpm219 | 0:015ecf1bac06 | 40 | S = & arm_cfft_sR_f32_len16; |
cpm219 | 0:015ecf1bac06 | 41 | break; |
cpm219 | 0:015ecf1bac06 | 42 | case 32: |
cpm219 | 0:015ecf1bac06 | 43 | S = & arm_cfft_sR_f32_len32; |
cpm219 | 0:015ecf1bac06 | 44 | break; |
cpm219 | 0:015ecf1bac06 | 45 | case 64: |
cpm219 | 0:015ecf1bac06 | 46 | S = & arm_cfft_sR_f32_len64; |
cpm219 | 0:015ecf1bac06 | 47 | break; |
cpm219 | 0:015ecf1bac06 | 48 | case 128: |
cpm219 | 0:015ecf1bac06 | 49 | S = & arm_cfft_sR_f32_len128; |
cpm219 | 0:015ecf1bac06 | 50 | break; |
cpm219 | 0:015ecf1bac06 | 51 | case 256: |
cpm219 | 0:015ecf1bac06 | 52 | S = & arm_cfft_sR_f32_len256; |
cpm219 | 0:015ecf1bac06 | 53 | break; |
cpm219 | 0:015ecf1bac06 | 54 | case 512: |
cpm219 | 0:015ecf1bac06 | 55 | S = & arm_cfft_sR_f32_len512; |
cpm219 | 0:015ecf1bac06 | 56 | break; |
cpm219 | 0:015ecf1bac06 | 57 | case 1024: |
cpm219 | 0:015ecf1bac06 | 58 | S = & arm_cfft_sR_f32_len1024; |
cpm219 | 0:015ecf1bac06 | 59 | break; |
cpm219 | 0:015ecf1bac06 | 60 | case 2048: |
cpm219 | 0:015ecf1bac06 | 61 | S = & arm_cfft_sR_f32_len2048; |
cpm219 | 0:015ecf1bac06 | 62 | break; |
cpm219 | 0:015ecf1bac06 | 63 | case 4096: |
cpm219 | 0:015ecf1bac06 | 64 | S = & arm_cfft_sR_f32_len4096; |
cpm219 | 0:015ecf1bac06 | 65 | break; |
cpm219 | 0:015ecf1bac06 | 66 | } |
cpm219 | 0:015ecf1bac06 | 67 | |
cpm219 | 0:015ecf1bac06 | 68 | /*populate some dummy sin data*/ |
frank_dunn1 | 2:0ca66fc9adc9 | 69 | //for(i = 0; i< FFT_LEN*2; i+=2) |
frank_dunn1 | 2:0ca66fc9adc9 | 70 | //{ |
cpm219 | 0:015ecf1bac06 | 71 | //fast math sine table[512+1] |
frank_dunn1 | 2:0ca66fc9adc9 | 72 | //samples[i] = sinTable_f32[i/4]; |
frank_dunn1 | 2:0ca66fc9adc9 | 73 | //samples[i+1] = 0; |
frank_dunn1 | 2:0ca66fc9adc9 | 74 | //} |
cpm219 | 0:015ecf1bac06 | 75 | |
cpm219 | 1:6b7e5eae3a55 | 76 | /*multiply the dummy data with more dummy data*/ |
cpm219 | 1:6b7e5eae3a55 | 77 | // for(i = 0; i< FFT_LEN*2; i+=2) |
cpm219 | 1:6b7e5eae3a55 | 78 | // { |
cpm219 | 1:6b7e5eae3a55 | 79 | // //fast math sine table[512+1] |
cpm219 | 1:6b7e5eae3a55 | 80 | // samples[i] +=sinTable_f32[i/2] ; |
cpm219 | 1:6b7e5eae3a55 | 81 | // samples[i+1] = 0; |
cpm219 | 1:6b7e5eae3a55 | 82 | // } |
cpm219 | 1:6b7e5eae3a55 | 83 | |
cpm219 | 0:015ecf1bac06 | 84 | // Run FFT on sample data. |
cpm219 | 0:015ecf1bac06 | 85 | arm_cfft_f32(S, samples, 0, 1); |
cpm219 | 0:015ecf1bac06 | 86 | // Calculate magnitude of complex numbers output by the FFT. |
cpm219 | 0:015ecf1bac06 | 87 | arm_cmplx_mag_f32(samples, magnitudes, FFT_LEN); |
cpm219 | 0:015ecf1bac06 | 88 | |
cpm219 | 1:6b7e5eae3a55 | 89 | printf("\r\nThe first 20 bins:\r\n"); |
cpm219 | 1:6b7e5eae3a55 | 90 | |
frank_dunn1 | 2:0ca66fc9adc9 | 91 | for(i = 0; i< 40; i++) |
cpm219 | 0:015ecf1bac06 | 92 | { |
cpm219 | 1:6b7e5eae3a55 | 93 | printf("magnitudes[%i]: %f\r\n",i,magnitudes[i]); |
cpm219 | 0:015ecf1bac06 | 94 | } |
cpm219 | 0:015ecf1bac06 | 95 | |
frank_dunn1 | 2:0ca66fc9adc9 | 96 | //led_g.write(led_on); |
cpm219 | 0:015ecf1bac06 | 97 | |
cpm219 | 1:6b7e5eae3a55 | 98 | printf("test complete\r\n"); |
cpm219 | 1:6b7e5eae3a55 | 99 | wait(1); |
cpm219 | 0:015ecf1bac06 | 100 | while(1) |
cpm219 | 0:015ecf1bac06 | 101 | { |
cpm219 | 0:015ecf1bac06 | 102 | |
cpm219 | 0:015ecf1bac06 | 103 | } |
cpm219 | 0:015ecf1bac06 | 104 | } |