Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Revision 0:96c89b4dc711, committed 2020-12-08
- Comitter:
- villemejane
- Date:
- Tue Dec 08 12:10:01 2020 +0000
- Child:
- 1:76fbb91a0331
- Child:
- 2:47d90ce030a3
- Commit message:
- Calcul de FFT sur 256 points
Changed in this revision
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp Tue Dec 08 12:10:01 2020 +0000
@@ -0,0 +1,66 @@
+#include "mbed.h"
+#include "arm_math.h"
+/* Include mbed-dsp libraries */
+#include "dsp.h"
+#include "arm_common_tables.h"
+#include "arm_const_structs.h"
+
+#define SAMPLES 512 /* 256 real party and 256 imaginary parts */
+#define FFT_SIZE SAMPLES / 2 /* FFT size is always the same size as we have samples, so 256 in our case */
+
+float32_t Input[SAMPLES];
+float32_t Output[FFT_SIZE];
+bool trig=0;
+int indice = 0;
+
+DigitalOut myled(LED1);
+AnalogIn myADC(A0);
+AnalogOut myDAC(A2);
+Serial pc(USBTX, USBRX);
+Ticker timer;
+
+void sample(){
+ myled = 1;
+ if(indice < SAMPLES){
+ Input[indice] = myADC.read() - 0.5f; //Real part NB removing DC offset
+ Input[indice + 1] = 0; //Imaginary Part set to zero
+ indice += 2;
+ }
+ else{ trig = 0; }
+ myled = 0;
+}
+
+int main() {
+ float maxValue; // Max FFT value is stored here
+ uint32_t maxIndex; // Index in Output array where max value is
+
+ while(1) {
+ if(trig == 0){
+ timer.detach();
+ // Init the Complex FFT module, intFlag = 0, doBitReverse = 1
+ //NB using predefined arm_cfft_sR_f32_lenXXX, in this case XXX is 256
+ arm_cfft_f32(&arm_cfft_sR_f32_len256, Input, 0, 1);
+
+ // Complex Magniture Module put results into Output(Half size of the Input)
+ arm_cmplx_mag_f32(Input, Output, FFT_SIZE);
+ Output[0] = 0;
+ //Calculates maxValue and returns corresponding value
+ arm_max_f32(Output, FFT_SIZE/2, &maxValue, &maxIndex);
+
+ myDAC=1.0; //SYNC Pulse to DAC Output
+ wait_us(20); //Used on Oscilliscope set trigger level to the highest
+ myDAC=0.0; //point on this pulse
+
+ for(int i=0; i < FFT_SIZE / 2; i++){
+ myDAC=(Output[i]) * 0.9; // Scale to Max Value and scale to 90 / 100
+ wait_us(10); //Each pulse of 10us is 50KHz/256 = 195Hz resolution
+ }
+ myDAC=0.0;
+ pc.printf("MAX = %lf, %d \r\n", maxValue, maxIndex);
+ wait(0.2);
+ trig = 1;
+ indice = 0;
+ timer.attach_us(&sample,40); //20us 50KHz sampling rate
+ }
+ }
+}
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mbed-dsp.lib Tue Dec 08 12:10:01 2020 +0000 @@ -0,0 +1,1 @@ +https://os.mbed.com/users/mbed_official/code/mbed-dsp/#3762170b6d4d
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mbed.bld Tue Dec 08 12:10:01 2020 +0000 @@ -0,0 +1,1 @@ +https://os.mbed.com/users/mbed_official/code/mbed/builds/65be27845400 \ No newline at end of file