Autokorrelation: Digitales Stimmgerät Auflösung erhöhen

Gast #6832338
Lesenswert?

Hallo,

momentan fange ich an micht in die Audiotechnik mittels DSP 
einzuarbeiten. Als erstes Projekt wollte ich ein digitales Stimmgerät 
bauen.
Dazu wird ein Gitarrensignal mit einer Abtastrate von 13kHz abgetastet. 
Es werden 1024 Samples aufgenommen. Anschließend werden die Messdaten 
teilweise nach dem YIN-Algorithmus ausgewertet (Bildung der Kumulativen 
mittleren normalisierten Differenzfunktion (Schritt 3) und bestimmung 
des Tiefpunkts). Dies funktioniert auch so weit, jedoch ist die 
Auflösung, gerade für die hohe e Saite (329,63 Hz) sehr schlecht. Es 
werden entweder 325 Hz oder 333 Hz ausgegeben, dazwischen liegt leider 
nichts.
Wie lässt sich die Auflösung für die hohen Saiten nun erhöhen?

Viele Grüße
Hannes
Gast #6832527
Lesenswert?

> Ohne den YIN-Algorithmus zu kennen, vermute ich mal,
dass der dann dafuer ncihts taugt. wenn er nut 8 Hz aufloest.

Ich wuerde als Aufloesung 0.1 Hz anstreben, das entspricht
einer Schwebung von 10 s.

Also entweder die Samplingrate entsprechend anpassen, oder mit
Oversampling "passende" Zwischenwerte ausrechnen und einfuegen.
Gast #6833146
Lesenswert?

Hannes schrieb:
> Es werden entweder 325 Hz oder 333 Hz ausgegeben, dazwischen liegt leider
> nichts.
Wie funktioniert dein Algorithmus? Selbst durch einfache gewichtete 
Interpolation zwischen den FFT-Werten bekommt man eigentlich 
Kommastellen heraus.

Und sollte das Auflösungsproblem nicht bei den tiefen Saiten bestehen?
Gast #6833314
Lesenswert?

Vielen Dank für die Antworten.
Leider erzielt man mit der Erhöhung der Sampleanzahl keine höhere 
Auflösung. Das Problem ist, dass sich die Frequenz aus dem Qutienten der 
Abtastfrequenz und dem jeweiligen Sample des Peaks bestimmt (fs/i). i 
stellt dabei einen integer dar. Dadurch kommt ergibt sich bei Abtastrate 
von 13kHz:
i=158: 82,28 Hz
i=157: 82,8 Hz
i=156: 83,33 Hz

Für hohe Frequenzen ist das i kleiner dadurch ergibt sich:
i=38: 342,10 Hz
i=39: 333,33 Hz
i=40: 325 Hz
Persönliche Seite #6833445
Lesenswert?

Bei einem Stimmgerät, das nur eine Saite einstellen soll, ist eine 
Spektralanalyse eher hinderlich. Da nimmt man besser 2,3 Zielfrequenzen, 
die man kontinuierlich adaptiert. Also:

Frequenzschätzung, Anpassung des Abtastintervalls, Filterung mit Sinus 
und Neuschätzung der neuen Punkte. Bei z.B. 12 Messwerten je Welle kann 
man noch die 2. und 3. Oberwelle rausnehmen. Bei 3-4 Wellendurchgängen 
und 8-10 Adaptionsiterationen hat man auch bei einem 100Hz-Bass binnen 
weniger Sekunden (einmal Anzupfen) die Frequenz eingestellt.

Als Beispiel die Iteration von meiner Webseite mit dem einfachsen Ansatz 
von nur einer Mittenfrequenz und klassischem Links-/Rechts-Entscheid zum 
weiterrechnen.

-----------------------------

Bei entsprechender Rechenleistung geht es mit etwas Speicher auch mit 
mehreren Ansätzen "gleichzeitig". Mein Audio-2-MIDI-Converter 
prozessiert der Welle so schnell hinterher, dass auch das Vibrato auf 
der Saite miterfasst und in einem Frequenzwert umgewandelt wird.
Angehängte Dateien:
Gast #6843327
Lesenswert?

Vielen Dank.
Leider habe ist mir das noch nicht so ganz klar. Die Abtastrate würde 
ich gerne konstant halten. Wie filtere ich mit einem Sinus? Dazu müsste 
man das Signal im Frequenzbereich mit einem Dirac-Impuls multiplizieren 
oder?

Leider habe ich das Problem immer noch nicht gelöst. Ich habe versucht 
das Hauptminimum als Grundfrequenz anzunehmen und dann über die 
Harmonische, welche ein deultich höheren Index hat, die genaue Frequenz 
zu bestimmen. Jedoch liegen andere Minimas in der umgebung, welche 
genauso aussehen wie das Mimimum der Harmonischen.

Schönen Sonntag
Hannes
Gast #6843567
Lesenswert?

Ich würde einen anderen Ansatz wählen:
In meiner Kinheit stimmte ich meine Instrumente mit einem Z80 und einem 
Oszilloskop:
Mikrophon --> Verstärker mit Kompressor (AGC) --> Y-Achse des Oszis
Z80 --> Timer erzeugt Sollfrequenz --> X-Achsen-Trigger
Somit sieht man:
Bild steht --> Frequenz richtig
Schwingungen wandern --> nachstimmen.

Ein Stimmgerät, welches auf diesem Prinzip basiert (nur mit LED-Streifen 
statt Oszi), ist das CTS5 von TLA, das Marc Michalzik gut beschrieben 
hat:
http://www.bymm.de/documents/25/Rittertafelakkordeon_V1_24.pdf
Gast #6843578
Lesenswert?

Mit einem Prozessor würde das so aussehen:
Samples regelmäßig starten mit einem Vielfachem der Soll-Periodendauer.
Entweder anzeigen oder auswerten, ob (die  oder  der Beginn der) 
Schwingung steht oder nach links oder rechts wandert.

Dein Beispiel 329,63 Hz / 1024 Samples @ 13kHz:
Periodendauer = 1000 ms / 329,628 Hz = 3,03373 ms
Sampledauer   = 1024 ms / 13 = 78,7692ms
78,769230/3,03373=25,964482  Schwingungen pro Samplereihe

d.h. nach 26 (oder 27..30) * 3,03373 ms = 78,876902 ms eine neue 
Sampelreihe starten und prüfen, ob die Schwingungen darin wandern.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren