FFT for LPC1114FN28 with UTI_FFT_Real_mod

Dependencies:   UIT_FFT_Real_mod mbed

Fork of Demo_FFT_IFFT by 不韋 呂

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?

UserRevisionLine numberNew 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 //----------------------------------------------------