Índice:

Autotune: 7 etapas
Autotune: 7 etapas

Vídeo: Autotune: 7 etapas

Vídeo: Autotune: 7 etapas
Vídeo: Autotune 8 ФИШКИ И ТРЮКИ ПРИ ТЮНИНГЕ ВОКАЛА [Арам Киракосян] 2024, Novembro
Anonim
Autotune
Autotune

Bienvenue dans notre projet Autotune

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

Notre projet consiste à émettre un son capter par un micro, émit par un haut parleur et afficher la FFT on un écran PC. O modificador de sera possível o som comme le volume et créer un echo.

C'est parti pour les explications !!

Etapa 1: Composants Utilisés

  • Carte DEO-Nano-SoC
  • Saída da bateria 2 para 5V2A
  • Micro
  • Haut Parleur 8 Ohm
  • Régulateur: MAX660
  • Capteur IR: GP2Y0E02A
  • Ampli Audio: LM386N-1 / NOPB
  • DAC: MCP4821-E / P
  • Diodo: 1N4148
  • Transitor: LND150N3-G / N-FET
  • 2 AOP: TL081C
  • Resistências
  • Condensadores
  • Wifi: ESP8266EX
  • 4 interruptores
  • 3 leds de couleurs

Etapa 2: Arquitetura

Arquitetura
Arquitetura

Voici ci-dessus notre schéma bloco representante l'architecture de notre projet Autotune.

Comme vous pouvez le voir, notre projet va pouvoir capter un son a l'aide du micro dont le signal capté analogique sera converti en un sinal numérique dont l'ADC est intégré dans la carte FPGA. Puis le signal sera modifié selon ns effets choisis to l'aide d'un capteur de proximidades et des switchs. Enfin, o sinal modifié depuis la carte sera reconverti en un signal analogique et SERA transmise atraves le haut parleur.

Etapa 3: Partie Analogique

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

Notre partie analogie est composée de 2 circuitos:

Um circuito premier que représentera la partie micro, qui sera branché au CAN de la carte FPGA, composto de um amplificador de ganho e de um filtro passif após avoir récupérer le signal.

Um circuito deuxieme qui repésentera la partie haut parleur, qui sera branché à la sortie de la carte FPGA, composé du DAC, d'un diviseur de tensão et d'um amplificador de áudio.

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

Etapa 4: Impressão de PCBs

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

Manter, 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 correspondente au tutoriel Altium qui peut sureement vous aider!

Etapa 5: Partie Numérique

Partie Numérique
Partie Numérique

Après avoir imprimer vos PCBs, vous pouvez enfin brancher le tout à 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é, em calcule la fft et on envoie le résultat par wifi. Cette séparation permet d'éviter les ralentissements sur la première partie.

Em utilizar Qsys et quartus pour brancher le HPS avec les différents composants. Em utilizar notamment une IP SPI para comunicar com o dac et une IP UART para comunicar com la carte wi-fi.

Etapa 6: Le Code

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

Em utilizar se code pour calculer la fft:

// Criação da configuração e dos buffers de entrada e saída s (t) e 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));

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

// Calcula o FFT depuis in vers outkiss_fft (config, in, out); bzero (C_val, 110); // remete a zero o quadro qui nous sert de buffer que l'on va envoyer par wififor (t = 0; t <(NFFT / 4); t ++) {// despeje limiter la taille du buffer on limite la sortie de la fft à des valores entre 0 e 9 tmp_log = 20 * (log (abs (out [t].r / 1000.0))) * 9;

tmp_log = tmp_log / 50; if (tmp_log <0) {tmp_log = 0; } se (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); // no buffer envoi le par wi-fi

fonction send wifir:

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]; }}

Despeje o inicializador de wi-fi à la carte em utilizar o código abaixo:

send_wifi ("AT + RST / r / n"); // demande de reset à la cartesleep (3); // atende qu'elle resetsend_wifi ("AT + CWMODE = 3 / n / r"); // escolha o modo de la cartesend_wifi ("AT + CWJAP = \" wifiNom / ", \" MotDePasse / "\ r / n"); // em lui demande de se connecter au wifisleep (15); // no atendimento 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 ordinateursleep (3); // atende la connexionsend_wifi ("AT + CIPMODE = 1 / r / n"); // no modo se encontrado envoie en continueleep (3); send_wifi ("AT + CIPSEND / r / n"); // no início da transmissão

fonction send wi-fi:

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

Code du serveur:

affichage de la fft:

int i, j, valor = 0; sistema ("limpar");

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

Recomendado: