280 likes | 382 Views
LPC- Resynthese. Stimulierzeugung in praat. Synthese durch Anwendung akustischer Theorie. Quelle (als Spektrum). Filter-Übertragungsfunktion (hier: S chwa-typisch). Endgültiges Signal durch Multiplikation des Quellspektrums mit der Übertragungsfunktion des Filters (Abbildung aus
E N D
LPC-Resynthese Stimulierzeugung in praat
Synthese durch Anwendung akustischer Theorie Quelle (als Spektrum) Filter-Übertragungsfunktion (hier: Schwa-typisch) Endgültiges Signal durch Multiplikation des Quellspektrums mit der Übertragungsfunktion des Filters (Abbildung aus Pompino-Marschall, 2003) bzw. der Faltung der Zeitsignale
Bislang haben wir uns mit relativ komplizierten Aufbauten, die die Sprechvorgänge so gut wie möglich zu simulieren versuchen, beschäftigt • Quellsignal, gefiltert durch eine Reihenschaltung digitaler Filter (Vokale) • Quellsignal(e), gefiltert durch Parallelschaltung digitaler Filter (z.B. für Frikative) • Dies ist in der Klatt-Formantsynthese so gelöst, und abgeleitet davon in HLSyn • Prinzipiell kann man aber ganz trivial z.B. in praat ein beliebiges Quellsignal erzeugen und mit einem beliebigen Filter modifizieren
Beispiel aus dem praat-Tutorial Quelle: pitchTier = Create PitchTier... source 0 0.5 Add point... 0.0 150 Add point... 0.5 100 pulses = ToPointProcess Remove pointsbetween... 0 0.02 Remove pointsbetween... 0.24 0.31 Remove pointsbetween... 0.48 0.5 source = To Sound (phonation)... 44100 0.6 0.05 0.7 0.03 3.0 4.0
Create FormantGrid... filter 0 0.5 10 550 1100 60 50 #erzeugt 10 Formanten, beginnend mit 550 Hz, jeder weitere Formant ist 1100 Hz #vom nächstniederen entfernt #(1650, 2750, 3850, 4950, 6050, 7150, 8250, 9350, und 10450 Hz) #Bandbreite beginnt für F1 bei 50, mit Steigerung um jeweils 60 Hz (=Amplitude sinkt) #Änderungen, um eine Art /ba/ zu erzeugen: Remove formantpointsbetween... 1 0 0.5 Add formantpoint... 1 0.00 100 Add formantpoint... 1 0.05 700 Remove formantpointsbetween... 2 0 0.5 Add formantpoint... 2 0.00 500 Add formantpoint... 2 0.05 1100 Wenn wir nun Quelle und Filter gleichzeitig markieren, erhalten wir die Option „Filter“. Wegen der Eigenschaften der Quelle erhalten wir eine Art /baʔa/
Filterfunktion als Schlüssel zur Resynthese Die in praat implementierte Filterfunktion erlaubt also die Filterung jedes beliebigen Quellsignals durch jeden beliebigen Filter Um ein „echtes“ Sprachsignal zu resynthetisieren, müssen wir also lediglich -Quell- und Filteranteil trennen -das entstandene Quellsignal mit den dann bekannten Filtereigenschaften modifizieren (filtern) -sowohl Quell- als auch Filteranteil könnten gezielt manipuliert werden -hierfür ist jedoch eine verlässliche Analyse sowohl der Quelle als auch des Filteranteils notwendig (z.B. Formantenanalyse)
Linear PredictiveCoding Das Analysefenster hat eine gewisse Breite und enthält nsamples LPC versucht, den n-ten Abtastwert vorherzusagen aus den Abtastwerten 1 bis n-1 x‘nweicht ab von xn(dem tatsächlichen x-Wert an Stelle n) Verschiedene Algorithmen (die wir nicht kennen müssen) minimieren diesen Unterschied, in dem sie die Koeffizienten (ak) anpassen; Nur diese Koeffizienten werden gespeichert (Datenreduktion) – Wichtig für uns: diese (opaken) Koeffizienten beschreiben den Filter und man kann aus diesen die Mittenfrequenz und die Bandbreite der Formanten berechnen Jedes digitale Signal ist gesamplet
Linear PredictiveCoding In anderen Worten (nach Boersma): das LPC approximiert ein gegebenes Frequenzspektrum durch eine spektrale Übertragungsfunktion mit einer möglichst minimalen Anzahl von spektralen Gipfeln (deren Frequenz und Bandbreite man aus den opaken Koeffizienten ableiten kann) Ergibt eine Approximation des Quellsignals (da die Filterfunktion ja nur geschätzt ist) Filtern Invers Filtern: mit umgedrehter Übertragungsfunktion filtern
Die Quelle-Filter-Trennung funktioniert also umso besser, je realistischer die eingeschätzte Filterfunktion ist Diese ist umso realistischer, je mehr Übereinstimmung zwischen der tatsächlichen Anzahl der Formanten und der erwarteten Anzahl herrscht. Parameter der LPC-Analyse: -Prädiktionsordnung (siehe unten) -Breite des Analysefensters (default 25 ms) -Verschiebung der Analysefenster (default 5 ms) -Präemphasefrequenz (normalerweise 50 Hz; oberhalb dieser Frequenz wird das Spektrum um +6dB/Oktave angehoben, um es „flach“ zu machen, da Spektren natürlicher Sprache gewöhnlich mit -6dB/Oktave abnehmende Amplituden mit zunehmender Frequenz aufweisen) Zur Wahl der richtigen Prädiktionsordnung: Merke: Anzahl der eingeschätzen Formanten ≾ Prädiktionsordnung/2 („numberofpoles“) Warum? Prädiktionsordnung ≿ Abtastrate[Hz]/1000 Also z.B. Abtastrate=48 kHz Prädiktionsordnung mindestens 48 (bis zu 50)
Filter bei unterschiedlichen Prädiktionsordnungen Da uns aber maximal die ersten 5 (und nicht 24) Formanten interessieren, und die Wahrscheinlichkeit, dass die Algorithmen Fehler machen, steigt, je höher die Anzahl der zu suchenden Formanten ist, reicht es aus, nur den Bereich bis 5000 Hz (bei Männern) bzw. 5500 Hz (bei Frauen) zu analysieren Warum? In diesen Frequenzbereichen ist mit fünf Formanten zu rechnen, wie man über die äquidistanten Formanten des neutralen Rohrs ableiten kann, die auch als eine Art Durchschnitt der geschlechts-typischen Formantwerte angesehen werden können: Formanten Männer [Hz]: 500, 1500, 2500, 3500, 4500, 5500, ... Formanten Frauen [Hz]: 550, 1650, 2750, 3850, 4950, 6050,... Resampling: wegen Nyquist-Shannon-Abtasttheorem (fabtast≥ 2 · fmax) bei Männern 10000 Hz, bei Frauen 11000 Hz
To LPC (burg...) (Predictionorder 10, 11, oder 12)
/pUp/ Glottale „Quelle“ Rausch-“Quelle“ Rausch-“Quelle“
Quelle und LPC-Filter markieren, „Filter“ Original Synthese
Modifikationen Sind, da die LPC-Koeffizienten „opak“ sind, nur über einen Umweg möglich: LPC-Objekt markieren“ToFormant“ Formant-Objekt markierenDowntoFormantGrid
Original (/pUp/) Synthese (/pYp/) Präemphase- -Änderung als Artefakt
http://bartus.org/akustyk/ • Add-on zu praat, das u.a. die LPC-Resynthese wesentlich vereinfacht • Ist aber „nur“ eine Scriptsammlung, automatisiert also nur das, was in praat ohnehin möglich ist
Erste Möglichkeit: Globale Änderung
Zu Dokumentationszwecken bleibt jeder Zwischenschritt im praat-Objektfenster und kann ggf. gespeichert werden:
weitergehendeTransitionen in der Resynthese erzeugen: Den Auswahlbereich in 10 gleiche Intervalle unterteilen
Die erzeugtenWertewerdenauchdokumentiert: F1_change F2_change F1old F2_old F1_new F2_new self self+100 421 803 421 903 self self+250 410 808 410 1158 self self+400 413 813 413 1463 self self+400 419 814 419 1614 self self+400 424 810 424 1610 self self+400 426 804 426 1604 self self+400 423 796 423 1596 self self+400 414 789 414 1589 self self+400 397 783 397 1583 self self+400 376 782 376 1582 Zwischen diesen Zielwerten pro Unterabschnitt wird Interpoliert, so dass keine „Brüche“ entstehen
/pUp//pYp/ Wäre auch mit einer „globalen“ Änderung möglich gewesen, da die „Ränder“ (Transitionsphasen) ohnehin interpoliert werden
Sinnvollerer Einsatz /pUp/ /pjUp/
AKUSTYK erlaubt auch die Interpolation zwischen den F1- und F2-Werten zweier gegebener Sounds Semiautomatische Stimulierzeugung (durch „Create speechcontinuum...“) „date“ „debt“