View
116
Download
6
Category
Preview:
Citation preview
Formant-Analysen von Vokalen
Ellipse-Darstellung ungespannter Vokale
Ausreißer identifizieren
Sprecher-Normalisierung
Im Original von Jonathan Harrington
Die SprechdatenUngespante ["E" "a" "I" "O"] deutsche Vokale Sprecher 67 (M) und Sprecherin 68 (W)
Standard-Norddeutsche Sprecher, Vokale aus 100 gelesenen Sätzen.
vowlax Segmentlistevowlax.fdat Trackdatei F1-F4vowlax.l Etikettierungen "E" "a" "I" "O"…vowlax.spkr Sprecher-Etikettierungen "67" "68"
data(package="emu") bzw. über R-Menü „Pakete“ das emu Paket laden (emu-Paket muss vorher installiert worden sein)
vowlax Segmentlistevowlax.fdat Trackdatei F1-F4vowlax.l Etikettierungen "E" "a" "I" "O"…vowlax.spkr Sprecher-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
EEE
EE E
EE
EE
EE
EE
E
E
EE
EE
E
EEE
EE
EEEE
E
E
EE
EE
EE
E
E
Ea
a
a
a
aa
a
aa a
a
aa a
a
aa
a
aa
aa
a
aa
a
a
a
a
a
aaa
a
aa
a
a
a
a
aa
a
a
a
a
aaa
a
a
a
a
aa
a
a
aa
a
a
a
a
I
II
I
III
I II
III
III
II
III
I
II
I
I
II I
I II
II
II II
II
II
III
II II I
III III
I
III
I
I IIII
I
I
II
I
I
II
II
II I
I
I
II
II
OO
O OO
O
OOO
O
OO
OO OO
3000 2500 2000 1500 1000
1000
800
600
400
F2
F1
eplot(mid[temp,], vowlax.l[temp], dopoints=T, form=T)
temp =
Logischer Vektor um Sprecher “67” zu identifizieren
vowlax.spkr==“67”
Ellipsen Sprecher 67 Sprecherin 68
E EEEE
EE
EE
EEEE
EE
E
E
E
E
E
EE
EEE
EE
E
E
E
EEE EE
EE
EE
E
E
aa
a
a
a
aaa
a
a
aa
a
a
aa
a
a
aa
a a
aa a
a
a
a
a aa
a
a
a
a
aa
a
aa aa
a
a
a aa
a
a
a
a
a
a
a
a
a
a
aaaaa a
II
I
I
II
II
I
III
I
II I II
I
II I
II
I
I I
II
I
I
II
I
I
I
I
II
I
II
II
I
I
II
II
I
II
I
I
III
I
II
I
I
I
III
I
I
II
I
I
II
I
I
I
II
I
I
I
II
O
O
O
O OO
OOO
OO
O
OOO O
2000 1500 1000
80
07
00
60
05
00
40
03
00
F2
F1
Mit !temp statt temp
vowlax Segmentlistevowlax.fdat Trackdatei F1-F4vowlax.l Etikettierungen "E" "a" "I" "O"vowlax.spkr Sprecher-Etikettierungen "67" "68"
mid = dcut(vowlax.fdat, .5, prop=T)
mid = mid[,1:2]
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
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()
eplot(mid[temp,], vowlax.l[temp], centroid=T, doellipse=F)
Keine Ellipsen
Farben variieren
eplot(mid[temp,], vowlax.l[temp], centroid=T, col=F)
eplot(mid[temp,1:2], vowlax.l[temp], centroid=T, col=c("pink", "red", "blue", "green"))
Keine Farben
Linientyp
eplot(mid[temp,], vowlax.l[temp], centroid=T, linetype=T)
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)
2. Ausreißer identifizieren
EEE
EE E
EE
EE
EE
EE
E
E
EE
EE
E
EEE
EE
EEEE
E
E
EE
E
E
EE
E
E
Ea
a
a
a
aa
a
aa a
a
aa a
a
aa
a
aa
aa
a
aa
a
a
a
a
a
aaa
a
aa
a
a
a
a
aa
a
a
a
a
aaa
a
a
a
a
aa
a
a
aa
a
a
a
a
I
II
I
III
I II
III
III
II
III
I
II
I
I
II I
I II
II
II II
II
II
III
II II I
III III
I
III
I
I IIII
I
I
II
I
I
II
II
II I
I
I
II
II
OO
O OO
O
OOO
O
OO
OO OO
3000 2500 2000 1500 1000
1000
800
600
400
F2
F1
Vokale des weiblichen SprechersFormanten zum zeitlichen Mittelpunkt
Logischer Vektor: F1 ist mehr als 800 und der Vokal ist “E” und die Sprecherin ist “68”
temp = mid[,1] > 800 & vowlax.l == "E" & vowlax.spkr == "68"
Äußerung identifizieren:
Ein Spektrogramm dieses Vokales in Emulabel darstellen.
vowlax[temp,] oder utt(vowlax[temp,])
mid = dcut(vowlax.fdat, .5, prop=T)
vowlax Segmentlistevowlax.fdat Trackdatei F1-F4vowlax.l Etikettierungen "E" "a" "I" "O"vowlax.spkr Sprecher-Etikettierungen "67" "68"
3. Sprechernormalisierung
Dies führt zu Vokalüberlappung. zB die Formanten eines männlichen [a] haben oft denselben Wert wie diejenigen eines [o] Vokals von einem Kind.
Frauen haben kürzere Vokaltrakte, daher eine Erhöhung der Formanten für den selben phonetischen Vokal. Bei Kindern ist der Vokaltrakt noch kürzer und daher sind die Formanten noch höher.
Peterson & Barney (1952): Vokale von 76 Männern, Frauen, und Kindern.
EEEEE EEE
E EEEEE EEE
EE
E
EEEEE
EE
EEE
EEE E EEEE E
E
E
a aa
a
aaaa
aa
aaa
a
aa
a
aaa
aa
aaa
a
a
a
a aa
aa
a
a
aaaaaaaa
aaaaa
aa
aa
aaa
aa
aaaaa a
I I II
IIII
IIII
III I I I
III III
II I
III
III
II
IIIIII I
I II
I
I II I
III
I
II
III
IIII
III I I
II I
III
II
II
IIII
III
OO
OOOO
OOOOO
OOOOO
2500 1500
1000
600
400
F2
F1
EEEEE E
EE
EEEE
EE
E
EEE
EE
E
EEEEE
EEEE
E
EE
EE
E
EEE
E
Ea
a
aa
a a
aaa a
a
a a a
a
aa
a
aa
aa
a
aa
a
aa
a
a
aaa
a
aa
a
a
aa
aa
aa
a
a
aaaa
a
a
a
aa
a
aa
a
a
a
a
a
II IIII
II I
IIIII
III
II III II
II
II II I I
II
II II III I
I II II II I
III III
I
III
II II
III
I
II
I
III
III
I II
I
I I
II
OO
O OOO
OOO
O
OO
OO OO
2500 1500
1000
600
400
F2
F1
Sprecher 67 Sprecher 68
E
a
I
O
2500 2000 1500 1000
900
800
700
600
500
400
300
F2
F1
E
a
I
O
2500 2000 1500 1000
900
800
700
600
500
400
300
F2
F1
Vokalnormalisierung
wie wird derselbe phonetische Vokal trotz dieser sprecherbedingten Unterschiede wahrgenommen?
Wie können sprecherbedingte Merkmale im akustischen Signal entfernt werden?
intrinsisch extrinsisch
Die Normalisierung eines Vokals braucht eine Stichprobe von Vokalen desselben Sprechers (zB [])
Die Trennung phonetischer und sprecherbedingter Eigenschaften
Wird auf einzelne Vokale durchgeführt, ohne die anderen Vokale desselben Sprechers zu berücksichtigen
Normalisierung
Die extrinsische NormalisierungJoos (1948)
Die Vokale eines Sprechers werden im Bezug zu seinem/ihrem [i u a] wahrgenommen. Daher ist die Entfernung von z.B. [] zu den Eckvokalen ca. dieselbe für verschiedene Sprecher.
Dagegen Verbrugge et al (1976, JASA). Hörer identifizieren Vokale genau, auch wenn sie den Sprecher zum ersten Mal hören.
Synthese von ‘Please say the word bVt’, in dem F1 variiert wurde.
Je höher F1, umso mehr verschiebt sich die Wahrnehmung von ‘bet’ nach ‘bit’
Ladefoged & Broadbent (1957)
Extrinsische Normalisierung (Lobanov, 1971)
Normalisierte Formantwerte = (Formantwerte – m)/s
m und s sind der Durchschnitt und die Standardabweichung eines Formanten (zB F1) eines Sprechers
F1 F1-m (F1-m)/s 220 -214 -1.11550 116 0.60300 -134 -0.69700 266 1.38400 -34 -0.18
m= 434 Hz, s = 193.1 Hz
(Standard-Normalisierung)
f = c(220, 550, 300, 700, 400)
R Befehl für (f-m)/s
(f - mean(f))/sd(f)
In eine Funktion packen – damit sie auf beliebiege Formant-Daten angewendet werden kann…
Funktionen schreiben
probe <- function(x, y)
{
}
x + y
# summiert x und y
probe(20, 30)
probe <- function(x=20, y=30)
{
}
x + y
# summiert x und y
Mit default
probe()
Funktionen schreiben
Das Ergebnis einer Funktion ist die letzte Zeile ohne =
probe <- function(x=20, y=30)
{
}
etwas = x + y
# summiert x und y
probe()
etwas
f = c(220, 550, 300, 700, 400)
R Befehl für (f-m)/s
In eine Funktion snorm(f) packen – damit sie auf beliebiege Formant-Daten angewendet werden kann…
(f - mean(f))/sd(f)
snorm <- function(f){
(f - mean(f))/sd(f)}
mat = cbind(c(10, 20, 30), c(5, 8, 8))mat [,1] [,2][1,] 10 5[2,] 20 8[3,] 30 8
Durchschnitt Spalte 1:
Durchschnitt Spalte 2:
Durchschnitt beider Spalten gleichzeitig:
apply(mat, 2, mean) [1] 20 7
Bedeutung von
apply(mat, 1, mean) apply(mat, 2, sd)
Durchschnitt der Reihenwerte
Standardabweichung der Spaltenwerte
Wie kann ich unsere snorm() Funktion auf beide Spalten von mat anwenden?
apply(mat, 2,snorm)
mean(mat[,1])
mean(mat[,2])
Normalisierte F1 und F2 Werte zum zeitlichen Mittelpunkt, Sprecher 67?
temp =
fnorm.67 = apply(mid[temp,1:2], 2, snorm)
Normalisierte Werte Sprecher 68
fnorm.68 = apply(mid[!temp,1:2], 2, snorm)
vowlax Segmentlistevowlax.fdat Trackdatei F1-F4vowlax.l Etikettierungen "E" "a" "I" "O"vowlax.spkr Sprecher-Etikettierungen "67" "68"
mid = dcut(vowlax.fdat, .5, prop=T)
mid = mid[,1:2]
Logischer Vektor
Normalisierte Werte, Sprecher 67vowlax.spkr=="67"
Sprecher 67 (links), Sprecherin 68 (rechts) normalisierte F1 x F2 xlim = ylim = c(-2.5, 2.5)
par(mfrow=c(1,2))
eplot(fnorm.67, vowlax.l[temp], dopoints=T, form=T, xlim=xlim, ylim=ylim)
eplot(fnorm.68, vowlax.l[!temp], dopoints=T, form=T, xlim=xlim, ylim=ylim)
E EEEE
EE
EE
EEEE
EE
E
EE
E
E
EE
EEE
EE
E
E
E
EEE EEE
E
E E
E
E
aa
a
a
a
aaa
a
a
aa
a
a
aa
a
a
aa
a a
aa a
a
a
a
a aa
a
a
a
a
aaa
aa aa
a
a
aaa
a
a
a
a
a
a
aa
a
a
aaaaa a
II
I
I
II
II
I
III
III I I
I
I
II I
II
II I
II
II
II
I
I
I
I
II
I
II
II
I
I
II
II
I
II
I
I
III
I
II
I
I
I
III I
I
II
I
I
II
I
I
I
III
I
I
II
O
O
O
OOO
OOO
OO
O
OOO O
2 1 0 -1 -2
21
0-1
-2
F2
F1
EEE
EE E
EE
EEEE
EE
E
EEE
EE
E
EEEEE
EEEE
E
E
EE
EE
EEE
E
Ea
a
aa
aa
a
aa a
a
a a a
a
aa
a
aa
aa
a
aa
a
a
a
a
a
aaa
a
aa
a
a
aa
aa
a
a
a
a
aaaa
a
a
a
aa
a
a
aa
a
a
a
a
II
I
III
II I
IIIII
II
II
I III
II
I
I
II I
I III
I
II II
II
I I
III
II II I
III III
I
III
II II
III
I
II
I
III
II
II II
I
II
II
OO
O OOO
OOO
O
OO
OO OO
2 1 0 -1 -2
21
0-1
-2
F2
F1
Extrinsische Normalisierung (Nearey, 1978)
Normalisierte Formantwerte = Log. (Formantwerte) – k
k ist ein sprechabhängiger Konstant
Normalisierung laut Nearey
1. Sprecherbedingter konstant, k, berechnen
(a) F1 und F2 in Logarithmen umwandeln
(b) Durchschnitt von log. F1 berechnen
(c) Durchschnitt von Log F2 berechnen
k ist der Durchschnitt von (a) und (b)
f1 = c(220, 550, 300, 700, 400)
f2 = c(2000, 1800, 1900, 1500, 600)
logf1 = logf2 =
mlogf1 =
mlogf2 =
k =
log(f1) log(f2)
mean(logf1)
mean(logf2)
mean(c(mlogf1, mlogf2))
Normalisierter F1 ist der Logarithmus davon minus k
normf1 =
Ebenfalls für den normalisierten F2
f1 = c(220, 550, 300, 700, 400)
f2 = c(2000, 1800, 1900, 1500, 600)
log(f1) - k
normf2 = log(f2) - k
Funktion schreiben, nearey(x) um Nearey-Normalisierung auf eine 2-spaltige Matrix, x, (von F1 und F2 Werten) anzuwenden.
> form = cbind(f1, f2)> form f1 f2[1,] 220 2000[2,] 550 1800[3,] 300 1900[4,] 700 1500[5,] 400 600
> nearey(form) f1 f2[1,] -1.23698013 0.9702948[2,] -0.32068940 0.8649343[3,] -0.92682520 0.9190015[4,] -0.07952734 0.6826127[5,] -0.63914313 -0.2336780
nearey <- function(x)
# x ist eine Matrix{# (a) Log-Werte der Matrix
logmat =
# Vektor der Durchschnitte deren Spaltenwerte
logmat.m =
# (b) Sprecherabhängiger konstant
k =
# (a) – (b)
log(x)
apply(logmat, 2, mean)
mean(logmat.m)
logmat – k
}
Abbildung F1 x F2, Nearey-normalisierte Daten, Sprecher 67 (links), Sprecherin 68 (rechts)
ylim = c(-1.5, 0.2)xlim = c(-.2, 1.2)
temp = vowlax.spkr=="67"
n67= nearey(vowlax.fdat.5[temp,1:2])
n68 = nearey(vowlax.fdat.5[!temp,1:2])
eplot(n67, vowlax.l[temp], dopoints=T, form=T, xlim=xlim, ylim=ylim, main="67")eplot(n68, vowlax.l[!temp], dopoints=T, form=T, xlim=xlim, ylim=ylim, main="68")
EEEEE EEE
EEEE
EE
EEE
EE
E
EE
EEE
EE
EEE
EEE E EEE
E E
E
E
a aa
a
aaaa
aa
aaa
a
aa
a
a
aa
a a
aa a
a
a
a
a aa
aa
a
a
aaa
aaaaa
aaaaa
aa
a
a
aa
aa
aa aaaa a
II
I
I
II
II
I
III
I
II I II
I
II I
II
I
I I
I
II
I
III
I
I
I
II
I
II
II
II
II
II
I
II
I
I
III
I
II
I
I
I
III I
I
II
I
I
II
I
I
I
III
I
I
II
OO
O
OOO
OOOO
O
O
OOO O
1.2 1 0.8 0.4 0
0-0
.5-1
-1.5
67
F2
F1
EEE
EE E
EE
EE
EE
EE
E
EEE
EE
E
EEEEE
EEEE
E
E
EE
EE
EEE
E
Ea
a
aa
a a
aaa a
a
a a a
a
aa
a
aaa a
a
aa
a
aa
a
a
aa aa
aa
a
a
aa
aa
aa
a
a
aaaa
aa
a
aa
a
aa
a
a
aa
a
I
II
I
II
I
I I
I
III
III
I
I
IIII
II
I
I
II I
I II
I
I
I
I III
I
II
III
II II I
III III
I
II
II
III
II
I
I
II
I
I
II
II
I
I II
I
II
II
OO
O OO
O
OOO
O
OO
OO OO
1.2 1 0.8 0.4 0
0-0
.5-1
-1.5
68
F2
F1
Recommended