Cov txheej txheem:

Autotune: 7 Kauj ruam
Autotune: 7 Kauj ruam

Video: Autotune: 7 Kauj ruam

Video: Autotune: 7 Kauj ruam
Video: Cmon now.😭😭 #shorts 2024, Lub Xya hli ntuj
Anonim
Autotune
Autotune

Bienvenue dans notre projet Autotune

Notre équipe thiab 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 suav nrog émettre un son capter par un micro, émit par un haut parleur et afficher la FFT sur un écran PC. Il sera ua tau ntawm tus hloov pauv nrog tus tub lub suab comme le ntim thiab créer un écho.

C'est parti pour les explication !!

Kauj Ruam 1: Kev Siv Tus Kheej

  • Carte DEO-Nano-SoC
  • Roj teeb 2 tso zis: 5V2A
  • Micro
  • Haut Parleur 8 Ohm
  • Tus Qauv Zauv: MAX660
  • Capteur IR: GP2Y0E02A
  • Ampli Suab: LM386N-1/NOPB
  • DAC: MCP4821-E/P.
  • Diode: 1N4148
  • Tus xa tawm: LND150N3-G / N-FET
  • 2 AOP: TL081C
  • Kev Ruaj Ntseg
  • Condensateurs
  • Wifi: ESP8266EX
  • 4 hloov
  • 3 Leds de couleurs

Kauj ruam 2: Architecture

Architecture
Architecture

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

Ua tsaug rau koj li voir, notre projet va pouvoir capter un son à l'aide du micro dont le teeb liab analogique capté sera converti en un teeb liab 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 switchs. Enfin, le teeb tsa kev hloov pauv xa tawm la carte sera reconverti en un teeb liab analogique thiab sera transmise à travers le haut parleur.

Kauj ruam 3: Partie Analogique

Partie Analogique Cov
Partie Analogique Cov
Partie Analogique Cov
Partie Analogique Cov
Partie Analogique Cov
Partie Analogique Cov

Notre partie analogie est composée de 2 circuits:

Un premier circuit qui représentera la partie micro, qui sera branché au CAN de la carte FPGA, sib xyaw ua ke ntawm ib qho kev ua kom muaj txiaj ntsig thiab kev ua yeeb yaj kiab passif après avoir récupérer le teeb liab.

Un 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 tension et d'un amplificateur audio.

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

Kauj Ruam 4: Impression Des PCBs

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

Kev saib xyuas tsis tu ncua, tsis muaj kev cuam tshuam rau peb li 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 et haut parleur. Voici le qhov chaw sib tham au tus pab qhia ntawv Altium qui peut kev lees paub tias koj yog tus pab!

Kauj ruam 5: Partie Numérique

Pawg Numérique
Pawg Numérique

Lub Plaub Hlis avoir imprimer vos PCBs, koj tuaj yeem ua tus brancher nrog tout la la carte FPGA!

Pour la partie numérique, nous avons créer un code C qui est séparé en deux en utilisant un xov. D'un coté, ntawm récupère le teeb liab ntawm kev hloov pauv thiab ntawm l'envoie vers le DAC en spi. D'un deuxième côté, ntawm calcule la fft thiab ntawm envoie le résultat par wifi. Cette séparation permet d'éviter les ralentissements sur la première partie.

Ntawm kev siv Qsys thiab quartus ncuav brancher le HPS avec les différents composers. Ntawm kev siv cov lus ceeb toom tsis yog IP SPI rau kev sib txuas lus avec le dac thiab une IP UART rau kev sib txuas lus avec la carte wifi.

Kauj Ruam 6: Le Code

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

Ntawm kev siv se code rau lub laij lej la fft:

// Création de la configuration et des buffers hauv et tawm ncuav s (t) et S (f) const kiss_fft_cfg teeb tsa = kiss_fft_alloc (NFFT, 0, NULL, NULL);

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

rau (j = 0; j <NFFT; j ++) {Tus nqi = *h2p_lw_adc_addr; // recupère la valeur provenant du pcb du microin [j].r = Tus nqi-2000.0; // ntawm kev so haujlwm l'offset de cette valeurfor (i = 0; i <2100; i ++) {} // tuaj koom lub sijhawm tsis txaus ntseeg précis pour avoir une fréquence d'échantillonnage connue}

// Xeem de la FFT depuis hauv nqe outkiss_fft (teeb tsa, hauv, tawm); 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 thiab 9 tmp_log = 20*(log (abs (tawm [t].r/1000.0))))*9;

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

} xa_wifir (C_val); // on envoi le buffer par wifi

fonction xa wifir:

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

Pour initialiser la carte wifi ntawm kev siv le chaws suivant:

xa_wifi ("AT+RST / r / n"); // demande de reset à la cartesleep (3); // koom nrog qu'elle resetsend_wifi ("AT+CWMODE = 3 / n / r"); // choisit le mode de la cartesend_wifi ("AT+CWJAP = \" wifiNom / ", \" MotDePasse / "\ r / n"); // on lui demande de se txuas txuas lossis wifis pw (15); // on attend 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 serveur ouvert sur un autre ordinateurs pw tsaug zog (3); // koom la connexionsend_wifi ("AT+CIPMODE = 1 / r / n"); // ntawm se tau ntsib en hom envoie en tseem tsaug zog (3); xa_wifi ("AT+CIPSEND / r / n"); // thaum pib la kis

fonction xa wifi:

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]; rau (z = 0; z <2500000; z ++) {}}}

Code du siv:

ua haujlwm ntawm lub fft:

int i, j, Tus nqi = 0; system ("meej");

rau (i = 0; i <41; i ++) {if (i <40) {for (j = 0; j <BUFSIZE; j ++) {if (table [j]*4> (40 - i)) {if (rooj [j]*4> 35) printf (RED "|" RESET); lwm yog (rooj [j]*4> 28) printf (L_RED "|" RESET); lwm yog (rooj [j]*4> 21) printf (YEL "|" RESET); lwm yog (rooj [j]*4> 14) printf (L_YEL "|" RESET); lwm yog (rooj [j]*4> 7) printf (L_GRN "|" RESET); lwm printf (GRN "|" RESET); } lwm printf (""); } printf ("\ n"); } lwm {printf ("0Hz 2.5Hz 5Hz 7.5kHz 10kHz / n"); /*rau (j = 0; j <(BUFSIZE/2); j ++)

Pom zoo: