28
Formant-Analysen von Vokalen Ellipse-Darstellung ungespannter Vokale Ausreißer identifizieren Sprecher-Normalisierung Im Original von Jonathan Harrington

Formant-Analysen von Vokalen Ellipse-Darstellung ungespannter Vokale Ausreißer identifizieren Sprecher-Normalisierung Im Original von Jonathan Harrington

Embed Size (px)

Citation preview

Page 1: Formant-Analysen von Vokalen Ellipse-Darstellung ungespannter Vokale Ausreißer identifizieren Sprecher-Normalisierung Im Original von Jonathan Harrington

Formant-Analysen von Vokalen

Ellipse-Darstellung ungespannter Vokale

Ausreißer identifizieren

Sprecher-Normalisierung

Im Original von Jonathan Harrington

Page 2: 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)

Page 3: Formant-Analysen von Vokalen Ellipse-Darstellung ungespannter Vokale Ausreißer identifizieren Sprecher-Normalisierung Im Original von Jonathan Harrington

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]

Page 4: Formant-Analysen von Vokalen Ellipse-Darstellung ungespannter Vokale Ausreißer identifizieren Sprecher-Normalisierung Im Original von Jonathan Harrington

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]

Page 5: Formant-Analysen von Vokalen Ellipse-Darstellung ungespannter Vokale Ausreißer identifizieren Sprecher-Normalisierung Im Original von Jonathan Harrington

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

Page 6: Formant-Analysen von Vokalen Ellipse-Darstellung ungespannter Vokale Ausreißer identifizieren Sprecher-Normalisierung Im Original von Jonathan Harrington

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()

Page 7: Formant-Analysen von Vokalen Ellipse-Darstellung ungespannter Vokale Ausreißer identifizieren Sprecher-Normalisierung Im Original von Jonathan Harrington

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)

Page 8: Formant-Analysen von Vokalen Ellipse-Darstellung ungespannter Vokale Ausreißer identifizieren Sprecher-Normalisierung Im Original von Jonathan Harrington

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)

Page 9: Formant-Analysen von Vokalen Ellipse-Darstellung ungespannter Vokale Ausreißer identifizieren Sprecher-Normalisierung Im Original von Jonathan Harrington

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"

Page 10: Formant-Analysen von Vokalen Ellipse-Darstellung ungespannter Vokale Ausreißer identifizieren Sprecher-Normalisierung Im Original von Jonathan Harrington

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.

Page 11: Formant-Analysen von Vokalen Ellipse-Darstellung ungespannter Vokale Ausreißer identifizieren Sprecher-Normalisierung Im Original von Jonathan Harrington

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

Page 12: Formant-Analysen von Vokalen Ellipse-Darstellung ungespannter Vokale Ausreißer identifizieren Sprecher-Normalisierung Im Original von Jonathan Harrington

Vokalnormalisierung

wie wird derselbe phonetische Vokal trotz dieser sprecherbedingten Unterschiede wahrgenommen?

Wie können sprecherbedingte Merkmale im akustischen Signal entfernt werden?

Page 13: Formant-Analysen von Vokalen Ellipse-Darstellung ungespannter Vokale Ausreißer identifizieren Sprecher-Normalisierung Im Original von Jonathan Harrington

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

Page 14: Formant-Analysen von Vokalen Ellipse-Darstellung ungespannter Vokale Ausreißer identifizieren Sprecher-Normalisierung Im Original von Jonathan Harrington

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)

Page 15: Formant-Analysen von Vokalen Ellipse-Darstellung ungespannter Vokale Ausreißer identifizieren Sprecher-Normalisierung Im Original von Jonathan Harrington

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)

Page 16: Formant-Analysen von Vokalen Ellipse-Darstellung ungespannter Vokale Ausreißer identifizieren Sprecher-Normalisierung Im Original von Jonathan Harrington

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…

Page 17: Formant-Analysen von Vokalen Ellipse-Darstellung ungespannter Vokale Ausreißer identifizieren Sprecher-Normalisierung Im Original von Jonathan Harrington

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()

Page 18: Formant-Analysen von Vokalen Ellipse-Darstellung ungespannter Vokale Ausreißer identifizieren Sprecher-Normalisierung Im Original von Jonathan Harrington

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

Page 19: Formant-Analysen von Vokalen Ellipse-Darstellung ungespannter Vokale Ausreißer identifizieren Sprecher-Normalisierung Im Original von Jonathan Harrington

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)}

Page 20: Formant-Analysen von Vokalen Ellipse-Darstellung ungespannter Vokale Ausreißer identifizieren Sprecher-Normalisierung Im Original von Jonathan Harrington

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])

Page 21: Formant-Analysen von Vokalen Ellipse-Darstellung ungespannter Vokale Ausreißer identifizieren Sprecher-Normalisierung Im Original von Jonathan Harrington

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"

Page 22: Formant-Analysen von Vokalen Ellipse-Darstellung ungespannter Vokale Ausreißer identifizieren Sprecher-Normalisierung Im Original von Jonathan Harrington

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

Page 23: Formant-Analysen von Vokalen Ellipse-Darstellung ungespannter Vokale Ausreißer identifizieren Sprecher-Normalisierung Im Original von Jonathan Harrington

Extrinsische Normalisierung (Nearey, 1978)

Normalisierte Formantwerte = Log. (Formantwerte) – k

k ist ein sprechabhängiger Konstant

Page 24: Formant-Analysen von Vokalen Ellipse-Darstellung ungespannter Vokale Ausreißer identifizieren Sprecher-Normalisierung Im Original von Jonathan Harrington

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))

Page 25: Formant-Analysen von Vokalen Ellipse-Darstellung ungespannter Vokale Ausreißer identifizieren Sprecher-Normalisierung Im Original von Jonathan Harrington

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

Page 26: Formant-Analysen von Vokalen Ellipse-Darstellung ungespannter Vokale Ausreißer identifizieren Sprecher-Normalisierung Im Original von Jonathan Harrington

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

Page 27: Formant-Analysen von Vokalen Ellipse-Darstellung ungespannter Vokale Ausreißer identifizieren Sprecher-Normalisierung Im Original von Jonathan Harrington

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

}

Page 28: Formant-Analysen von Vokalen Ellipse-Darstellung ungespannter Vokale Ausreißer identifizieren Sprecher-Normalisierung Im Original von Jonathan Harrington

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