Forum: Digitale Signalverarbeitung / DSP / Machine Learning Grundfrequenzbestimmung im Audiosignal


von Gregor K. (mathemuffel)


Lesenswert?

Hallo alle zusammen,

Ich habe da ein großes Problem!!
Ich möchte in einem Audiosignal den Verlauf der Grundfrequenz eines 
Sprachsignals bestimmen. Zuerst habe ich einmal das Audiosignal über 
einen Bandpass laufen lassen (50-250Hz). Was danach herauskommt eignet 
sich allerdings noch nicht um z.b. eine Periodendauermessung zuverlässig 
durch zu führen. Das ganze sollte Idealerweise sogar noch in Echtzeit 
funktionieren.
Wer weiß Rat oder erste Lösungsansätze??

Vielen Dank im voraus

von Günter -. (guenter)


Lesenswert?

Bei einem Sprachsignal ist es sinnvoll die Daten in 20ms Rahmen 
aufzuteilen. In diesem Zeitraum gilt das Sprachsignal als stationär. 
Jetzt gibt es bei der Sprache zwei Formen von Anregung, die stimmhafte, 
bei der die Stimmbänder schwingen und die stimmlose, bei der verwirbelte 
Luft (Rauschen) als Anregung genutzt wird.

Nur für Rahmen mit stimmhafter Anregung macht es jetzt Sinn die 
Anregungsfrequenz zu bestimmen.

Wenn du jetzt den Rahmen durch dein Filter sendest, müsste für die 
stimmhafte Anregung ein periodisches Signal herauskommen.

Verstärken könntest du das eventuell indem du die Autokorrelation vom 
Filterausgang berechnest. Bei stimmhafter Anregung sollte sich die 
Periodizität verstärken, bei stimmloser Anregung bleibt das ganze 
rauschhaft.

Eine andere Möglichkeit ist die FFT von dem Filterausgang zu berechnen.

von Gregor K. (mathemuffel)


Lesenswert?

Hallo Günter,

vielen Dank für die rasche Antwort :-)
Ich hatte wohl zu wenig über mein eigendliche Problem geschrieben.
Also stimmhafte/stimmlose Passagen sowie Pausen unterscheide ich schon 
über die Energieverteilung im Spectrum mittels FFT. Dazu lasse ich eine 
kleine FFT mit 256 Stützpunkten  mit einer Schrittweite von 8 Samples 
über das Audiosignal laufen.
Ich möchte nun den genauen Frequenzverlauf für die stimmhaften Passagen 
ermitteln. Dabei brauche ich eine Genauigkeit von mindestens 1Hz (je 
genauer desto besser) und das ganze alle 8 Samples bei 8Khz Abtastrate. 
Später sollte es auch in Echtzeit in einem noch erschwinglichen DSP 
laufen. Zuerst muß es jedoch halbwegs im PC funktionieren.
Sinn und Zweck der ganzen Übung ist es einen FM-modulierten Tremor in 
der Sprache zu finden.

Beste Grüße
  Gregor

von kurt (Gast)


Lesenswert?

Hallo!

Schau dir mal die Cepstrum - Analyse an, die soll für Sprachverarbeitung
ganz nützlich sein. (Ist im Prinzip so was wie eine logarithmische FFT).

von Günter -. (guenter)


Lesenswert?

Wenn ich das richtig verstehe dann nimmst du einen gleitenden Rahmen mit 
8 Abtastwerten? D.h. dein Rahmen geht jeweils einen Abtastwert weiter 
und beinhaltet 8 Abtastwerte?

Der Rahmen wird zu klein sein um deine Grundfrequenz richtig zu 
ermitteln. Mit den 8 Abtastwerten bei 8kHz kannst du minimal eine 
Frequenz von 1kHz darstellen. Nach dem Bandpassfilter im Bereich 
50-250Hz wird also nichts brauchbares mehr sein.

Im Vergleich, wenn du einen Rahmen von 20ms nimmst, dann kannst du 
Frequenzen bis auf 50Hz darstellen. Da 20ms als stationär gelten 
brauchst du auch keinen gleitenden Rahmen nehmen, sondern kannst jeweils 
aufeinander folgende Abtastwerte nehmen. Die Rahmen müssen also nicht 
überlappen. Das wird auch weniger Rechenaufwand sein.

von Christian (Guest) (Gast)


Lesenswert?

Mal nee Frage:

8 kS/sek.   und 1 Hz Auflösung oder besser.

Falls der Freq.-bereich in etwa bekannt ist (bis 500 Hz),
könnte man die Abtastrate
reduzieren => spart "CPU-Last"  Channon läßt grüßen (+"Reserve").

=> 250 Hz max analog => min. 500 S/Sekunde oder mehr.

1 Hz Auflösung => Zeitfenster, dass sind alte Samples + ein aktuell 
Neues


=> 499 gespeicherte Sample + ein neuer Wert
dann die FFT
dann FFT auf Amplitude analysieren

Da 500 ein schöner Wert ist, sollte man 512 bevorzugen.


Ist der Ansatz so ok ?

Die FM-Modulation ist schwieriger zu ermitteln, da die FFT mittelt
=> kleinere Bereiche mache oder obige Verfahren
  oder Nulldurchgänge analysieren, etc.

Im EMG-Bereich gibt es verschiedene Verfahren zur Untersuchung der 
Spektren.
Ich glaube (!!!),
Merletti hieß der Wissenschaftler, der die Spektren untersuchte
(Italiener)


Gruß
c.

von Gregor K. (mathemuffel)


Lesenswert?

Vielen Dank erst einmal für das rege Interesse an meinem „Problemchen" 
und den Tips

Ich habe in einem anderen Thema von Ralf eine äußerst interessante Sache 
gefunden.
Ich hoffe das niemand etwas dagegen hat wenn ich den Beitrag einfach mal 
rüberkopiere? :-)

Zitat:
„du nimmst 384 Abtastwerte auf. Von den ersten 256 Abtastwerten machst 
du die erste FFT (mit Hammingfenster). Eine halbe FFT-Länge später dann 
die zweite FFT (auch mit Hammingfenster). Deine 6 Frequenzen liegen 
immer etwas neben den Spektrallinien der FFT. Wieviel das ist kannst du 
aber über die Phasendrehung an der maximalen Spektrallinie von der 
ersten zur zweiten FFT berechnen. 140Hz liegt z.B. 0.625Hz unter 
45*3.125Hz. Also ist die 45.Spektrallinie maximal. Du braucht also die 
Phase in rad an den entsprechendem FFT-Koeffizienten. f = (45 + 
(phi2-phi1)/pi) * 3.125Hz Die erreichbare Frequenzauflösung ist um den 
Rauschabstand des ADC besser als die Frequenzauflösung einer FFT und 
kann unter 1mHz sein."

Da ich für die Erkennung von stimmhaften/stimmlosen  Sprachpassagen 
sowieso schon eine FFT einsetzte bietet sich die Lösung von Ralf direkt 
an - und es läuft prima!!!
Bis auf ein kleines grundsätzliche Problem mit der FFT. Aber dazu werde 
ich ein neues Thema eröffnen da ich denke das es von allgemeinem 
Interesse ist.

Mein Fenster (im obigen Fall 384 Samples) lasse ich aus dem Grund über 
das Audiosignal in kleinen Schritten gleiten da ich die Frequenzänderung 
über die Zeit erfassen möchte.
Und nun kommt auch schon das nächste Problem:
Die stimmhaften Passagen (Vokale) treten über die Zeit gesehen nur 
stückchenweise auf. Aber genau in diesen „Stückchen" (ich liebe 
Stückchen - am liebsten mittags zum Kaffee:-) ) sind immer nur 
Bruchteile meiner gesuchten Info enthalten. Habe da noch keine Ahnung 
wie das zu lösen ist??

Beste Grüße
  Gregor

von Gregor K. (mathemuffel)


Lesenswert?

Hallo Christian,

hatte ich ganz vergessen. Vien Dank für den Tip mit Merletti.
Ich muß mal schauen was ich an frei zugänglichen Publikationen finden 
kann.
Auf den ersten Blick ist er eher der Mensch der aus seinem Wissen nur 
Kapital schlagen möchte. So kostet zb "Biomedical Signal Analysis: A 
Case-Study Approach" stolze 100 Euronen!!

Beste Grüße
 Gregor

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.