
FFT for LPC1114FN28 with UTI_FFT_Real_mod
Dependencies: UIT_FFT_Real_mod mbed
Fork of Demo_FFT_IFFT by
main.cpp@3:42125c292b2d, 2015-10-15 (annotated)
- Committer:
- ohneta
- Date:
- Thu Oct 15 15:43:08 2015 +0000
- Revision:
- 3:42125c292b2d
- Parent:
- 2:18b19edf441d
FFT for LPC1114FN28
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
MikamiUitOpen | 0:5bed9d6dc43b | 1 | //-------------------------------------------------------------- |
ohneta | 2:18b19edf441d | 2 | /** |
ohneta | 2:18b19edf441d | 3 | * FFT experiment for LPC1114FN28 |
ohneta | 2:18b19edf441d | 4 | * |
ohneta | 2:18b19edf441d | 5 | * programed by Takehisa Oneta(ohneta) |
ohneta | 2:18b19edf441d | 6 | * Aug. 2015 |
ohneta | 2:18b19edf441d | 7 | */ |
ohneta | 2:18b19edf441d | 8 | //-------------------------------------------------------------- |
ohneta | 2:18b19edf441d | 9 | |
ohneta | 2:18b19edf441d | 10 | #include "fftReal.hpp" |
ohneta | 2:18b19edf441d | 11 | #include "mbed.h" |
ohneta | 2:18b19edf441d | 12 | |
ohneta | 2:18b19edf441d | 13 | #define SAMPLING_NUM 64 |
ohneta | 2:18b19edf441d | 14 | //#define SAMPLING_NUM 32 |
MikamiUitOpen | 0:5bed9d6dc43b | 15 | //-------------------------------------------------------------- |
MikamiUitOpen | 0:5bed9d6dc43b | 16 | |
ohneta | 2:18b19edf441d | 17 | Serial pc(USBTX, USBRX); |
ohneta | 2:18b19edf441d | 18 | AnalogIn ainR(dp9); |
ohneta | 2:18b19edf441d | 19 | AnalogIn ainL(dp10); |
ohneta | 2:18b19edf441d | 20 | Ticker soundInterrupt; |
MikamiUitOpen | 0:5bed9d6dc43b | 21 | |
ohneta | 2:18b19edf441d | 22 | const char *gBarGraf[] = { |
ohneta | 2:18b19edf441d | 23 | " ", |
ohneta | 2:18b19edf441d | 24 | "* ", |
ohneta | 2:18b19edf441d | 25 | "** ", |
ohneta | 2:18b19edf441d | 26 | "*** ", |
ohneta | 2:18b19edf441d | 27 | "**** ", |
ohneta | 2:18b19edf441d | 28 | "***** ", |
ohneta | 2:18b19edf441d | 29 | "****** ", |
ohneta | 2:18b19edf441d | 30 | "******* ", |
ohneta | 2:18b19edf441d | 31 | "******** ", |
ohneta | 2:18b19edf441d | 32 | "********* ", |
ohneta | 2:18b19edf441d | 33 | "********** ", |
ohneta | 2:18b19edf441d | 34 | "*********** ", |
ohneta | 2:18b19edf441d | 35 | "************ ", |
ohneta | 2:18b19edf441d | 36 | "************* ", |
ohneta | 2:18b19edf441d | 37 | "************** ", |
ohneta | 2:18b19edf441d | 38 | "*************** ", |
ohneta | 2:18b19edf441d | 39 | "**************** ", |
ohneta | 2:18b19edf441d | 40 | "***************** ", |
ohneta | 2:18b19edf441d | 41 | "****************** ", |
ohneta | 2:18b19edf441d | 42 | "******************* ", |
ohneta | 2:18b19edf441d | 43 | "******************** ", |
ohneta | 2:18b19edf441d | 44 | "********************* ", |
ohneta | 2:18b19edf441d | 45 | "********************** ", |
ohneta | 2:18b19edf441d | 46 | "*********************** ", |
ohneta | 2:18b19edf441d | 47 | "************************ ", |
ohneta | 2:18b19edf441d | 48 | "************************* ", |
ohneta | 2:18b19edf441d | 49 | "************************** ", |
ohneta | 2:18b19edf441d | 50 | "*************************** ", |
ohneta | 2:18b19edf441d | 51 | "**************************** ", |
ohneta | 2:18b19edf441d | 52 | "***************************** ", |
ohneta | 2:18b19edf441d | 53 | "****************************** ", |
ohneta | 2:18b19edf441d | 54 | "*******************************", |
ohneta | 2:18b19edf441d | 55 | }; |
MikamiUitOpen | 0:5bed9d6dc43b | 56 | |
ohneta | 2:18b19edf441d | 57 | //-------------------------------------------------------------- |
ohneta | 2:18b19edf441d | 58 | |
ohneta | 2:18b19edf441d | 59 | |
ohneta | 2:18b19edf441d | 60 | uint32_t gSoundIntrFlag = 0; |
ohneta | 2:18b19edf441d | 61 | uint32_t gSoundIntrCount = 0; |
ohneta | 2:18b19edf441d | 62 | |
ohneta | 2:18b19edf441d | 63 | float gBufferR[SAMPLING_NUM]; |
ohneta | 2:18b19edf441d | 64 | float gBufferL[SAMPLING_NUM]; |
ohneta | 2:18b19edf441d | 65 | |
ohneta | 2:18b19edf441d | 66 | //---------------------------------------------------- |
ohneta | 2:18b19edf441d | 67 | /** |
ohneta | 2:18b19edf441d | 68 | * Ticker handler |
ohneta | 2:18b19edf441d | 69 | */ |
ohneta | 2:18b19edf441d | 70 | void soundInterruptHandle() |
ohneta | 2:18b19edf441d | 71 | { |
ohneta | 2:18b19edf441d | 72 | if (gSoundIntrFlag == 0) { |
ohneta | 2:18b19edf441d | 73 | gSoundIntrFlag = 1; |
ohneta | 2:18b19edf441d | 74 | } |
ohneta | 2:18b19edf441d | 75 | } |
ohneta | 2:18b19edf441d | 76 | |
ohneta | 2:18b19edf441d | 77 | //---------------------------------------------------- |
MikamiUitOpen | 0:5bed9d6dc43b | 78 | |
MikamiUitOpen | 0:5bed9d6dc43b | 79 | int main() |
MikamiUitOpen | 0:5bed9d6dc43b | 80 | { |
ohneta | 2:18b19edf441d | 81 | pc.baud(115200); |
ohneta | 2:18b19edf441d | 82 | |
ohneta | 2:18b19edf441d | 83 | Complex y1[SAMPLING_NUM / 2 + 1]; |
ohneta | 2:18b19edf441d | 84 | Complex y2[SAMPLING_NUM / 2 + 1]; |
MikamiUitOpen | 0:5bed9d6dc43b | 85 | |
ohneta | 2:18b19edf441d | 86 | pc.printf("### START \n"); |
MikamiUitOpen | 0:5bed9d6dc43b | 87 | |
ohneta | 2:18b19edf441d | 88 | gSoundIntrFlag = 0; |
ohneta | 2:18b19edf441d | 89 | gSoundIntrCount = 0; |
ohneta | 2:18b19edf441d | 90 | uint32_t intr_us = 25; // |
ohneta | 2:18b19edf441d | 91 | soundInterrupt.attach_us(&soundInterruptHandle, intr_us); |
ohneta | 2:18b19edf441d | 92 | |
ohneta | 2:18b19edf441d | 93 | float dd = 20.0f; |
MikamiUitOpen | 0:5bed9d6dc43b | 94 | |
ohneta | 2:18b19edf441d | 95 | FftReal fft(SAMPLING_NUM); |
ohneta | 2:18b19edf441d | 96 | while (1) { |
ohneta | 2:18b19edf441d | 97 | |
ohneta | 2:18b19edf441d | 98 | if (gSoundIntrFlag == 1) { |
ohneta | 2:18b19edf441d | 99 | float r = ainR; |
ohneta | 2:18b19edf441d | 100 | float l = ainL; |
ohneta | 2:18b19edf441d | 101 | |
ohneta | 2:18b19edf441d | 102 | //pc.printf("*** [%02d] = %8.4f : %8.4f \n", gSoundIntrCount, r, l); |
MikamiUitOpen | 0:5bed9d6dc43b | 103 | |
ohneta | 2:18b19edf441d | 104 | gBufferR[gSoundIntrCount] = r * dd - 1.0f; |
ohneta | 2:18b19edf441d | 105 | if (gBufferR[gSoundIntrCount] < -1.0f) { |
ohneta | 2:18b19edf441d | 106 | gBufferR[gSoundIntrCount] = -1.0f; |
ohneta | 2:18b19edf441d | 107 | } else if (gBufferR[gSoundIntrCount] > 1.0f) { |
ohneta | 2:18b19edf441d | 108 | gBufferR[gSoundIntrCount] = 1.0f; |
ohneta | 2:18b19edf441d | 109 | } |
ohneta | 2:18b19edf441d | 110 | gBufferL[gSoundIntrCount] = l * dd - 1.0f; |
ohneta | 2:18b19edf441d | 111 | if (gBufferL[gSoundIntrCount] < -1.0f) { |
ohneta | 2:18b19edf441d | 112 | gBufferL[gSoundIntrCount] = -1.0f; |
ohneta | 2:18b19edf441d | 113 | } else if (gBufferL[gSoundIntrCount] > 1.0f) { |
ohneta | 2:18b19edf441d | 114 | gBufferL[gSoundIntrCount] = 1.0f; |
ohneta | 2:18b19edf441d | 115 | } |
ohneta | 2:18b19edf441d | 116 | //pc.printf("*** [%02d] = %2.4f : %2.4f : %2.4f : %2.4f \n", gSoundIntrCount, r, l, gBufferR[gSoundIntrCount], gBufferL[gSoundIntrCount]); |
ohneta | 2:18b19edf441d | 117 | //pc.printf("\n"); |
ohneta | 2:18b19edf441d | 118 | |
ohneta | 2:18b19edf441d | 119 | gSoundIntrCount++; |
ohneta | 2:18b19edf441d | 120 | if (gSoundIntrCount >= SAMPLING_NUM) { |
ohneta | 2:18b19edf441d | 121 | gSoundIntrCount = 0; |
ohneta | 2:18b19edf441d | 122 | |
ohneta | 2:18b19edf441d | 123 | fft.Execute(gBufferR, y1); |
ohneta | 2:18b19edf441d | 124 | fft.Execute(gBufferL, y2); |
ohneta | 2:18b19edf441d | 125 | |
ohneta | 2:18b19edf441d | 126 | //pc.printf("%c[2J%c[;H", 27, 27); |
ohneta | 2:18b19edf441d | 127 | pc.printf("%c[%c;%cH", 27, 0, 0); |
ohneta | 2:18b19edf441d | 128 | //pc.printf("%c[;H", 27); |
ohneta | 2:18b19edf441d | 129 | |
ohneta | 2:18b19edf441d | 130 | |
ohneta | 2:18b19edf441d | 131 | pc.printf(" [Right] [Left]\r\n"); |
ohneta | 2:18b19edf441d | 132 | for (int n = 0; n <= (SAMPLING_NUM / 2); n++) { |
ohneta | 2:18b19edf441d | 133 | uint32_t dtR = (uint32_t)abs(y1[n]); |
ohneta | 2:18b19edf441d | 134 | if (dtR >= (SAMPLING_NUM / 2)) { |
ohneta | 2:18b19edf441d | 135 | dtR = 15; |
ohneta | 2:18b19edf441d | 136 | } |
ohneta | 2:18b19edf441d | 137 | |
ohneta | 2:18b19edf441d | 138 | uint32_t dtL = (uint32_t)abs(y2[n]); |
ohneta | 2:18b19edf441d | 139 | if (dtL >= (SAMPLING_NUM / 2)) { |
ohneta | 2:18b19edf441d | 140 | dtL = 15; |
ohneta | 2:18b19edf441d | 141 | } |
ohneta | 2:18b19edf441d | 142 | |
ohneta | 2:18b19edf441d | 143 | pc.printf("%2d: %s : %s\r\n", n, gBarGraf[dtR], gBarGraf[dtL]); |
ohneta | 2:18b19edf441d | 144 | } |
ohneta | 2:18b19edf441d | 145 | |
ohneta | 2:18b19edf441d | 146 | } |
ohneta | 2:18b19edf441d | 147 | gSoundIntrFlag = 0; |
ohneta | 2:18b19edf441d | 148 | } |
ohneta | 2:18b19edf441d | 149 | } |
ohneta | 2:18b19edf441d | 150 | |
MikamiUitOpen | 0:5bed9d6dc43b | 151 | } |
ohneta | 2:18b19edf441d | 152 | |
ohneta | 2:18b19edf441d | 153 | //---------------------------------------------------- |