Differences

This shows you the differences between two versions of the page.

Link to this comparison view

pm:prj2024:tdicu:alexandru.jipa2803 [2024/05/27 10:59]
alexandru.jipa2803 [Hardware Design]
pm:prj2024:tdicu:alexandru.jipa2803 [2024/05/27 11:42] (current)
alexandru.jipa2803 [Bibliografie/Resurse]
Line 4: Line 4:
  
 Proiectul este un instrument ce masoara frecventa unor note muzicale inregistrate. El stocheaza Proiectul este un instrument ce masoara frecventa unor note muzicale inregistrate. El stocheaza
-ce aude dupa ce este pornit, analizeaza frecventa sunetelor, ​reda pe un ecran LCD, apoi trimite+ce aude dupa ce este pornit, analizeaza frecventa sunetelor, reda frecventa ​pe un ecran LCD, apoi trimite
 frecventa ca nota MIDI pe interfata USB pentru procesare la o statie. frecventa ca nota MIDI pe interfata USB pentru procesare la o statie.
  
Line 12: Line 12:
 ===== Descriere generală ===== ===== Descriere generală =====
 Schema bloc: Schema bloc:
 +
 {{:​pm:​prj2024:​tdicu:​schemablocji.png?​500|}} {{:​pm:​prj2024:​tdicu:​schemablocji.png?​500|}}
  
 Schema electrica: Schema electrica:
 +
 {{:​pm:​prj2024:​tdicu:​schemael.png?​600|}} {{:​pm:​prj2024:​tdicu:​schemael.png?​600|}}
  
 Placa Arduino UNO va calcula frecventa, va controla componentele individuale si le va alimenta. Placa Arduino UNO va calcula frecventa, va controla componentele individuale si le va alimenta.
 Microfonul capteaza sunetele, ale caror frecvente vor fi stocate pe cardul SD. Microfonul capteaza sunetele, ale caror frecvente vor fi stocate pe cardul SD.
-Rezultatele analizei vor fi afisate pe disply-ul LCD. Daca placa este conectata la o interfata+Rezultatele analizei vor fi afisate pe display-ul LCD. Daca placa este conectata la o interfata
 USB-MIDI, ea va putea transmite frecventele direct catre un soft de procesare audio. Butonul USB-MIDI, ea va putea transmite frecventele direct catre un soft de procesare audio. Butonul
 de pe breadoard trimite un eveniment MIDI ce schimba instrumentul curent. de pe breadoard trimite un eveniment MIDI ce schimba instrumentul curent.
Line 34: Line 36:
 Proiectul in stadiul curent: Proiectul in stadiul curent:
  
-{{:​pm:​prj2024:​tdicu:​arduieeno.jpg?300|}}+{{:​pm:​prj2024:​tdicu:​jipastadiucurent.jpeg?300|}}
  
 Captura output microfon: Captura output microfon:
Line 61: Line 63:
  
 -Mini Breadboard -Mini Breadboard
 +
 +Proiectul este menit sa fie compact, am folosit un breadboard mic alaturi de o placa mica si portabila.
 ===== Software Design ===== ===== Software Design =====
 +
 +M-am folosit de laboratorul de GPIO pentru pinii de la led si buton, de laboratoarele de timer si ADC pentru masuratori ale pinului A0, si de concepte din laboratoarele de SPI si I2C pentru cititorul de card SD si ecranul LCD cu modul I2c.
 +
 +Pentru transmitere pe interfata USB-MIDI, am folosit proiectul dualMocoLUFA de pe github, cu care am rescris firmware-ul de pe cipul Atmega 16u2 ce controleaza interfata USB. Am pus placa in mod DFU, si cu Atmel FLIP am instalat un sistem de dual boot. Daca pinii MOSI si GND de la pinii ICSP ai Atmega 16u2 sunt conectati cand placa este alimentata, interfata USB poate fi folosita pentru scris cod pe placa. In caz contrar, placa va porni in mod USB-MIDI, si va putea trimite MIDI events.
 +
 +Pe parcursul proiectului am incercat sa minimizez consumul de memorie, folosind inttypes pentru flexibilitate.
  
 Aparatul analizeaza in continuu sunetele pe care microfonul le capteaza. Acesta este legat la pinul A0, pe care se face o conversie DAC cu precizie pe 8 biti. Conversia se face la interrupt cu o frecventa de 9615Hz. Aparatul analizeaza in continuu sunetele pe care microfonul le capteaza. Acesta este legat la pinul A0, pe care se face o conversie DAC cu precizie pe 8 biti. Conversia se face la interrupt cu o frecventa de 9615Hz.
Line 67: Line 77:
 Dupa ce se capteaza un numar setat de valori, acestea sunt trimise la o functie ce calculeaza frecventa fundamentala pe baza valorilor. Algoritmul este unul de autocorelatie cu interpolare si normalizare. Am ales acest alogritm datorita limitarilor de memorie, nu este la fel de precis dar consuma mult mai putina memorie decat analiza spectrala cu transformata Fourier. Dupa ce se capteaza un numar setat de valori, acestea sunt trimise la o functie ce calculeaza frecventa fundamentala pe baza valorilor. Algoritmul este unul de autocorelatie cu interpolare si normalizare. Am ales acest alogritm datorita limitarilor de memorie, nu este la fel de precis dar consuma mult mai putina memorie decat analiza spectrala cu transformata Fourier.
  
-Dupa ce se detecteaza o frecventa se va salva in cardul SD. Pentru comunicare se vor folosi SPI.h si SD.h.+Functia de autocorelatie:​
  
 +<​code>​
 +int32_t autocorrelation(int8_t *samples, uint_least16_t t)
 +{
 + int32_t r = 0;
 + for (uint_least16_t k = 0; k < no_samples - t; k++)
 + r += ((int16_t)samples[k] * samples[k + t]);
 + return r;
 +}
 +</​code>​
 +
 +Dupa ce se detecteaza o frecventa se va salva in cardul SD. Pentru comunicare se vor folosi SPI.h si SD.h.
 Frecventele detectate vor fi afisate pe LCD. Comunicare cu LCD va folosi biblioteca LiquidCrystal I2C. Frecventele detectate vor fi afisate pe LCD. Comunicare cu LCD va folosi biblioteca LiquidCrystal I2C.
 +Apoi, notele sunt trimise prin interfata USB la statia conectata.
 +
 ===== Rezultate Obţinute ===== ===== Rezultate Obţinute =====
  
 +Proiectul identifica bine notele cu frecvente in intervalul 900 - 1600Hz, cu o rata mica de eroare. Acesta detecteaza si sunete mai joase, pana la ~100Hz, dar rezultatele au deseori erori sub 500Hz. Detectia functioneaza mai bine pentru instrumente cu un sunet mai curat, cum ar fi cele de suflat, decat instrumente precum pianul.
 +
 +Proiectul transmite notele catre statia audio, dar, in lipsa unui algoritm de segmentare a notelor, nu pastreaza mereu corect ritmul sunetelor.
  
 ===== Concluzii ===== ===== Concluzii =====
 +
 +SRAM-ul mic (2048 bytes) al arduino UNO nu este suficient pentru a efectua o analiza performanta a frecventei. Desi avem o plaja de valori corecte, nu sunt suficiente pentru un aparat de acordat instrumente muzicale.
 +
 +Este, de asemenea, nevoie de un algoritm ce poate segmenta notele in mod mai corect, pentru a putea trimite catre statie piese muzicale mai complexe.
 +
 +Ideea este promitatoare,​ proiectul functioneaza in modul asteptat pentru unele date de intrare, dar este nevoie de mai multa putere pentru a obtine un produs performant.
  
  
 ===== Download ===== ===== Download =====
 +{{:​pm:​prj2024:​tdicu:​proiect_pm_jipa_alexandru_333cc.zip|}}
  
  
Line 84: Line 117:
 ===== Bibliografie/​Resurse ===== ===== Bibliografie/​Resurse =====
  
 +https://​github.com/​kuwatay/​mocolufa
  
 <​html><​a class="​media mediafile mf_pdf"​ href="?​do=export_pdf">​Export to PDF</​a></​html>​ <​html><​a class="​media mediafile mf_pdf"​ href="?​do=export_pdf">​Export to PDF</​a></​html>​
  
  
pm/prj2024/tdicu/alexandru.jipa2803.1716796740.txt.gz · Last modified: 2024/05/27 10:59 by alexandru.jipa2803
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0