Სარჩევი:

Autotune: 7 ნაბიჯი
Autotune: 7 ნაბიჯი

ვიდეო: Autotune: 7 ნაბიჯი

ვიდეო: Autotune: 7 ნაბიჯი
ვიდეო: არმაქ ფული ვცოვრობ გლდანში / armaq fuli vcovrob gldanshi 2024, ნოემბერი
Anonim
Autotune
Autotune

Bienvenue dans notre projet 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 du cycle ingénieur en électronicque informatique systèmes embarkés).

შეაფასეთ ეს პროგრამა, რომელიც მოიცავს ერთ შვილს, რომელიც მოიცავს მიკრო, კომპიუტერულ და კომპიუტერულ სისტემებს. ეს შეიძლება იყოს მოდიფიკატორი, როგორც ხმის აუდიო, ასევე ტომი და კრიტერიუმი.

C'est parti pour les explications !!

ნაბიჯი 1: კომპოზიტორების გამოყენება

  • Carte DEO-Nano-SoC
  • ბატარეის 2 გამომავალი à 5V2A
  • მიკრო
  • Haut Parleur 8 Ohm
  • რეგულატორი: MAX660
  • კაპტერის IR: GP2Y0E02A
  • ამპლი აუდიო: LM386N-1/NOPB
  • DAC: MCP4821-E/P
  • დიოდი: 1N4148
  • ტრანზიტორი: LND150N3-G / N-FET
  • 2 AOP: TL081C
  • წინააღმდეგობები
  • კონდენსატორები
  • Wifi: ESP8266EX
  • 4 გადამრთველი
  • 3 Leds de couleurs

ნაბიჯი 2: არქიტექტურა

არქიტექტურა
არქიტექტურა

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

Comme vous pouvez le voir, notre projet va pouvoir capter un son à l'aide du micro dont le სიგნალის ანალოგიურად capté sera converti en un 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 switchs. საბოლოო ჯამში, სიგნალის მოდიფიკაცია ხდება კარტრა სერა რეკონვერტირებისა და სიგნალის ანალოგიისა და გადაცემის à ტრავერსის მიერ.

ნაბიჯი 3: პარტიის ანალოგი

პარტიის ანალოგი
პარტიის ანალოგი
პარტიის ანალოგი
პარტიის ანალოგი
პარტიის ანალოგი
პარტიის ანალოგი

Notre partie analogie est composée de 2 სქემები:

უმთავრესი მიკროსქემის ნაწილია მიკრო, რომელიც მოიცავს ფილიალებს ან CAN de la carte FPGA, amplificateur d'un amplificateur de gain და d'un filtre passif après avoir récupérer le სიგნალის.

არაეფექტური წრე, რომელიც მოიცავს პარტიულ პარალერს, არის ფილიალი, რომელიც მოიცავს FPGA, კომპოზიცია DAC, დაძაბულობის განმსაზღვრელ და დამატებით აუდიოს.

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

ნაბიჯი 4: შთაბეჭდილება PCB– ებზე

შთაბეჭდილება PCB
შთაბეჭდილება PCB
შთაბეჭდილება PCB
შთაბეჭდილება PCB
შთაბეჭდილება PCB
შთაბეჭდილება PCB

შემანარჩუნებელი, nous allons créer nos PCB afin de les imprimer et de les relier!

L'aide du logiciel Alitum, nous avons pu creer deux PCBs, c'est à horred part part micro and hale parleur. Voici le საიტის კორესპონდენტი ან tutoriel Altium qui peut sureement vous aider!

ნაბიჯი 5: Numierique

პარტია ნუმერიკი
პარტია ნუმერიკი

გამოაქვეყნეთ ინფორმაცია PCB– ების საშუალებით, ასევე შეგიძლიათ გამოიყენოთ FPGA cart la carte!

Pour la partie numérique, nous avons créer un code C qui est séparé en deux en utilisant un thread. გაეცანით, სიგნალის გადაცემის შესახებ მოდიფიკაციისა და ენერგეტიკის შესახებ DAC en spi. D'un deuxième côté, on calcule la fft et on envoie le résultat par wifi. Cette séparation permet d'éviter les ralentissements sur la première partie.

გამოიყენეთ Qsys et quartus pour brancher le HPS avec les différents კომპოზიტორები. გამოყენების შესახებ notamment une IP SPI დაასხით communiquer avec le dac et une IP UART დაასხით communiquer avec la carte wifi.

ნაბიჯი 6: Le Code

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

როდესაც იყენებთ კოდს დაასხით კალკულატორი la fft:

// Création de la configuration et 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));

for (j = 0; j <NFFT; j ++) {მნიშვნელობა = *h2p_lw_adc_addr; // recupère la valeur provenant du pcb du microin [j].r = მნიშვნელობა-2000.0; // on pension l'offset de cette valeurfor (i = 0; i <2100; i ++) {} // დაესწრო un temps bien précis pour avoir une fréquence d’échantillonnage connue}

// Calcul de la 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 et 9 tmp_log = 20*(log (abs (out [t].r/1000.0)))*9;

tmp_log = tmp_log/50; თუ (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

} send_wifir (C_val); // on Envoi le buffer par wifi

fonction გააგზავნე wifir:

ბათილია 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]; }}

ჩაასხით საწყისში la carte wifi გამოყენებისათვის su code suivant:

send_wifi ("AT+RST / r / n"); // demande de reset à la cartesleep (3); // დაესწრო qu'elle resetsend_wifi ("AT+CWMODE = 3 / n / r"); // აირჩიე რეჟიმი cartesend_wifi ("AT+CWJAP = \" wifiNom / ", \" MotDePasse / "\ r / n"); // on lui demande de se connecter au wifisleep (15); // დაესწრო 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); // დაესწრო la connexionsend_wifi ("AT+CIPMODE = 1 / r / n"); // on se met en mode envoie en გრძელდება ძილი (3); send_wifi ("AT+CIPSEND / r / n"); // გადაცემის დაწყება

fonction გააგზავნე wifi:

ბათილია 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 ++) {}}}

მომსახურების კოდი:

affichage de la fft:

int i, j, მნიშვნელობა = 0; სისტემა ("ნათელი");

for (i = 0; i <41; i ++) {if (i <40) {for (j = 0; j <BUFSIZE; j ++) {if (table [j]*4> (40 - i)) {if (ცხრილი [j]*4> 35) printf (RED "|" გადატვირთვა); else if (ცხრილი [j]*4> 28) printf (L_RED "|" გადატვირთვა); else if (ცხრილი [j]*4> 21) printf (YEL "|" გადატვირთვა); else if (ცხრილი [j]*4> 14) printf (L_YEL "|" გადატვირთვა); სხვა შემთხვევაში (ცხრილი [j]*4> 7) printf (L_GRN "|" გადატვირთვა); else printf (GRN "|" გადატვირთვა); } else printf (""); } printf ("\ n"); } else {printf ("0Hz 2.5Hz 5Hz 7.5kHz 10kHz / n"); /*for (j = 0; j <(BUFSIZE/2); j ++)

გირჩევთ: