Stap 1: Het algoritme
Krediet:
Ik ben niet zeker wie de uitvinder van het algoritme, maar van wat google vertelt me een Britse statisticus door de naam van George Udny Yule had publiceerde een artikel in de late 1800 's met betrekking tot gedeeltelijke autocorrelatie algoritme. Bovendien er een bos van papers gepubliceerd door de IEEE vanaf de vroege 1900 's citeren verbeteringen aan de methode voor gebruik in elektronica.
AMDF - hier is de magere:
AMDF (N) = 1/N * som (ik = 0 -> N) van (| x(i) - x(i+N) |)
AMDF (de functie van de verschil van de magnitude van de autocorrelatie) is in feite de overlappende lijnen overtrekken op een gegeven venster van monsters. Hier is wat er in feite gebeurt:
1.) verzamelen gegevens vormen een venster van N * 2 monsters wide.
2.) knip het venster doormidden.
3.) de eerste helft over de bovenkant van de tweede helft overlay.
4.) nemen de absolute waarde van het verschil in het gebied tussen de twee golfvormen en samengevat.
5.) verdeel de som van het aantal monsters.
6.) herhaal de stappen 2 tot 6 voor een volledige zwaai van alle vertragingen N die u verwacht te voorkomen of aanwezig zijn in een golfvorm.
7.) als een quasi-harmonische Toon aanwezig is, de AMDF zal output van een laag aantal op of dicht bij 0 bij enige vertraging N.
8.) verdeel de samplefrequentie door uw vertraging N, en u hebt de meest waarschijnlijke frequentie van de quasi-harmonische Toon.
Een grote Let wel! De AMDF werkt niet op meer dan één Toon tegelijkertijd. U zal niet zitten kundig voor onderscheid maken tussen dubbele stopt, meerdere tokkelde notities, enz.
Andere algoritmen:
Voor zover mijn onderzoek heeft genomen mij, zijn er een paar van de andere toonhoogte detectie algoritmen daar. Natuurlijk meer, maar ik niet ook uitgebreid zoeken. Ik zal niet betrekking hebben op hen, maar ik noem ze horen voor uw verdere onderzoek als je daarvoor kiezen.
Natuurlijk, is de originele methode van de autocorrelatie daar de basis van AMDF. Het voordeel van AMDF over fundamentele autocorrelatie is dat de AMDF een bos van weglatingen en aanvullingen met één divisie heeft (die kan worden gecodeerd in een vermenigvuldiging). Voor de Arduino Uno die is native 8 bit architectuur en heeft geen hardware afdeling of vermenigvuldiging, is dit een absoluut pluspunt.
Een andere toonhoogte detectie algoritme is het Yin-algoritme. Dit algoritme beschikt over een zeer laag percentage foutenpercentage met elke stap van het algoritme detaillering van de doeltreffendheid ervan, zodat u kunt zo veel of zo weinig als u wilt implementeren. Uit getuigenissen heb ik gelezen dat het is niet zeer computationeel intensief dat is geweldig! Dus ja... Waarom ik niet heb er is omdat het Yin-algoritme blijkbaar een patent op het gebruik ervan heeft. Bovendien, als u rond zoekt, heeft iemand reeds de broncode voor u samengesteld in C zodat je met het spelen kunt. Er is een gepubliceerde document van het Yin-algoritme, ook zeer interessante dingen.
Hier is de broncode Yin, als je wilt om een kijkje te nemen!: http://mroy.chez-alice.fr/yin/index.html
Hier is de gepubliceerde papier op de algoritme: http://recherche.ircam.fr/equipes/pcm/cheveign/pss/2002_JASA_YIN.pdf