INHOUDSOPGAWE:

Autotune: 7 stappe
Autotune: 7 stappe

Video: Autotune: 7 stappe

Video: Autotune: 7 stappe
Video: Mixing with Auto-Tune (Melodic Trap Soul Vocals) 2024, November
Anonim
Autotune
Autotune

Bienvenue dans notre projet Autotune

Ons bied 'n herontwikkeling van die herontwikkeling aan. 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).

Ons kan 'n volledige e -posadres vir 'n mikro -rekenaar of vir 'n rekenaar op ons rekenaar bied. Dit is moontlik om die wysiger van die klank en volume te verander.

C'est parti pour les explications !!

Stap 1: Composants Utilisés

  • Kaart DEO-Nano-SoC
  • Uitgang 2 battery à 5V2A
  • Mikro
  • Haut Parleur 8 Ohm
  • Reguleerder: MAX660
  • Kapteur IR: GP2Y0E02A
  • Ampli Audio: LM386N-1/NOPB
  • DAC: MCP4821-E/P
  • Diode: 1N4148
  • Sender: LND150N3-G / N-FET
  • 2 AOP: TL081C
  • Weerstands
  • Kondensateurs
  • Wifi: ESP8266EX
  • 4 skakelaars
  • 3 Leds de couleurs

Stap 2: Argitektuur

Argitektuur
Argitektuur

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

U kan ook hierdie funksie gebruik, maar u kan ook nie 'n sein op 'n ander manier as 'n ander analoog van die FPGA doen nie. Ons kan die sein verander deur selon effets choises à l'aide d'un capteur de proximité et des switchs. Ons kan die sein verander na die herontwikkeling van 'n sein en die analise van die sein en die versending daarvan na die huidige parleur.

Stap 3: Partie Analogique

Partie Analogique
Partie Analogique
Partie Analogique
Partie Analogique
Partie Analogique
Partie Analogique

Notre partie analogie est composée of 2 circuits:

'N Eerste kring met 'n partytjie -mikro, 'n filiaal van FPGA, 'n vermenigvuldiging van 'n wins en 'n filtreer wat passief is na 'n seinreël.

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

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

Stap 4: Impression Des PCB's

Impression Des PCB's
Impression Des PCB's
Impression Des PCB's
Impression Des PCB's
Impression Des PCB's
Impression Des PCB's

Onderhoud, 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 et haut parleur. Voici le site correspondant au tutoriel Altium qui peut sureement vous aider!

Stap 5: Partie Numérique

Partie Numérique
Partie Numérique

Après avoir imprimer met PCB's, en u kan ook FPGA la carte gebruik!

Gee la partie numérique, nous avons créer un code C qui est séparé en deux en utilizing un thread. D'un coté, on récupère le signal on le modifie et on l'envoie vers le DAC en spi. Daar is 'n deuxième côté, met die berekening van die fft et en envoie le résultat par wifi. Cette séparation permet d'éviter les ralentissements sur la première partie.

Gebruik Qsys et quartus pour brancher vir die HPS avec les différents komponiste. Gebruik die kennisgewing van 'n IP SPI vir 'n kommunikeerder of 'n IP -adres vir 'n gemeenskaplike wifi.

Stap 6: Le Code

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

Gebruik die kode vir die sakrekenaar:

// Création de la configuration en des buffers in et out pour s (t) et 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));

vir (j = 0; j <NFFT; j ++) {Waarde = *h2p_lw_adc_addr; // recupère la valeur provenant du pcb du microin [j].r = Waarde-2000.0; // op pensioen l'offset de cette valeurfor (i = 0; i <2100; i ++) {} // bywoon un temps bien précis pour avoir une fréquence d'échantillonnage connue}

// Bereken die FFT -weergawe 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 et 9 tmp_log = 20*(log (abs (out [t].r/1000.0)))*9;

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

} send_wifir (C_val); // op buffer van wifi

funksie stuur wifir:

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

Skakel initialiser la carte wifi in met behulp van die volgende kode:

send_wifi ("AT+RST / r / n"); // demande de reset à la cartesleep (3); // woon qu'elle resetsend_wifi by ("AT+CWMODE = 3 / n / r"); // choisit le mode de la cartesend_wifi ("AT+CWJAP = \" wifiNom / ", \" MotDePasse / "\ r / n"); // on lui demande de se connecter au wifisleep (15); // op bywoning qu'elle se connectesend_wifi ("AT+CIPSTART = \" UDP / ", \" 192.168.43.110 / ", 32003 / r / n"); // On lui demande de se connectecter en udp avec le serveur ouvert sur un autre ordinateursleep (3); // woon die connexionsend_wifi by ("AT+CIPMODE = 1 / r / n"); // on se met en mode envoie en continueleep (3); send_wifi ("AT+CIPSEND / r / n"); // begin met oordrag

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

Kode vir diens:

affichage de la fft:

int i, j, Waarde = 0; stelsel ("duidelik");

vir (i = 0; i <41; i ++) {if (i <40) {vir (j = 0; j <BUFSIZE; j ++) {if (tabel [j]*4> (40 - i)) {if (tabel [j]*4> 35) printf (ROOI "|" RESET); anders as (tabel [j]*4> 28) printf (L_RED "|" RESET); anders as (tabel [j]*4> 21) printf (YEL "|" RESET); anders as (tabel [j]*4> 14) printf (L_YEL "|" RESET); anders as (tabel [j]*4> 7) printf (L_GRN "|" RESET); anders printf (GRN "|" RESET); } anders printf (""); } printf ("\ n"); } anders {printf ("0Hz 2.5Hz 5Hz 7.5kHz 10kHz / n"); /*vir (j = 0; j <(BUFSIZE/2); j ++)

Aanbeveel: