Inhaltsverzeichnis:

Autotune: 7 Schritte
Autotune: 7 Schritte

Video: Autotune: 7 Schritte

Video: Autotune: 7 Schritte
Video: Geliebt & gehasst: Sinch demonstriert den Auto-Tune-Effekt mit Cubase VariAudio 2024, Juli
Anonim
Autotune
Autotune

Bienvenue dans notre project Autotune

Notre équipe va vous présenter la réalisation de ce projet. Notre équipe est composée de 3 élèves ingénieurs de Polytech Sorbonne en EISE4 (4ème année du cycle ingénieur en électronique informatique systèmes embarqués).

Notre projet besteht aus einem émettre ein son capter von einem micro, einem émit von einem haut parleur und einem afficher la FFT auf einem écran PC. Il sera possible de modifier le son audio comme le volume et créer un écho.

C'est parti pour les explications !!

Schritt 1: Composants Utilisés

  • Karte DEO-Nano-SoC
  • Batterie 2 Ausgang à 5V2A
  • Mikro
  • Hautparleur 8 Ohm
  • Regler: MAX660
  • Erfassungs-IR: GP2Y0E02A
  • Verstärker-Audio: LM386N-1/NOPB
  • DAC: MCP4821-E/P
  • Diode: 1N4148
  • Übertrager: LND150N3-G / N-FET
  • 2 AOP: TL081C
  • Widerstände
  • Kondensatoren
  • WLAN: ESP8266EX
  • 4 Schalter
  • 3 LED-Farben

Schritt 2: Architektur

Die Architektur
Die Architektur

Voici ci-dessus notre schema bloc représentant l'architecture de notre projet Autotune.

Comme vous pouvez le voir, notre projet va pouvoir capter ein son à l'aide du micro Dont le signal analogique capté sera converti en a signal numérique dont l'ADC est intégré dans la carte FPGA. Puis le signal sera modifié selon nos effets choisis à l'aide d'un capteur de proximité et des switch. Enfin, le signal modifié depuis la carte sera reconverti en a signal analogique und sera transmise à travers le haut parleur.

Schritt 3: Party Analogique

Party-Analoga
Party-Analoga
Party-Analoga
Party-Analoga
Party-Analoga
Party-Analoga

Notre partie analogie est composée de 2 Circuits:

Eine erstklassige Schaltung, die ein Mikropartie repräsentiert, eine Branche mit einer CAN-Karte FPGA, eine Zusammenstellung eines Verstärkungsverstärkers und eine passive Filterung des Signals.

Ein deuxieme Circuit qui repésentera la partie haut parleur, qui sera branché à la sortie de la carte FPGA, Composé du DAC, d'un diviseur de Spannung und d'un amplificateur audio.

Le troisième schema est celui du régulateur produisant du -5V pour alimenter tous les composants.

Schritt 4: Impression Des PCBs

Impression Des PCBs
Impression Des PCBs
Impression Des PCBs
Impression Des PCBs
Impression Des PCBs
Impression Des PCBs

Maintenant, nous allons créer nos PCB afin de les imprimer et de les relier !

A l'aide du logiciel Alitum, nous avons pu creer deux PCBs, c'est à dire la partie micro und haut parleur. Voici le site Correspondant au tutoriel Altium qui peut sureement vous aider !

Schritt 5: Party Numérique

Parteinummer
Parteinummer

Après avoir imprimer vos PCBs, vous pouvez enfin brancher à la carte FPGA!

Pour la partie numérique, nous avons créer un code C qui est séparé en deux en utilisant un thread. D'un coté, on récupère le signal on le modifie et on l'envoie vers le DAC en spi. D'un deuxième côté, auf Rechnung von fft und auf envoie le résultat par wifi. Cette séparation permet d'éviter les ralentissements sur la première partie.

Bei Verwendung von Qsys und Quartus für HPS-Verzweiger mit verschiedenen Komponenten. Bei Verwendung einer IP-SPI für eine Verbindung mit einem DAC und einer IP-UART für eine Verbindung mit einer WLAN-Karte.

Schritt 6: Le-Code

Voici le lien où nous avons recuperé le code pour faire la fft.

Bei Verwendung des Se code pour Calculator la fft:

// Erstellung der Konfiguration und des Puffers in et out pour s(t) und S(f) const kiss_fft_cfg config = kiss_fft_alloc(NFFT, 0, NULL, NULL);

kiss_fft_cpx* in = (kiss_fft_cpx*)malloc(NFFT*sizeof(kiss_fft_cpx));kiss_fft_cpx* out = (kiss_fft_cpx*)malloc(NFFT*sizeof(kiss_fft_cpx));

for(j = 0; j < NFFT; j++){Wert = *h2p_lw_adc_addr; //recupère la valeur provenant du PCB du microin[j].r = Value-2000.0; //im Ruhestand l'offset de cette valeurfor(i = 0; i < 2100; i++) {} //atend un temps bien précis pour avoir une fréquence d'échantillonnage connue}

// Berechnung der FFT depuis in vers outkiss_fft(config, in, out);bzero(C_val, 110); //remet à zero le tableau qui nous sert de buffer que l'on va envoyer par wififor(t=0;t< (NFFT/4);t++) {//pour limiter la taille du buffer on limite la sortie de la fft à des valeurs entre 0 und 9 tmp_log=20*(log(abs(out[t].r/1000.0)))*9;

tmp_log=tmp_log/50; if (tmp_log < 0) { tmp_log = 0; } if(tmp_log>9){tmp_log=9; } sprintf(tmp_val, "%d", tmp_log); strcat(C_val, tmp_val); //ajoute au buffer la nouvelle valeur

}sende_wifir(C_val); //auf Envoi le Puffer für WLAN

Funktion WLAN senden:

void send_wifir(char* com_AT){int num, z; for(z=0;z<22000000;z++) {} for(num = 0; num < (int)strlen(com_AT); num++) { *(h2p_lw_rs232_addr) = com_AT[num]; } }

Pour initialiser la carte wifi on use le code suivant:

send_wifi("AT+RST\r\n"); // Zurücksetzen à la cartesleep (3) verlangen; // an qu'elle teilnehmen resetsend_wifi("AT+CWMODE=3\n\r"); // wähle den Modus de la cartesend_wifi("AT+CWJAP=\"wifiNom\", \"MotDePasse\"\r\n"); // auf lui demande de se connecter au wifisleep (15); //auf qu'elle se connectesend_wifi("AT+CIPSTART=\"UDP\", \"192.168.43.110\", 32003\r\n"); // On lui demande de se connecter en udp avec le server ouvert sur unautre ordinateursleep(3); // an der Verbindung teilnehmenend_wifi("AT+CIPMODE=1\r\n"); //on se met en mode envoie en continueleep(3);send_wifi("AT+CIPSEND\r\n"); // am Beginn der Übertragung

Funktion WLAN senden:

void send_wifi(char* com_AT){ int num, z;for(num = 0; num < (int)strlen(com_AT); num++) { *(h2p_lw_rs232_addr) = com_AT[num]; for(z=0;z<2500000;z++) {} } }

Code des Servers:

affichage de la fft:

int i, j, Wert = 0; system("klar");

for(i =0; i < 41; i++) { if(i < 40) { for(j = 0; j < BUFSIZE; j++) { if(table[j]*4 > (40 - i)) { if (Tabelle[j]*4 > 35) printf(ROT "|" ZURÜCKSETZEN); else if(table[j]*4 > 28) printf(L_RED "|" RESET); else if(table[j]*4 > 21) printf(YEL "|" RESET); else if(table[j]*4 > 14) printf(L_YEL "|" RESET); else if(table[j]*4 > 7) printf(L_GRN "|" RESET); sonst printf(GRN "|" ZURÜCKSETZEN); } sonst printf(" "); } printf("\n"); } else { printf("0Hz 2.5Hz 5Hz 7.5kHz 10kHz\n"); /*for(j = 0; j < (BUFSIZE/2); j++)

Empfohlen: