This shows you the differences between two versions of the page.
pm:prj2024:tdicu:alexandru.jipa2803 [2024/05/27 11:11] alexandru.jipa2803 [Descriere generală] |
pm:prj2024:tdicu:alexandru.jipa2803 [2024/05/27 11:42] (current) alexandru.jipa2803 [Bibliografie/Resurse] |
||
---|---|---|---|
Line 36: | 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 76: | Line 76: | ||
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. | ||
+ | |||
+ | 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. | Dupa ce se detecteaza o frecventa se va salva in cardul SD. Pentru comunicare se vor folosi SPI.h si SD.h. | ||
Line 83: | Line 95: | ||
===== 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 95: | 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> | ||