Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

Formant-Analysen von Vokalen Jonathan Harrington Ellipse-Darstellung von Vokalformanten Ausreißer identifizieren Vokal-Targets setzen Literatur:

Ähnliche Präsentationen


Präsentation zum Thema: "Formant-Analysen von Vokalen Jonathan Harrington Ellipse-Darstellung von Vokalformanten Ausreißer identifizieren Vokal-Targets setzen Literatur:"—  Präsentation transkript:

1 Formant-Analysen von Vokalen Jonathan Harrington Ellipse-Darstellung von Vokalformanten Ausreißer identifizieren Vokal-Targets setzen Literatur: http://www.phonetik.uni- muenchen.de/~jmh/research/emupapers/pasc.pdfhttp://www.phonetik.uni- muenchen.de/~jmh/research/emupapers/pasc.pdf Kap. 3 (S. 74-123)

2 vowlaxSegmentliste vowlax.fdatTrackdatei F1-F4 vowlax.rmsTrackdatei dB-RMS vowlax.lEtikettierungen"E" "a" "I" "O" vowlax.spkrSprecher-Etikettierungen "67" "68" mid = Formanten (F1-F4) zum zeitlichen Mittelpunkt dcut(vowlax.fdat,.5, prop=T) Nur F1 und F2 mid =mid[,1:2] 1. Ellipse-Abbildungen

3 eplot(mid[temp,], vowlax.l[temp], dopoints=T, form=T) temp = Logischer Vektor um Sprecher 67 zu identifizieren vowlax.spkr==67 Ellipsen Sprecher 67Sprecherin 68 O O O O O O O O O 200015001000 800 700 600 500 400 300 F2 F1 Mit !temp statt temp vowlaxSegmentliste vowlax.fdatTrackdatei F1-F4 vowlax.lEtikettierungen"E" "a" "I" "O" vowlax.spkrSprecher-Etikettierungen "67" "68" mid = dcut(vowlax.fdat,.5, prop=T) mid = mid[,1:2]

4 Mehrere Abbildungen gleichzeitig par(mfrow=c(1,2)) Eine Reihe, zwei Spalten eplot(mid[temp,], vowlax.l[temp], dopoints=T, form=T) eplot(mid[!temp,], vowlax.l[!temp], dopoints=T, form=T) par(mfrow=c(1,1)) wieder auf eine Reihe x eine Spalte setzen

5 help(eplot) Eine Ellipse für alle Daten Eine Ellipse pro Kategorie eplot(mid[temp,], vowlax.l[temp], centroid=T) args(eplot) eplot(mid[temp,])eplot(mid[temp,], vowlax.l[temp]) Mit Mittelpunkt-Beschriftung dopoints: eine entsprechende Etikettierung pro Wert Achsen drehen (nur für F1 x F2 Abbildungen) eplot(mid[temp,], vowlax.l[temp], dopoints=T) eplot(mid[temp,], vowlax.l[temp], centroid=T, form=T) Info zu eplot()

6 eplot(mid[temp,], vowlax.l[temp], centroid=T, doellipse=F) Keine Ellipsen Farben variieren eplot(mid[temp,], vowlax.l[temp], centroid=T, col=F, line=T) eplot(mid[temp,1:2], vowlax.l[temp], centroid=T, col=c("pink", "red", "blue", "green")) Keine Farben und andere Linien, größere Liniendichte

7 Achsen Beschriftung eplot(mid[temp,], vowlax.l[temp], form=T, main="Vokale", xlab="F2 (Hz)", ylab="F1 (Hz)") Bereiche setzen x = c(500, 3000) y= c(0, 1000) eplot(mid[temp,], vowlax.l[temp],form=T, xlim=x, ylim=y)

8 2. Ausreißer identifizieren vowlaxSegmentliste vowlax.fdatTrackdatei F1-F4 vowlax.lEtikettierungen"E" "a" "I" "O" vowlax.spkrSprecher-Etikettierungen "67" "68" F1 x F2 Abbildung zum Segment-Onset, "I" Vokale, Sprecher 67

9 on = B. Matrix, F1-F2 zum Segment-Onset der "I" Vokale vom Sprecher 67 dcut(vowlax.fdat[temp,1:2], 0, prop=T) A. Logischer Vektor um die "I" Vokale vom Sprecher 67 zu identifizieren temp = vowlax.spkr=="67" & vowlax.l == "I" vowlaxSegmentliste vowlax.fdatTrackdatei F1-F4 vowlax.lEtikettierungen"E" "a" "I" "O" vowlax.spkrSprecher-Etikettierungen "67" "68" C. Labels die dazu passen labs = vowlax.l[temp] Oder labs = rep("I", sum(temp)) D. Eine dazu passende Segmentliste seg = vowlax[temp,] seg segment list from database: kielread06 query was: Kanonic=a | E | I | O labels start end utts 4 I 1670.940 1710.690 K67MR001 5 I 2093.000 2144.190 K67MR001 7 I 538.687 595.187 K67MR003...

10 eplot(on, labs, dopoints=T, xlab="F1-Onset", ylab="F2-Onset") E. Abbildung (Achsen nicht drehen) F. Ausreißer identifizieren Logischer Vektor wenn F2 dieser "I" Vokale weniger als zB 100 Hz ist temp = on[,2] < 100 onMatrix. F1, F2 zum Segment-Onset labsVektor von "I" Labels seg Dazu passende Segmentliste

11 eplot(on[!temp,], labs[!temp], dopoints=T, xlab="F1-Onset", ylab="F2-Onset") temp =on[,2] < 100 G. Kann man diesen Befehl modifizieren, um den Ausreißer zu entfernen? eplot(on, labs, dopoints=T, xlab="F1-Onset", ylab="F2-Onset")

12 H. Der entsprechende Segment (also die Segmente, für die F2 weniger als 100 Hz ist) segment list from database: kielread06 query was: Kanonic=a | E | I | O labels start end utts 194 I 911.563 964.625 K67MR096 seg[temp,] Alternative Lösung: der Segment wird identifiziert, um den Formant-Fehler in EMU zu korrigieren. temp =on[,2] < 100 onMatrix. F1, F2 zum Segment-Onset labsVektor von "I" Labels seg Dazu passende Segmentliste

13 Formantfehler in EMU korrigieren

14 I. (Nach der Korrektur) Formanten-Trackdatei aus seg form =emu.track(seg, "fm") J. Neue F1 und F2 zum Segment-Onset on2 =dcut(form[,1:2], 0, prop=T) onMatrix. F1, F2 zum Segment-Onset labsVektor von "I" Labels seg Dazu passende Segmentliste K. Ellipse-Abbildung eplot(on2, labs, dopoints=T, xlab="F1-Onset", ylab="F2-Onset")

15 3. Vokalzielposition setzen wird oft zum 50% Zeitpunkt genommen, da hier der Vokal am wenigsten vom Kontext beeinflusst wird. Manchmal auch für offene und halb-offene Vokale: der Zeitpunkt, zu dem ein F1-Maximum erreicht wird (weil hier im Gegensatz zu Konsonanten der Vokaltrakt maximal offen ist).

16 vowlaxSegmentliste vowlax.fdatTrackdatei F1-F4 vowlax.lEtikettierungen"E" "a" "I" "O" vowlax.spkrSprecher-Etikettierungen "67" "68" Abbildung F1 vom ersten Segment von vowlax als Funktion der Zeit: plot(vowlax.fdat[1,1]) v = locator(1) Linke Maustaste klicken, um eine Vertikale Linie zu diesem Zeitpunkt zu überlagern abline(v=v) Der ms-Wert der Linie v$x

17 Die F1-Werte vom ersten Segment w = vowlax.fdat[1,1]$data T1 857.5 372 862.5 412 867.5 467 872.5 506 877.5 532 882.5 547 887.5 556 892.5 561 897.5 562 902.5 556 907.5 550 912.5 538 917.5 525 922.5 521 927.5 517 932.5 504 937.5 494 942.5 492 Die Zeiten, zu denen diese Werte vorkommen. zeit = tracktimes(w) zeit Logischer Vektor: T wenn w ein Maximum erreicht temp = Die entsprechende Zeit dieses Maximums zeit[temp] w w == max(w) [1] 897.5

18 In eine Funktion packen: mzeit <- function(werte) { zeit = tracktimes(werte) temp = werte == max(werte) # Sollte es 2 Maxima geben, nimm den ersten zeit[temp][1] } mzeit(w) f1zeit = by(vowlax.fdat[,1], mzeit, simplify=T) Die mzeit() Funktion auf die Trackdatei andwenden: Der Zeitpunkt, zu dem zuerst w ein Maximum erreicht

19 Überprüfen für die ersten 10 Segmente for(j in 1:10){ plot(vowlax.fdat[j,1]) abline(v=f1zeit[j]) # Linke Maustaste klicken locator(1) } Vielleicht modifizieren, sodass der F1-Maximum nur im zeitlich mittleren 30% des Vokals vorkommt: f1zeit = by(mittel30, mzeit, simplify=T) mittel30 = dcut(vowlax.fdat[,1],.35,.65, prop=T)

20 Die Zeiten können exportiert werden, um in Emulabel eingelesen zu werden. makelab(f1zeit, utt(vowlax), pfad) pfad = "ein Verzeichnis" Ein Vezeichnis definieren, zu dem die Etikettierungen exportiert werden sollen Vektor von Zeiten Parallel Vektor von Äußerungsnamen Label-Dateien erzeugen

21 Template-Datei modifizieren, neue Ebene definieren (zB Target), damit die Zeiten der Zielpositionen abgebildet werden können.


Herunterladen ppt "Formant-Analysen von Vokalen Jonathan Harrington Ellipse-Darstellung von Vokalformanten Ausreißer identifizieren Vokal-Targets setzen Literatur:"

Ähnliche Präsentationen


Google-Anzeigen