Récupérer la fréquence d'un signal avec microphone MAX4466


Bonjour,
Je tente d'utiliser un microphone max4466 pour récupérer la fréquence d'un signal sonore. La sortie de mon capteur est branché sur A0 et vcc en 5v sur ma carte pro micro. J'utilise le code suivant :



#include "fix_fft.h"                                  // fixed point Fast Fourier Transform library
#define audioIn A0                                    // audio input port


char re[128], im[128];                                // real and imaginary FFT result arrays

void setup() {
  analogReference(DEFAULT);   
  Serial.begin(9600);                      
};

void loop() {

  // The FFT real/imaginary data are stored in a char data type as a signed -128 to 127 number
  // This allows a waveform to swing centered around a 0 reference data point
  // The ADC returns data between 0-1023 so it is scaled to fit within a char by dividing by 4 and subtracting 128.
  // eg (0 / 4) - 128 = -128 and (1023 / 4) - 128 = 127

  for (byte i = 0; i < 128; i++) {                    // read 128 analog input samples from ADC
    int sample = analogRead(audioIn);
    //Serial.println(sample);
    re[i] = sample / 4 - 128;                         // scale the samples to fit within a char variable
    im[i] = 0;                                        // there are no imaginary samples associated with the time domain so set to 0
  };

  fix_fft(re, im, 7, 0);                              // send the samples for FFT conversion, returning the real/imaginary results in the same arrays

  // The data array will contain frequency bin data in locations 0..127 for samples up to the sampling frequency of approx. 9 KHz
  // Each frequency bin will represent a center frequency of approximately (9 KHz / 128 samples) = 70 Hz
  // Due to Nyquist sampling requirements, we can only consider sampled frequency data up to (sampling rate / 2) or (9 KHz / 2) = 4.5 KHz
  // Therefore we only acknowledge the first 64 frequency bins [0..63] = [0..4.5KHz]

  for (byte i = 0; i < 64; i++) {
    int dat = sqrt(re[i] * re[i] + im[i] * im[i]);     // frequency magnitude is the square root of the sum of the squares of the real and imaginary parts of a vector
    //int frequence=map(dat, 0,63,0,4500);
    Serial.println(dat);

  };

};

Mon problème est que je n'obtiens pas de valeur de fréquences cohérentes. Par exemple, si j'émets un signal à 736Hz avec mon téléphone, j'obtiens le spectre sur la photo. Mon objectif est de récupérer une valeur de fréquence qui s'approche de la valeur que j'émets avec mon téléphone. Ce micro sera placé dans une ruche pour récupérer la fréquence d'emmission des abeilles.
C'est un micro avec un gain réglable.
Je ne comprends pas pourquoi je n'obtiens pas une valeur de fréquence similaire à celle que je produits.
Merci pour votre aide

on voit quand même une fréquence qui ressort bien et 2 harmoniques

On ne connait pas la fréquence d'échantillonnage car vous tournez juste à fond.

faites tourner ce code

#include "fix_fft.h"                                  // fixed point Fast Fourier Transform library 
#define audioIn A0                                    // audio input port

char re[128], im[128];                                // real and imaginary FFT result arrays

void extraction() {
  unsigned long t0 = micros();
  for (byte i = 0; i < 128; i++) {                    // read 128 analog input samples from ADC
    re[i] = (analogRead(audioIn) / 4) - 128;          // scale the samples to fit within a char variable
    im[i] = 0;                                        // there are no imaginary samples associated with the time domain so set to 0
  }
  unsigned long t1 = micros();

  fix_fft(re, im, 7, 0);                              // send the samples for FFT conversion, returning the real/imaginary results in the same arrays

  unsigned long frequence = 128000000ul / (t1 - t0);
  unsigned long freqWindow = frequence / 128;

  Serial.println("#\tfenêtre Hz\tmagnitude");

  unsigned long magnitudeMax = 0;
  uint16_t indexMagnitudeMax = 0;
  for (uint16_t i = 0; i < 64; i++) {
    unsigned long magnitude = sqrt(re[i] * re[i] + im[i] * im[i]);     // frequency magnitude is the square root of the sum of the squares of the real and imaginary parts of a vector
    Serial.print(i);
    Serial.print("\t["); Serial.print(i * freqWindow);
    Serial.print(" , "); Serial.print((i + 1)*freqWindow);
    Serial.print("]\t"); Serial.println(magnitude);
    if (magnitude > magnitudeMax) {
      magnitudeMax = magnitude;
      indexMagnitudeMax = i;
    }
  }
  Serial.println ("------------------------");
  Serial.print("Fréquence acquisition = "); Serial.print(frequence); Serial.println (" Hz.");
  Serial.print("Magnitude Max dans l'intervalle ["); Serial.print(indexMagnitudeMax * freqWindow);
  Serial.print(" , "); Serial.print((indexMagnitudeMax + 1)*freqWindow);
  Serial.print("] Hz\t(magnitude = "); Serial.print(magnitudeMax);
  Serial.println (")\n------------------------\n");

}

void setup() {
  analogReference(DEFAULT);
  Serial.begin(115200);
  for (byte i = 0; i < 10; i++) {
    Serial.print ("------------------------\nExtraction #");
    Serial.println(i);
    Serial.println ("------------------------");
    extraction();
  }
}

void loop() {}
  • lancez le son sur votre téléphone,
  • ouvrez le moniteur série à 1115200 bauds, laissez tourner le temps de 10 FFT (ça va vite)
  • copiez le texte obtenu dans le moniteur série
  • collez le ici dans des balises de code

quelles sont les fréquences que tu obtiens?
Pourquoi tu divise par 4 la valeur échantillioné et ne fait pas une régle de 3?

Merci pour votre réponse.
A 736Hz, je colle le micro au haut parleur du téléphone et j'obtiens ça :

#	fenêtre Hz	magnitude
0	[0 , 68]	7
1	[68 , 136]	8
2	[136 , 204]	7
3	[204 , 272]	3
4	[272 , 340]	1
5	[340 , 408]	2
6	[408 , 476]	4
7	[476 , 544]	0
8	[544 , 612]	2
9	[612 , 680]	3
10	[680 , 748]	6
11	[748 , 816]	12
12	[816 , 884]	3
13	[884 , 952]	0
14	[952 , 1020]	2
15	[1020 , 1088]	1
16	[1088 , 1156]	0
17	[1156 , 1224]	1
18	[1224 , 1292]	1
19	[1292 , 1360]	0
20	[1360 , 1428]	0
21	[1428 , 1496]	1
22	[1496 , 1564]	0
23	[1564 , 1632]	0
24	[1632 , 1700]	1
25	[1700 , 1768]	1
26	[1768 , 1836]	1
27	[1836 , 1904]	1
28	[1904 , 1972]	1
29	[1972 , 2040]	1
30	[2040 , 2108]	1
31	[2108 , 2176]	0
32	[2176 , 2244]	0
33	[2244 , 2312]	0
34	[2312 , 2380]	2
35	[2380 , 2448]	1
36	[2448 , 2516]	0
37	[2516 , 2584]	1
38	[2584 , 2652]	1
39	[2652 , 2720]	1
40	[2720 , 2788]	1
41	[2788 , 2856]	1
42	[2856 , 2924]	1
43	[2924 , 2992]	1
44	[2992 , 3060]	1
45	[3060 , 3128]	0
46	[3128 , 3196]	1
47	[3196 , 3264]	1
48	[3264 , 3332]	0
49	[3332 , 3400]	0
50	[3400 , 3468]	1
51	[3468 , 3536]	0
52	[3536 , 3604]	1
53	[3604 , 3672]	1
54	[3672 , 3740]	1
55	[3740 , 3808]	0
56	[3808 , 3876]	0
57	[3876 , 3944]	1
58	[3944 , 4012]	1
59	[4012 , 4080]	1
60	[4080 , 4148]	1
61	[4148 , 4216]	1
62	[4216 , 4284]	1
63	[4284 , 4352]	1
------------------------
Fréquence acquisition = 8803 Hz.
Magnitude Max dans l'intervalle [748 , 816] Hz	(magnitude = 12)
------------------------

------------------------
Extraction #1
------------------------
#	fenêtre Hz	magnitude
0	[0 , 69]	2
1	[69 , 138]	2
2	[138 , 207]	1
3	[207 , 276]	1
4	[276 , 345]	1
5	[345 , 414]	2
6	[414 , 483]	0
7	[483 , 552]	1
8	[552 , 621]	2
9	[621 , 690]	2
10	[690 , 759]	8
11	[759 , 828]	11
12	[828 , 897]	3
13	[897 , 966]	1
14	[966 , 1035]	1
15	[1035 , 1104]	1
16	[1104 , 1173]	0
17	[1173 , 1242]	1
18	[1242 , 1311]	1
19	[1311 , 1380]	1
20	[1380 , 1449]	1
21	[1449 , 1518]	1
22	[1518 , 1587]	1
23	[1587 , 1656]	0
24	[1656 , 1725]	0
25	[1725 , 1794]	0
26	[1794 , 1863]	1
27	[1863 , 1932]	0
28	[1932 , 2001]	1
29	[2001 , 2070]	1
30	[2070 , 2139]	1
31	[2139 , 2208]	0
32	[2208 , 2277]	0
33	[2277 , 2346]	0
34	[2346 , 2415]	0
35	[2415 , 2484]	0
36	[2484 , 2553]	1
37	[2553 , 2622]	0
38	[2622 , 2691]	0
39	[2691 , 2760]	0
40	[2760 , 2829]	1
41	[2829 , 2898]	0
42	[2898 , 2967]	1
43	[2967 , 3036]	0
44	[3036 , 3105]	1
45	[3105 , 3174]	0
46	[3174 , 3243]	0
47	[3243 , 3312]	0
48	[3312 , 3381]	0
49	[3381 , 3450]	0
50	[3450 , 3519]	0
51	[3519 , 3588]	0
52	[3588 , 3657]	1
53	[3657 , 3726]	1
54	[3726 , 3795]	1
55	[3795 , 3864]	1
56	[3864 , 3933]	1
57	[3933 , 4002]	1
58	[4002 , 4071]	1
59	[4071 , 4140]	1
60	[4140 , 4209]	1
61	[4209 , 4278]	1
62	[4278 , 4347]	0
63	[4347 , 4416]	0
------------------------
Fréquence acquisition = 8916 Hz.
Magnitude Max dans l'intervalle [759 , 828] Hz	(magnitude = 11)
------------------------

------------------------
Extraction #2
------------------------
#	fenêtre Hz	magnitude
0	[0 , 69]	8
1	[69 , 138]	5
2	[138 , 207]	3
3	[207 , 276]	2
4	[276 , 345]	2
5	[345 , 414]	2
6	[414 , 483]	1
7	[483 , 552]	2
8	[552 , 621]	2
9	[621 , 690]	3
10	[690 , 759]	7
11	[759 , 828]	10
12	[828 , 897]	2
13	[897 , 966]	1
14	[966 , 1035]	2
15	[1035 , 1104]	1
16	[1104 , 1173]	1
17	[1173 , 1242]	1
18	[1242 , 1311]	1
19	[1311 , 1380]	1
20	[1380 , 1449]	1
21	[1449 , 1518]	1
22	[1518 , 1587]	1
23	[1587 , 1656]	1
24	[1656 , 1725]	1
25	[1725 , 1794]	0
26	[1794 , 1863]	1
27	[1863 , 1932]	1
28	[1932 , 2001]	1
29	[2001 , 2070]	1
30	[2070 , 2139]	2
31	[2139 , 2208]	0
32	[2208 , 2277]	0
33	[2277 , 2346]	0
34	[2346 , 2415]	1
35	[2415 , 2484]	0
36	[2484 , 2553]	1
37	[2553 , 2622]	1
38	[2622 , 2691]	1
39	[2691 , 2760]	1
40	[2760 , 2829]	1
41	[2829 , 2898]	2
42	[2898 , 2967]	0
43	[2967 , 3036]	2
44	[3036 , 3105]	2
45	[3105 , 3174]	1
46	[3174 , 3243]	1
47	[3243 , 3312]	1
48	[3312 , 3381]	1
49	[3381 , 3450]	1
50	[3450 , 3519]	1
51	[3519 , 3588]	1
52	[3588 , 3657]	1
53	[3657 , 3726]	1
54	[3726 , 3795]	0
55	[3795 , 3864]	0
56	[3864 , 3933]	1
57	[3933 , 4002]	1
58	[4002 , 4071]	1
59	[4071 , 4140]	1
60	[4140 , 4209]	1
61	[4209 , 4278]	1
62	[4278 , 4347]	1
63	[4347 , 4416]	0
------------------------
Fréquence acquisition = 8908 Hz.
Magnitude Max dans l'intervalle [759 , 828] Hz	(magnitude = 10)
------------------------

------------------------
Extraction #3
------------------------
#	fenêtre Hz	magnitude
0	[0 , 69]	2
1	[69 , 138]	2
2	[138 , 207]	2
3	[207 , 276]	2
4	[276 , 345]	1
5	[345 , 414]	2
6	[414 , 483]	2
7	[483 , 552]	2
8	[552 , 621]	2
9	[621 , 690]	2
10	[690 , 759]	7
11	[759 , 828]	9
12	[828 , 897]	1
13	[897 , 966]	0
14	[966 , 1035]	1
15	[1035 , 1104]	1
16	[1104 , 1173]	0
17	[1173 , 1242]	0
18	[1242 , 1311]	0
19	[1311 , 1380]	1
20	[1380 , 1449]	1
21	[1449 , 1518]	0
22	[1518 , 1587]	1
23	[1587 , 1656]	1
24	[1656 , 1725]	0
25	[1725 , 1794]	1
26	[1794 , 1863]	1
27	[1863 , 1932]	1
28	[1932 , 2001]	1
29	[2001 , 2070]	0
30	[2070 , 2139]	2
31	[2139 , 2208]	0
32	[2208 , 2277]	1
33	[2277 , 2346]	0
34	[2346 , 2415]	1
35	[2415 , 2484]	0
36	[2484 , 2553]	0
37	[2553 , 2622]	0
38	[2622 , 2691]	1
39	[2691 , 2760]	1
40	[2760 , 2829]	0
41	[2829 , 2898]	0
42	[2898 , 2967]	1
43	[2967 , 3036]	1
44	[3036 , 3105]	0
45	[3105 , 3174]	0
46	[3174 , 3243]	1
47	[3243 , 3312]	1
48	[3312 , 3381]	0
49	[3381 , 3450]	0
50	[3450 , 3519]	0
51	[3519 , 3588]	1
52	[3588 , 3657]	1
53	[3657 , 3726]	1
54	[3726 , 3795]	1
55	[3795 , 3864]	1
56	[3864 , 3933]	0
57	[3933 , 4002]	0
58	[4002 , 4071]	0
59	[4071 , 4140]	1
60	[4140 , 4209]	1
61	[4209 , 4278]	1
62	[4278 , 4347]	0
63	[4347 , 4416]	0
------------------------
Fréquence acquisition = 8913 Hz.
Magnitude Max dans l'intervalle [759 , 828] Hz	(magnitude = 9)
------------------------

------------------------
Extraction #4
------------------------
#	fenêtre Hz	magnitude
0	[0 , 69]	0
1	[69 , 138]	1
2	[138 , 207]	0
3	[207 , 276]	0
4	[276 , 345]	0
5	[345 , 414]	0
6	[414 , 483]	0
7	[483 , 552]	1
8	[552 , 621]	2
9	[621 , 690]	2
10	[690 , 759]	8
11	[759 , 828]	10
12	[828 , 897]	3
13	[897 , 966]	1
14	[966 , 1035]	1
15	[1035 , 1104]	1
16	[1104 , 1173]	0
17	[1173 , 1242]	0
18	[1242 , 1311]	0
19	[1311 , 1380]	1
20	[1380 , 1449]	0
21	[1449 , 1518]	1
22	[1518 , 1587]	0
23	[1587 , 1656]	0
24	[1656 , 1725]	1
25	[1725 , 1794]	1
26	[1794 , 1863]	1
27	[1863 , 1932]	1
28	[1932 , 2001]	1
29	[2001 , 2070]	0
30	[2070 , 2139]	1
31	[2139 , 2208]	0
32	[2208 , 2277]	1
33	[2277 , 2346]	0
34	[2346 , 2415]	0
35	[2415 , 2484]	1
36	[2484 , 2553]	0
37	[2553 , 2622]	0
38	[2622 , 2691]	0
39	[2691 , 2760]	0
40	[2760 , 2829]	1
41	[2829 , 2898]	1
42	[2898 , 2967]	0
43	[2967 , 3036]	0
44	[3036 , 3105]	0
45	[3105 , 3174]	0
46	[3174 , 3243]	0
47	[3243 , 3312]	1
48	[3312 , 3381]	0
49	[3381 , 3450]	0
50	[3450 , 3519]	0
51	[3519 , 3588]	0
52	[3588 , 3657]	0
53	[3657 , 3726]	1
54	[3726 , 3795]	0
55	[3795 , 3864]	1
56	[3864 , 3933]	1
57	[3933 , 4002]	0
58	[4002 , 4071]	0
59	[4071 , 4140]	0
60	[4140 , 4209]	1
61	[4209 , 4278]	0
62	[4278 , 4347]	0
63	[4347 , 4416]	1
------------------------
Fréquence acquisition = 8918 Hz.
Magnitude Max dans l'intervalle [759 , 828] Hz	(magnitude = 10)
------------------------

------------------------
Extraction #5
------------------------
#	fenêtre Hz	magnitude
0	[0 , 69]	1
1	[69 , 138]	1
2	[138 , 207]	0
3	[207 , 276]	1
4	[276 , 345]	0
5	[345 , 414]	1
6	[414 , 483]	0
7	[483 , 552]	1
8	[552 , 621]	2
9	[621 , 690]	1
10	[690 , 759]	7
11	[759 , 828]	11
12	[828 , 897]	3
13	[897 , 966]	2
14	[966 , 1035]	1
15	[1035 , 1104]	2
16	[1104 , 1173]	0
17	[1173 , 1242]	0
18	[1242 , 1311]	0
19	[1311 , 1380]	1
20	[1380 , 1449]	1
21	[1449 , 1518]	0
22	[1518 , 1587]	1
23	[1587 , 1656]	1
24	[1656 , 1725]	1
25	[1725 , 1794]	1
26	[1794 , 1863]	1
27	[1863 , 1932]	1
28	[1932 , 2001]	1
29	[2001 , 2070]	1
30	[2070 , 2139]	1
31	[2139 , 2208]	0
32	[2208 , 2277]	0
33	[2277 , 2346]	0
34	[2346 , 2415]	0
35	[2415 , 2484]	0
36	[2484 , 2553]	0
37	[2553 , 2622]	0
38	[2622 , 2691]	0
39	[2691 , 2760]	1
40	[2760 , 2829]	1
41	[2829 , 2898]	1
42	[2898 , 2967]	1
43	[2967 , 3036]	0
44	[3036 , 3105]	1
45	[3105 , 3174]	1
46	[3174 , 3243]	1
47	[3243 , 3312]	1
48	[3312 , 3381]	0
49	[3381 , 3450]	0
50	[3450 , 3519]	0
51	[3519 , 3588]	0
52	[3588 , 3657]	2
53	[3657 , 3726]	1
54	[3726 , 3795]	1
55	[3795 , 3864]	1
56	[3864 , 3933]	0
57	[3933 , 4002]	1
58	[4002 , 4071]	1
59	[4071 , 4140]	1
60	[4140 , 4209]	1
61	[4209 , 4278]	0
62	[4278 , 4347]	0
63	[4347 , 4416]	0
------------------------
Fréquence acquisition = 8916 Hz.
Magnitude Max dans l'intervalle [759 , 828] Hz	(magnitude = 11)
------------------------

------------------------
Extraction #6
------------------------
#	fenêtre Hz	magnitude
0	[0 , 69]	1
1	[69 , 138]	1
2	[138 , 207]	1
3	[207 , 276]	1
4	[276 , 345]	1
5	[345 , 414]	0
6	[414 , 483]	1
7	[483 , 552]	1
8	[552 , 621]	1
9	[621 , 690]	2
10	[690 , 759]	5
11	[759 , 828]	12
12	[828 , 897]	4
13	[897 , 966]	3
14	[966 , 1035]	1
15	[1035 , 1104]	2
16	[1104 , 1173]	1
17	[1173 , 1242]	1
18	[1242 , 1311]	1
19	[1311 , 1380]	2
20	[1380 , 1449]	1
21	[1449 , 1518]	1
22	[1518 , 1587]	1
23	[1587 , 1656]	1
24	[1656 , 1725]	1
25	[1725 , 1794]	0
26	[1794 , 1863]	1
27	[1863 , 1932]	0
28	[1932 , 2001]	1
29	[2001 , 2070]	1
30	[2070 , 2139]	1
31	[2139 , 2208]	0
32	[2208 , 2277]	1
33	[2277 , 2346]	1
34	[2346 , 2415]	1
35	[2415 , 2484]	1
36	[2484 , 2553]	1
37	[2553 , 2622]	0
38	[2622 , 2691]	1
39	[2691 , 2760]	1
40	[2760 , 2829]	1
41	[2829 , 2898]	1
42	[2898 , 2967]	1
43	[2967 , 3036]	1
44	[3036 , 3105]	1
45	[3105 , 3174]	1
46	[3174 , 3243]	1
47	[3243 , 3312]	1
48	[3312 , 3381]	1
49	[3381 , 3450]	1
50	[3450 , 3519]	1
51	[3519 , 3588]	1
52	[3588 , 3657]	2
53	[3657 , 3726]	0
54	[3726 , 3795]	2
55	[3795 , 3864]	0
56	[3864 , 3933]	1
57	[3933 , 4002]	0
58	[4002 , 4071]	1
59	[4071 , 4140]	1
60	[4140 , 4209]	1
61	[4209 , 4278]	1
62	[4278 , 4347]	1
63	[4347 , 4416]	0
------------------------
Fréquence acquisition = 8918 Hz.
Magnitude Max dans l'intervalle [759 , 828] Hz	(magnitude = 12)
------------------------

------------------------
Extraction #7
------------------------
#	fenêtre Hz	magnitude
0	[0 , 69]	1
1	[69 , 138]	1
2	[138 , 207]	1
3	[207 , 276]	1
4	[276 , 345]	0
5	[345 , 414]	0
6	[414 , 483]	0
7	[483 , 552]	0
8	[552 , 621]	1
9	[621 , 690]	0
10	[690 , 759]	7
11	[759 , 828]	11
12	[828 , 897]	4
13	[897 , 966]	2
14	[966 , 1035]	1
15	[1035 , 1104]	1
16	[1104 , 1173]	1
17	[1173 , 1242]	1
18	[1242 , 1311]	1
19	[1311 , 1380]	1
20	[1380 , 1449]	1
21	[1449 , 1518]	0
22	[1518 , 1587]	1
23	[1587 , 1656]	0
24	[1656 , 1725]	1
25	[1725 , 1794]	1
26	[1794 , 1863]	0
27	[1863 , 1932]	0
28	[1932 , 2001]	0
29	[2001 , 2070]	1
30	[2070 , 2139]	2
31	[2139 , 2208]	1
32	[2208 , 2277]	1
33	[2277 , 2346]	1
34	[2346 , 2415]	1
35	[2415 , 2484]	1
36	[2484 , 2553]	1
37	[2553 , 2622]	0
38	[2622 , 2691]	0
39	[2691 , 2760]	0
40	[2760 , 2829]	1
41	[2829 , 2898]	1
42	[2898 , 2967]	1
43	[2967 , 3036]	1
44	[3036 , 3105]	1
45	[3105 , 3174]	1
46	[3174 , 3243]	0
47	[3243 , 3312]	1
48	[3312 , 3381]	1
49	[3381 , 3450]	1
50	[3450 , 3519]	1
51	[3519 , 3588]	1
52	[3588 , 3657]	0
53	[3657 , 3726]	1
54	[3726 , 3795]	0
55	[3795 , 3864]	0
56	[3864 , 3933]	0
57	[3933 , 4002]	1
58	[4002 , 4071]	1
59	[4071 , 4140]	1
60	[4140 , 4209]	1
61	[4209 , 4278]	1
62	[4278 , 4347]	1
63	[4347 , 4416]	0
------------------------
Fréquence acquisition = 8913 Hz.
Magnitude Max dans l'intervalle [759 , 828] Hz	(magnitude = 11)
------------------------

------------------------
Extraction #8
------------------------
#	fenêtre Hz	magnitude
0	[0 , 69]	1
1	[69 , 138]	1
2	[138 , 207]	0
3	[207 , 276]	1
4	[276 , 345]	0
5	[345 , 414]	0
6	[414 , 483]	1
7	[483 , 552]	0
8	[552 , 621]	1
9	[621 , 690]	1
10	[690 , 759]	6
11	[759 , 828]	10
12	[828 , 897]	4
13	[897 , 966]	2
14	[966 , 1035]	2
15	[1035 , 1104]	1
16	[1104 , 1173]	1
17	[1173 , 1242]	1
18	[1242 , 1311]	1
19	[1311 , 1380]	1
20	[1380 , 1449]	1
21	[1449 , 1518]	1
22	[1518 , 1587]	1
23	[1587 , 1656]	0
24	[1656 , 1725]	1
25	[1725 , 1794]	1
26	[1794 , 1863]	1
27	[1863 , 1932]	0
28	[1932 , 2001]	0
29	[2001 , 2070]	0
30	[2070 , 2139]	1
31	[2139 , 2208]	1
32	[2208 , 2277]	1
33	[2277 , 2346]	1
34	[2346 , 2415]	1
35	[2415 , 2484]	1
36	[2484 , 2553]	1
37	[2553 , 2622]	0
38	[2622 , 2691]	0
39	[2691 , 2760]	0
40	[2760 , 2829]	1
41	[2829 , 2898]	1
42	[2898 , 2967]	1
43	[2967 , 3036]	1
44	[3036 , 3105]	1
45	[3105 , 3174]	1
46	[3174 , 3243]	1
47	[3243 , 3312]	1
48	[3312 , 3381]	1
49	[3381 , 3450]	1
50	[3450 , 3519]	1
51	[3519 , 3588]	1
52	[3588 , 3657]	0
53	[3657 , 3726]	0
54	[3726 , 3795]	0
55	[3795 , 3864]	0
56	[3864 , 3933]	0
57	[3933 , 4002]	0
58	[4002 , 4071]	0
59	[4071 , 4140]	1
60	[4140 , 4209]	1
61	[4209 , 4278]	0
62	[4278 , 4347]	1
63	[4347 , 4416]	0
------------------------
Fréquence acquisition = 8918 Hz.
Magnitude Max dans l'intervalle [759 , 828] Hz	(magnitude = 10)
------------------------

------------------------
Extraction #9
------------------------
#	fenêtre Hz	magnitude
0	[0 , 69]	1
1	[69 , 138]	1
2	[138 , 207]	1
3	[207 , 276]	1
4	[276 , 345]	0
5	[345 , 414]	1
6	[414 , 483]	0
7	[483 , 552]	0
8	[552 , 621]	0
9	[621 , 690]	1
10	[690 , 759]	8
11	[759 , 828]	11
12	[828 , 897]	3
13	[897 , 966]	2
14	[966 , 1035]	2
15	[1035 , 1104]	2
16	[1104 , 1173]	1
17	[1173 , 1242]	1
18	[1242 , 1311]	1
19	[1311 , 1380]	1
20	[1380 , 1449]	2
21	[1449 , 1518]	1
22	[1518 , 1587]	0
23	[1587 , 1656]	1
24	[1656 , 1725]	1
25	[1725 , 1794]	1
26	[1794 , 1863]	1
27	[1863 , 1932]	0
28	[1932 , 2001]	1
29	[2001 , 2070]	0
30	[2070 , 2139]	1
31	[2139 , 2208]	1
32	[2208 , 2277]	1
33	[2277 , 2346]	1
34	[2346 , 2415]	1
35	[2415 , 2484]	1
36	[2484 , 2553]	0
37	[2553 , 2622]	1
38	[2622 , 2691]	0
39	[2691 , 2760]	0
40	[2760 , 2829]	1
41	[2829 , 2898]	1
42	[2898 , 2967]	1
43	[2967 , 3036]	1
44	[3036 , 3105]	1
45	[3105 , 3174]	1
46	[3174 , 3243]	1
47	[3243 , 3312]	0
48	[3312 , 3381]	1
49	[3381 , 3450]	1
50	[3450 , 3519]	1
51	[3519 , 3588]	1
52	[3588 , 3657]	1
53	[3657 , 3726]	2
54	[3726 , 3795]	1
55	[3795 , 3864]	0
56	[3864 , 3933]	0
57	[3933 , 4002]	0
58	[4002 , 4071]	0
59	[4071 , 4140]	0
60	[4140 , 4209]	0
61	[4209 , 4278]	0
62	[4278 , 4347]	0
63	[4347 , 4416]	0
------------------------
Fréquence acquisition = 8923 Hz.
Magnitude Max dans l'intervalle [759 , 828] Hz	(magnitude = 11)
------------------------


Bonjour
La librairie fix_fft attends des valeurs entre -128 et 128 pour calculer la transformée de Fourier.
En utilisant le code de @J-M-L , j'obtiens un max en amplitude pour un range de frequences entre [759 , 828] Hz

Pour étalonner une fft, tu peux aller sur Youtube. Il y a des vidéos avec des sons à une seule fréquence. Il suffit de chercher '1000hz' par exemple.

Bonsoir @clem64000

Le son émis par le téléphone a donc une fondementale de 736Hz
La raie de FFT la plus intense , avace ce code et ce matériel, est celle couvrant 759Hz à 828Hz ,

-> résulat honorable pour une FFT de 128 points seulement, non étalonnée et avec une fréquence d'acquistion seulement 10 fois plus élevée que la fréquence à mesurer.

Remarques :
le code fait une FFT sur 128 points
Le résulat affiché montre logiquement 128 /2 = 64 raies
Fréquence d'acquisition = 8923Hz

la largeur d echaque raie est 69Hz = (8923 / 2) /64

Pour obtenir des raies plus fines tu peux utiliser un microcontrolleur ayant assez de RAM pour faire une FFT de 256, 512, 1024.... points

C’est donc pas mal vous n’êtes donc pas loin. Le capteur n’est sans doute pas super optimisé et comme le dit @al1fch vous avez peu de points…

Comment peut on étalonner une fft ? Je sais que ma plage de mesure intéressante se situe entre 50 et 600Hz environ.

Tu prends des fichiers sonores à différentes fréquences et tu regardes à chaque fois quelle fréquence te donne ta FFT. Si c'est pareil, tout va bien, sinon tu essayes de jouer avec les paramètres (fréquence d'échantillonnage, durée du signal) pour t'en rapprocher.
Lorsque tu as les bons paramètres, tu ne les changes plus. Ensuite, tu notes chaque valeur renvoyée par la FFT pour diverses fréquences entre 50 et 600Hz et tu obtiens un courbe d'étalonnage. Elle te servira à améliorer la précision de ton calcul.

Plus d'infos ici. En fait, ce n'est pas la FFT que tu vas étalonner, c'est l'ensemble de ton système.

Quelque chose qui pourrait être intéressant

Trouvé ici

Pour exploiter les résultats d'une Transformée de Fourier, il est indispensable de connaitre la fréquence d'échantillonage du signal (qui doit de plus être constante)
Or cette notion est totalement absente de ton programme.

pas tout à fait...

@JML je ne parlais pas du tien, mais de celui de @clem64000

ah OK - c'était déjà dit dans la première réponse

Bonjour à tous,
désolé pour la réponse tardive, j'ai eu pas mal de galères entre la carte qui a grillé, le pcb rayé etc...
Merci pour vos réponses, d'après ce que je comprends, on choisit 128 points pour la FFT car c'est la limite de l'arduino que j'utilise (pro micro).
Pour la fréquence d'échantillonnage j'ai besoin de mettre minimum 1212Hz car je souhaite faire des mesures à 600Hz max. Cependant je ne comprends pas comment renseigner cette fréquence d'échantillonnage dans le code.