Mijn printje is vrij specifiek, voor een handapparaat om in het veld te meten.
Ik heb een zogenaamd "cave radiolocation" systeem gebouwd. Het is veel compacter en simpeler in gebruik dan bestaande systemen door de digitalisering.
Het werkt met een magneetspoel die een magneetveld uitzend op bepaalde frequentie. Iemand plaatst hem ondergronds en dan kun je bovengronds de lokatie bepalen. Op 30m diepte kan ik op 30cm de plaats bepalen en op 10cm de diepte. Het lokaliseren gaat door de richting van het magneetveld en sterkte van het signaal te volgen en de diepte door het exact meten van de signaal sterkte. De microcontroller rekent alles uit en zet de gegevens op het display.
Stel dat je in jouw geval de evaluatie kit koopt.
Het signaal stop je in de line-in.
Elke functie in sigmastudio is een blokje met eigen instellingen die je met lijnen verbind met andere blokjes, zo bouw je een heel signaalpad van inputs naar outputs.
Na een link-compile-download draait je project en kun je met volumeknoppen en andere instellingen live parameters aanpassen en signalen uitlezen. Als je bijvoorbeeld de "seven band level detector" plaatst dan zie je realtime de grafiekjes op en neer gaan.
Deze communicatie gaat via I2C. De compiler produceert een C compatible header file met alle relevante register adressen gebaseerd op de naam van het blokje. Deze kun je gebruiken in de firmware van je eigen microcontroller om zelf via I2C te communiceren met de audio processor.
In jouw voorbeeld kan je beginnen met een input blok, een bandpass filter blokje en dan door naar de output zodat je met de koptelefoon kan luisteren naar het resultaat.
Het bandpassfilter kun je heel smal maken en veel nauwkeuriger dan mogelijk is met analoge implementatie, zeker als je het double-precision filter pakt met 56-bit precisie. Je houdt dan een heel smal 1000Hz bandje over.
Het gefilterde signaal stop je in een level detector, trekt er een vaste referentiewaarde af en dat knoop je aan een digitale GPIO pin. Je hebt dan al een demodulatie, maar vanwege het dynamische bereik zou ik er nog een auto gain control (AGC) bij implementeren.
Zelf heb ik het anders gedaan. Omdat de responstijd wel 1-10 seconden mocht zijn heb ik het aangepakt door het signaal te vermenigvuldigen met de output van een kwadratuur oscillator op dezelfde frequentie. Je krijgt dan sinus/cosinus componenten die je in een heel traag lowpass filter kan stoppen en na pythagoras heb je een detectie met een lange responstijd waardoor je zeer kleine signalen in een berg ruis kan detecteren. Hiervoor moet je wel de exacte frequentie kennen tot 0.01Hz nauwkeurig.