Orodha ya maudhui:
Video: Kigunduzi cha Vidokezo vya Muziki wa Arduino: Hatua 3
2024 Mwandishi: John Day | [email protected]. Mwisho uliobadilishwa: 2024-01-30 12:50
Kugundua maelezo ya muziki kutoka kwa ishara ya sauti ni ngumu kufanya haswa kwenye Arduino kwa sababu ya kumbukumbu ndogo na nguvu ya usindikaji. Kwa ujumla, dokezo sio wimbi safi la sine linalofanya ugunduzi kuwa mgumu. Ikiwa tutachukua mabadiliko ya mara kwa mara ya vyombo anuwai vya muziki, inaweza kuwa na harmonics nyingi kulingana na kidokezo kinachochezwa. Kila chombo kina mchanganyiko wake wa saini ya anuwai anuwai. Katika nambari hii, nilijaribu kutengeneza programu ambayo inaweza kufunika vyombo vingi iwezekanavyo. Unaweza kurejelea video iliyoambatanishwa ambayo nilijaribu kujaribu anuwai ya anuwai ya anuwai, aina anuwai za tani zilizotengenezwa na kibodi, na hata sauti ya sauti inakaguliwa. Usahihi wa kugundua hutofautiana chombo kwa chombo. Kwa chombo fulani (i.e. piano) katika upeo mdogo (200-500Hz) ni sahihi, wakati chombo kingine kina usahihi mdogo (i.e. Harmonica).
Nambari hii hutumia nambari ya FFT iliyotengenezwa hapo awali iitwayo EasyFFT.
Maonyesho ya nambari yanaonyeshwa kwenye video hapo juu na aina anuwai ya sauti ya sauti na sauti.
Vifaa
- Arduino Nano / Uno au hapo juu
- Moduli ya kipaza sauti kwa Arduino
Hatua ya 1: Algorithm ya Utambuzi wa Kumbuka
Kama ilivyoelezwa katika hatua ya awali, kugundua ni ngumu kwa sababu ya uwepo wa masafa mengi kwenye sampuli za sauti.
Programu inafanya kazi katika mtiririko ufuatao:
1. Upataji wa data:
- sehemu hii inachukua sampuli 128 kutoka kwa data ya sauti, utengano kati ya sampuli mbili (masampuli ya sampuli) kulingana na masafa ya riba. Katika kesi hii, tunatumia nafasi kati ya sampuli mbili hutumiwa kutumia kazi ya dirisha la Hann na hesabu ya amplitude / RMS. Nambari hii pia hufanya sifuri mbaya kwa kutoa 500 kutoka kwa thamani ya kusoma. Thamani hii inaweza kubadilishwa ikiwa inahitajika. Kwa kesi ya kawaida, maadili haya hufanya kazi vizuri. Zaidi ya hayo, ucheleweshaji fulani unahitaji kuongezwa ili kuwa na mzunguko wa sampuli wa karibu 1200Hz. katika kesi ya masampuli ya mzunguko wa 1200Hz ya masafa ya HZ 600 yanaweza kugunduliwa.
kwa (int i = 0; i <128; i ++) {a = AnalogSoma (Mic_pin) -500; // mbaya zero shift sum1 = sum1 + a; // kwa wastani wa jumla ya thamani2 = jumla2 + a * a; // kwa thamani ya RMS a = a * (dhambi (i * 3.14 / 128) * dhambi (i * 3.14 / 128)); // Hann dirisha katika = 4 * a; // kuongeza kwa kuelea kwa ucheleweshaji wa ubadilishaji wa introMicroseconds (195); // kulingana na masafa ya operesheni}
2. FFT:
Mara tu data iko tayari, FFT inafanywa kwa kutumia EasyFFT. Kazi hii ya EasyFFT imebadilishwa kurekebisha FFT kwa sampuli 128. Nambari pia imebadilishwa ili kupunguza matumizi ya kumbukumbu. Kazi ya awali ya EasyFFT iliyoundwa kuwa na hadi sampuli 1028 (na bodi inayoendana), wakati tunahitaji sampuli 128 tu. nambari hii inapunguza matumizi ya kumbukumbu ya karibu 20% ikilinganishwa na kazi ya awali ya EasyFFT.
Mara baada ya FFT kufanywa, nambari inarudisha kilele cha juu zaidi cha masafa 5 kwa uchambuzi zaidi. Masafa haya yamepangwa kwa utaratibu wa kushuka kwa amplitude.
3. Kwa kila kilele, nambari inagundua maelezo yanayoweza kuhusishwa nayo. nambari hii hutazama tu hadi 1200 Hz. Sio lazima kuwa na kumbuka sawa na masafa na amplitude ya juu.
Masafa yote yamepangwa kati ya 0 hadi 255, hapa octave ya kwanza hugunduliwa, kwa mfano, 65.4 Hz hadi 130.8 inawakilisha octave moja, 130.8 Hz hadi 261.6 Hz inawakilisha nyingine. Kwa kila octave, masafa yamepangwa kutoka 0 hadi 255. hapa ramani inayoanzia C hadi C '.
ikiwa (f_peaks > 1040) {f_peaks = 0;} ikiwa (f_peaks > = 65.4 && f_peaks = 130.8 && f_peaks = 261.6 && f_peaks = 523.25 && f_peaks = 1046 && f_peaks <= 2093) {f_peaks = 255 * ((f_peaks / 1046) -1);}
Thamani za safu ya KumbukaV hutumiwa kupeana maandishi kwa masafa yaliyogunduliwa.
baiti KumbukaV [13] = {8, 23, 40, 57, 76, 96, 116, 138, 162, 187, 213, 241, 255};
4. Baada ya kuhesabu dokezo kwa kila mzunguko inaweza kuwa kesi kwamba kuna masafa anuwai ambayo yapo ambayo yanaonyesha maandishi sawa. Kuwa na nambari sahihi ya pato pia inazingatia marudio. Nambari hiyo inaongeza maadili yote ya masafa kulingana na mpangilio wa amplitude na marudio na inaongeza kilele na kiwango cha juu kabisa.
Hatua ya 2: Matumizi
Kutumia nambari ni moja kwa moja mbele, hata hivyo, pia kuna mapungufu mengi ambayo yanahitaji kuzingatiwa akilini wakati. Nambari inaweza kunakiliwa kama inatumiwa kugundua maandishi. Pointi hapa chini zinahitaji kuzingatiwa wakati wa kuitumia.
1. Kazi ya Pini:
Kulingana na mgawo wa Pin ulioambatanishwa unahitaji kubadilishwa. Kwa jaribio langu, niliiweka kwenye Analog pin 7, kuanzisha batili () {Serial.begin (250000); Mic_pin = A7; }
2. Usikivu wa kipaza sauti:
Usikivu wa kipaza sauti unahitaji kurekebishwa umbizo kama hilo linaweza kuzalishwa na amplitude nzuri. Kwa kawaida, moduli ya Sauti ya Sauti inakuja na mpangilio wa unyeti. unyeti unaofaa kuchaguliwa kama ishara hiyo sio ndogo sana na pia haikatwi kwa sababu ya ukubwa wa juu.
3. Kizingiti cha Amplitude:
Nambari hii inafanya kazi ikiwa tu saizi ya ishara ikiwa ni ya kutosha. mpangilio huu unahitaji kuwekwa na mtumiaji mwenyewe. Thamani hii inategemea unyeti wa kipaza sauti na pia matumizi.
ikiwa (jumla2-jumla1> 5) {
..
katika nambari iliyo hapo juu, sum2 inatoa thamani ya RMS wakati jumla 1 inatoa thamani ya maana. kwa hivyo tofauti kati ya maadili haya mawili inatoa ukubwa wa ishara ya sauti. kwa upande wangu, inafanya kazi vizuri na kiwango cha amplitude ya karibu 5.
4. Kwa chaguo-msingi, nambari hii itachapisha maandishi yaliyogunduliwa. Walakini, ikiwa unapanga kutumia noti hiyo kwa sababu nyingine, nambari iliyopewa moja kwa moja inapaswa kutumiwa. kwa mfano C = 0; C # = 1, D = 2, D # = 3 na kuendelea.
5. Ikiwa chombo kina masafa ya juu, nambari inaweza kutoa pato la uwongo. mzunguko wa juu umepunguzwa na mzunguko wa sampuli. kwa hivyo unaweza kucheza karibu chini ya maadili ya kuchelewesha kupata pato bora. katika ucheleweshaji wa nambari chini ya microseconds 195. ambayo inaweza kubadilishwa ili kupata pato bora. Hii itaathiri wakati wote wa utekelezaji.
{a = Soma Analog (Mic_pin) -500; // mabadiliko mabaya ya sifuri
jumla1 = jumla1 + a; // kwa wastani wa jumla ya thamani2 = jumla2 + a * a; // kwa thamani ya RMS a = a * (dhambi (i * 3.14 / 128) * dhambi (i * 3.14 / 128)); // Hann dirisha katika = 4 * a; // kuongeza kwa kuelea kwa ucheleweshaji wa ubadilishaji wa introMicroseconds (195); // kulingana na masafa ya operesheni}
6. nambari hii itafanya kazi hadi masafa ya 2000Hz. kwa kuondoa ucheleweshaji kati ya sampuli karibu 3-4 kHz ya masafa ya sampuli zinaweza kupatikana.
Tahadhari:
- Kama ilivyoelezwa katika mafunzo ya EasyFFT, FFT inakula kumbukumbu kubwa ya Arduino. Kwa hivyo ikiwa una programu ambayo inahitaji kuhifadhi maadili kadhaa inashauriwa kutumia ubao ulio na kumbukumbu ya juu.
- Nambari hii inaweza kufanya kazi vizuri kwa ala / mwimbaji mmoja na mbaya kwa mwingine. Utambuzi sahihi wa wakati halisi hauwezekani kwa sababu ya mapungufu ya kihesabu.
Hatua ya 3: Summery
Kugundua kumbuka ni kazi kubwa ya hesabu, kupata pato la wakati halisi ni ngumu sana haswa kwenye Arduino. Nambari hii inaweza kutoa karibu sampuli / sekunde 6.6 (kwa kucheleweshwa kwa microseconds 195). nambari hii inafanya kazi vizuri na piano na vyombo vingine.
Natumahi nambari hii na mafunzo yatasaidia katika mradi wako unaohusiana na muziki. ikiwa kuna shaka yoyote au maoni jisikie huru kutoa maoni au ujumbe.
Katika mafunzo yanayokuja, nitabadilisha nambari hii kwa utambuzi wa gumzo la muziki. kwa hivyo kaa chonjo.
Ilipendekeza:
Vito vya Pendant vya Pendant vya Umeme wa jua vya jua: Hatua 11 (na Picha)
Vito vya Pendant vya Pendant vya Moyo wa jua: Hii inaweza kufundishwa ni kwa moyo unaotumiwa na jua na mwangaza wa nyekundu wa LED. Inapima 2 " na 1.25 ", pamoja na kichupo cha USB. Ina shimo moja kupitia juu ya ubao, na kufanya kunyongwa iwe rahisi. Vaa kama mkufu, vipuli, dhamana kwenye pini
Vichungi vya kupita vya juu na vya kati vya LED: Hatua 4
Vichungi vya kupita vya juu na vya kati vya LED: Tuliunda vichungi vya kupita vya juu na vya kati ili kusababisha LED kung'aa na kufifia kulingana na mzunguko uliowekwa kwenye mzunguko. Wakati masafa ya juu yamewekwa kwenye mzunguko, ni LED tu ya kijani itakayowaka. Wakati mzunguko umewekwa kwenye mzunguko i
VYOMBO VYA HABARI VYA BUUU VYA MABADILIKO VYA KIUME VYA 3D: Hatua 14 (zenye Picha)
DIY 3D iliyochapishwa wasemaji BLUETOOTH: Halo kila mtu, hii ni Maagizo yangu ya kwanza kabisa. Niliamua kuifanya iwe rahisi. Kwa hivyo katika mafunzo haya, nitawaonyesha nyinyi jinsi nilivyotengeneza spika hii rahisi na rahisi ya Bluetooth ambayo kila mtu angeweza kutengeneza kwa urahisi.Mwili wa spika ni 3D pr
Vidokezo vya Vipengele vya Upimaji: Hatua 5
Vidokezo vya Vipengele vya Upimaji: Je! Ilitokea kwako wakati wowote kwamba ulifanya mradi na haikufanya kazi kwa sababu ya transistors mbovu au maonyesho mabovu. Kwa hivyo hapa kuna kifaa ambacho unaweza kujaribu vifaa kama transistor, diode, LDR, LED, nk kabla ya kuanza mradi. Ni
Vidokezo vya chuma vya chuma kutoka kwa waya 6 wa Shaba ya AWG: Hatua 13
Vidokezo vya chuma vya chuma kutoka kwa waya wa 6 wa AWG wa Shaba: Kama Jedi wa Jamhuri ya Kale ambao waliunda taa zao za taa, kila moja ikilinganishwa na mahitaji na mtindo wa mmiliki wake, wanachama wengi wa Maagizo hutengeneza chuma chao, au angalau wazibadilishe sana. Mara ya mwisho kukagua kulikuwa na