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
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.
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
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).
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.
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.
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.