-
-
Erfahrener Benutzer
Robotik Visionär
Die Töne die man zum Stimmen hat, sind in der Regel nicht besonders lang. Mit dem einfachen Zählen der Perioden kommt man da nicht unbedingt klar. Wenn man ein sauberes Signal hat, kann man die Zeiten der Nulldurchgänge messen und die Frequenz daraus berechenen. Das erlaubt auch bei kurzer Messzeit und eher niedrigern Frequenzen eine sehr hohe Auflösung.
Wenn man eher viel Hintergrundgeräusche hat, gibt es einen besseren Weg:
Das Signal wird digital aufgezeichnet und im RAM gespeichert. An das gemessene Signal wird dann per Least square Fit eine gedämpfte Siunsschwingung angepaßt. Mit einem µC hat man da aber 2 Schwierigkeiten: 1) Man hat nur recht wenig SRAM. Bei etwa 5 kHZ Datenrate und 8 Bit Auflösung reicht auch der Mega128 nur für gut 1 Sekunde. Das ist nicht viel sollte aber schon reichen.
2) Die Rechenzeit kann schon recht lang werden. Man wird also vor allem die Berechnung der Sinusfunktion umgehen müssen. Man wird sich also ein paar Gedanken machen müssen wie man das effektiv programmiert. da gibt es aber einiges was man gegen dem direkten Weg beschleunigen kann. Mit einer Rechenzeit von rund 1-10 Sekunden würde ich aber schon rechnen.
Wenn man erst man einen groben Schätzwert (ca. +-20%) der Frequenz hat geht der Feinabgleich normalerweise recht schnell. Vor allem wird man auch kaum durch Oberwellen und ähnliches gestört.
Mit eine AVR Mega128 wird das vom RAM und der Rechenzeit (vermutlich) nicht so ideal. Ein ARM Controller mit mehr RAM wäre für diese Methode die bessere Wahl.
Edit:
Es ist sicher eine gute Idee mal das Signal vom Mikrofon per Soundkarte auf dem PC aufzuzeichen. Dann kann man beurteilen, ob man mit der einfacheren Zeitmessung auskommt, oder ob man über den AD-Wandler gehen muß.
Berechtigungen
- Neue Themen erstellen: Nein
- Themen beantworten: Nein
- Anhänge hochladen: Nein
- Beiträge bearbeiten: Nein
-
Foren-Regeln
Lesezeichen