Appliquer un retard sur un signal audio (réduction de bruit)

Bonjour,
Je cherche à développer une enceinte anti-bruit. Pour ce faire j'ai un système composé d'un micro de perturbation qui capte le son à atténuer et le transmet à une Arduino due via un adaptateur. Un autre micro d'erreur capte le résultat de l'atténuation et le transmet à la due également pour faire une boucle de rétroaction. Enfin la due est censée transmettre au 2nd haut-parleur un son qui serait opposé en phase grâce à un retard avec une bonne amplitude grâce à la rétroaction du 2nd micro.


Cependant je n'est aucune connaissance en c++ et en arduino. J'ai un début de programme qui fait la numérisation et je pense utiliser un tableau pour faire le retard mais je ne sais pas comment le programmer.

Voici mon programme :

volatile int E_mic_p = 0;  // sur A0

volatile int E_mic_e = 0;   // sur A1

volatile float f_p;  // perturbation

volatile float f_e;   // erreur

volatile float f_ps;  // perturbation

volatile float f_es;   // erreur

volatile int S_DAC0;

volatile int S_DAC1;


//pour afficher les valeurs
volatile int   flag_print=LOW;
volatile int   eA0;
volatile float perturbation;
volatile float perturbation_s;
volatile int   sDAC0;

volatile byte changed = 0;



void setup()

{

  // put your setup code here, to run once:

  Serial.begin(9600);

  Serial.println("Hello reducteur de bruit actif ");

  delay(1000);

  analogReadResolution(12);

  analogWriteResolution(12);

  pinMode(49, OUTPUT);  // broche pour mesure temps exécution interruption

  pinMode(50, INPUT_PULLUP);  // broche pour horloge de la freq d'échantillonnage

  attachInterrupt(digitalPinToInterrupt(50), echantillonne, RISING);

  //pinMode(DAC0, OUTPUT);

  //pinMode(DAC1, OUTPUT);
  
}

 

void echantillonne()

{
  digitalWrite(49, HIGH); 

  E_mic_p = analogRead(A0); //0-4095

  E_mic_e = analogRead(A1);
  

  f_p = (E_mic_p-2047.5)*1650/2047.5; //+-1,65
  
  f_e = (E_mic_e - 2047.5) * 1650/2047.5;  

//processus

  //inversion et atténuation

  f_ps = f_p * -1;

  f_es = f_e * -1;


  //retard
  if (i==0)
  {
   
  }

//

  S_DAC0 = (f_ps +1650)*4095/3300; //0-4095

  S_DAC1 = (f_es+1650)*4095/3300;


  

  analogWrite(DAC0, S_DAC0);

  analogWrite(DAC1, S_DAC1);
  

  if (flag_print==LOW)
  {
   eA0=E_mic_p;
   perturbation=f_p;
   perturbation_s=f_ps;
   sDAC0=S_DAC0;
   flag_print=HIGH;
  }
  
  digitalWrite(49, LOW); 
}

 

 

 

void loop()

{
 if (flag_print==HIGH)
 {
 Serial.print("  A0=");
 Serial.print(eA0);

 Serial.print("  float eA0=");
 Serial.print(perturbation);

 Serial.print("  float après calcul =");
 Serial.print(perturbation_s);

 Serial.print("  S_DAC0=");
 Serial.println(sDAC0);

 flag_print=LOW;
 }
 
 delay(1500);

 
 
}

:warning:
Post mis dans la mauvaise section, on parle anglais dans les forums généraux. déplacé vers le forum francophone.

Merci de prendre en compte les recommandations listées dans Les bonnes pratiques du Forum Francophone

Pas de double post SVP.

Je ferme ce post, je laisse celui en anglais,