Arduino frequentie detectie (4 / 4 stap)

Stap 4: Gegeneraliseerde toonhoogte detectie


In deze code ik mijn frequentie detectie algoritme veralgemeend zodat het aankon golven van veel (hopelijk alle) vormen.  Bij het schrijven van deze code die ik wilde vasthouden aan het punt dat ik heb in stap 1 gemaakt over het niet gebruik van de pieken en dalen als markeringen de periode van het signaal meten (minimaliseren fout als gevolg van lawaai).  Ik wilde ook iets dat zo eenvoudig mogelijk was te schrijven (moet uitvoeren op 38,5 kHz) terwijl nog steeds robuust genoeg zijn om veel van de waveshapes.  Heb ik besloten om het gebruik van een techniek die vergelijkbaar is met een oscilloscoop trigger.

In principe was wat ik deed kiezen een spanning die ik heb altijd geweten zou in de grenzen van mijn Golf (2.5V).  Dan bekeek ik elke keer de Golf gekruist dit niveau met een opwaartse helling, laten we noemen deze "drempel gebeurtenissen".  Als dit meerdere keren in één cyclus dat ik koos de drempel evenement met de grootste helling gebeurde naar het begin van mijn cyclus. Vergelijkbaar met de laatste stap, gebruikte ik een variabele met de naam "tijd" (verhoogd met een snelheid van 38,5 kHz) voor het meten van de tijd tussen gebeurtenissen drempel en opgeslagen is dit een matrix genoemd timer [].  Ik ben ook opgenomen de helling op elk van de gebeurtenissen van de drempel in een array genaamd helling [].  Toen ik vergeleek de elementen van de timer [] en helling [] om erachter te komen waar er was een match.  Zodra een overeenkomst is gevonden, ik de elementen van de timer [] om de duur van de cyclus te bepalen bij elkaar opgeteld en stuurde deze waarde naar een globale variabele met de naam "periode."  Dan in de functie van de belangrijkste loop (alle stappen die heb ik zojuist beschreven gebeuren in de ADC interrupt routine) gebruikte ik de waarde van de periode wordt berekend van de frequentie en uitprinten.  Ik moet hieraan toevoegen dat ik een variabele in de code genaamd "noMatch" die me geholpen om te beslissen dat het te lang was geweest aangezien ik een goede match had en dat ik moet alleen het heropnemen van de elementen van timer [] en helling [].

Bij het schrijven van dit dacht ik over een heleboel mogelijke scenario's die kunnen breken het algoritme.  De lastigste Golf in mijn gedachten is een welke passeert de 2.5V drempel vele malen in één cyclus op soortgelijke hellingen en ook langs de cyclus wordt gespreid.  Ik heb je een golf als dit, moet je slopeTol zeer laag (0-3) en misschien vindt u dat verlagen timerTol (tot 5 misschien) bijhouden helpt de Golf correct.  Ook, als u wilt meten van golven met zeer steile hellingen (zoals pulse golven) moet stelt u de waarde van slopeTol tot 100 of zelfs helemaal tot 256 om bij te houden van hen beter.

Over het algemeen dit stukje code lijkt zeer goed om veel shapes, kunt u enkele van mijn resultaten in de bovenstaande foto's.  Het inkomend signaal wordt weergegeven in het geel en de drempel-evenement dat is het bijhouden van de Arduino wordt aangegeven door een puls van pin 12 (blauw).

 //generalized wave freq detection with 38.5kHz sampling rate and interrupts //by Amanda Ghassaei 

Ook voegde ik een beetje van code om te stoppen met het berekenen en frequentiegegevens afdrukken wanneer de amplitude van de Golf onder een bepaald niveau valt.  (Als er weinig of geen signaal vervolgens de bovenstaande code soms spuugt een bos van vuilnis).  Hier is het:

 //generalized wave freq detection with 38.5kHz sampling rate and interrupts //by Amanda Ghassaei 

Gerelateerde Artikelen

Betrouwbare frequentie detectie met DSP technieken

Betrouwbare frequentie detectie met DSP technieken

nauwkeurige detectie van frequentie is belangrijk voor vele projecten zoals gitaar/Piano-Tuners, trillingen Analyzers, tekeer beeldschermen, MEMs Sensor analyse en laboratoriuminstrumenten.Er zijn vele mooie voorbeelden van projecten die proberen op
Arduino Pitch detectie algoritme (AMDF)

Arduino Pitch detectie algoritme (AMDF)

Laatste Update: 16 januari 2016 (onlangs toegevoegd een verbeterde matlab code (step7) met samples en veel notities)Voorwoord: Dit Instructable is geschreven in een stijl te laten zien hoe ik geanalyseerd, getest, uitgevoerd en geoptimaliseerd een al
Arduino frequentie synthesizer met behulp van 160MHz Si5351

Arduino frequentie synthesizer met behulp van 160MHz Si5351

Dit Instructable beschrijft de bouw en werking van een zelfstandige frequentie synthesizer geschikt voor gebruik als een signaalgenerator, of voor gebruik als de lokale oscillator in een amateur band zender of ontvanger.Mijn prototype was gebouwd op
Arduino Motion detectie eenvoudig project

Arduino Motion detectie eenvoudig project

Dit is een erg basic tutorial voor Arduino beginners, we wilden het simpel houden en naar het punt, het gebruik van PIR detectie bewegingssensoren en hoe u kunt besturen LED die gebaseerd is op de sensor uitvoergegevens.en zo simpel gezegd, de belang
Arduino Guitar Tuner

Arduino Guitar Tuner

Bouw je eigen elektrische gitaar tuner met behulp van de Arduino! Ik besloot om dit te maken want ik wilde om te experimenteren met de audio-invoer en frequentie detectie. Ik gebruikte Amanda Ghassaei de methode voor de detectie van Arduino frequenti
Arduino Powered muzikale Kerstverlichting

Arduino Powered muzikale Kerstverlichting

na het verkennen van de Instructables website vond ik een paar projecten die piek van mijn interesse en die mij tot denken leiden, ik sommige muzikale Kerstverlichting kon maken. Meeste van wat ik besteed mijn tijd op kwam van Amanda Ghassaei de Inst
Uitzetten van de Data van de Arduino

Uitzetten van de Data van de Arduino

Arduino hoeft niet veel in termen van debug en analyse mogelijkheden ingebouwd, zodat het zeer nuttig zijn kan te hebben een faciliteit om plot gegevens die via de seriële poort van de Arduino worden verzonden.Er zijn verschillende manieren om te doe
Arduino Pocket Lightning Detector

Arduino Pocket Lightning Detector

Wij allen genieten van werken en buiten spelen. Maar ik denk dat iedereen het ermee eens dat door bliksem terwijl je plezier buiten uitdagend krijgen getroffen... niet leuk!OK genoeg met de leuke intro...Dit project kwam tot stand toen, terwijl ik wa
Frequentie-Detector met behulp van PIC 12F683 Processor

Frequentie-Detector met behulp van PIC 12F683 Processor

dit project beschrijving van hardware en software die ik heb ontwikkeld waarmee een kleine 8 bit PIC microprocessor te functioneren als een enkele frequentie-detector of Toon-decoder.Een dergelijke circuit kan worden gebruikt voor het detecteren van
Self Balancing ondersteboven slinger

Self Balancing ondersteboven slinger

Dit is mijn poging om de omgekeerde slinger balanceren op een kar met twee wielen chassis. Ik had gezien de anderen hier en werd geïnspireerd om te proberen mijn eigen versie. De Arduino is heerlijk eenvoudig te programmeren en u kunt oprapen het in
Hiermee wijzigt u Tracker

Hiermee wijzigt u Tracker

Ik heb besloten om een dergelijke titel na realiseren hoe veranderingen in leven zijn belangrijk. Gelukkig in de wereld van de elektronica, deze wijzigingen kunnen worden gekwantificeerd en kunnen ook worden gebruikt in de controlesystemen. Dit instr
Gloeiende kleur veranderende gitaar

Gloeiende kleur veranderende gitaar

In het Koninkrijk van de rock and roll is het belangrijk om zichzelf apart gezet. Met miljoenen mensen in deze wereld, die de gitaar kunnen spelen, is gewoon goed spelen gewoon niet gaan knippen. U moet iets extra aan opstaan als een rock god. Overwe
Self Balancing Robot met LCD

Self Balancing Robot met LCD

De gewijzigde versie van mijn mpu6050 balancing robot stabieler met LCD en voorbeeld van verbinding 2 i2c op dezelfde pincodeVideo 1Video 2Stap 1: Stap 1: ◾L298N dual motor stuurprogramma breakout board◾L298N dual motor stuurprogramma breakout board1
Energiemeter voor $5

Energiemeter voor $5

laten bouwen van een $5 web-based Energiemeter en openbreken ons gebruik voor diegenen met oplossingen voor onze verouderde raster en levensstijlen.Dit is een goede start = > Real-time Web gebaseerd Huishouden Power Usage MonitorEn hier is een vooraa