Spektrale Analysen in EMU-R:
eine Einführung
Jonathan Harrington
siehe auch
http://www.phonetik.uni-muenchen.de/~jmh/research/emupapers/pasc.pdf S. 166-214
1. Ein digitales Sinusoid 2. Fourier-Analyse
5. Berechnung von Spektra mit dbemu 3. Ein Spektrum
4. Frequenz- und Zeitauflösung
1. Ein digitales Sinusoid
Amplitude
1 0 2 3 4
5 6
7 8 9 10 11
12 13 15 14
0 2 4 6 8 10 13
Time (number of points) -2-1012 crplot()
die Höhe über eine horizontale Linie eines Punktes, der sich in zeit-regelmäßigen Abständen (und daher mit konstanter Geschwindigkeit) im Kreis dreht.
A: die Amplitude (Größe des Kreises)
k: die Anzahl der Schwingungen (Frequenz) p: die Phase (wo beginnt der Punkt?)
N: aus wievielen digitalen Werten besteht der Sinusoid?
Parameter eines digitalen Sinusoids
Amplitude
1 0 2 3 4
5 6
7 8 9
10 11
12 13 14 15
0 2 4 6 8 10 13
Time (number of points)
-2-1012
crplot(A=1.5)
Höhere Amplitude
(Die Amplitude ist im Verhältnis zum Kreis-Radius)
(Eine 16 Punkt digitale Cosinuswelle)
Amplitude
0 8 1 9 2 10
3 11 4 12
5 13 6 14 7 15
0 2 4 6 8 10 13 Time (number of points)
-2-1012
Doppelte Frequenz
crplot(k=2)
k = 2 Schwingungen pro 16 Punkte
Phase
0 radian: der Punkt beginnt ganz oben
eine viertel Schwingung früher: crplot(p=-pi/2)
Amplitude
0 1 3 2 5 4
6 7 8
9
1011 12 1314 15
0 2 4 6 8 10 13 Time (number of points)
-2-1012
radian: der Punkt beginnt ganz unten (= eine halbe Schwingung später)
(Eine 16 Punkt digitale Sinuswelle)
Anzahl der digitalen Punkte
Amplitude
0 21 43 65 87 109
1112
13141516171819313029202821272226232524
0 4 8 13 19 25 31 Time (number of points)
-2-1012
crplot(N=32)
Amplitude
1 0 2
3 4 5
6 7
0 1 2 3 4 5 6 7 Time (number of points)
-2-1012
crplot(N=8)
2. Die Fourier-Analyse
Die Zerlegung eines Signals in eine Reihenfolge von Sinusoiden zunehmender ganzer Frequenz-Intervallen, sodass wenn diese Sinusoiden summiert werden (=
Fourier-Synthese), das Signal genau rekonstruiert wird.
Wenn eine Fourier-Analyse auf ein N-Punkt Signal angewendet wird, dann wird immer das Signal in N Sinusoiden mit Frequenzen k = 0, 1, 2, … N-1
Schwingungen zerlegt.
Beziehung zwischen Signal-Länge und die Anzahl der Sinusoiden
zB wollen wir eine Fourier-Analyse auf dieses 8-Punkt Signal anwenden.
Dann wissen wir schon, dass das Ergebnis davon 8
Sinusoiden sein wird, mit Frequenzen 0, 1, 2, 3, 4, 5, 6, 7 Schwingungen. Die Fourier-Analyse berechnet die
Amplituden und die Phasen davon (und auf eine solche Weise, dass wenn die 8 Sinusoiden summieren, das obige 8-Punkt Signal genau rekonstruiert wird).
Fourier-
Analyse Fourier-
Synthese
Die Faltung
Alle Sinusoiden mit einer Frequenz größer als (N/2) Schwingungen sind Kopien (= werden gefaltet auf) Sinusoiden mit niedrigeren Frequenzen.
0 1 2 3 4
7 6 5
=
=
=
k k
Die Faltung
crplot(k=3, N=16) crplot(k=13, N=16)
Amplitude
0 1
2 3
4 6 5
7
8
9 11 10
12
13 14
15
0 2 4 6 8 11 14 Time (number of points)
-2-1012 Amplitude
0
1
3 2 4
5 6
7 8
9
10 11
12 14 13
15
0 2 4 6 8 11 14 Time (number of points)
-2-1012
verursachen dasselbe Sinusoid…
3. Ein (Amplitude) Spektrum
ist eine Abbildung der Amplitude als Funktion der Frequenz für alle Sinusoiden bis zur und inklusive der Faltung-Frequenz (k = N/2)
daher werden für das 8-Punkt-Signal nach der Fourier- Analyse in einem Spektrum die Amplituden der
Sinusoiden mit Frequenzen 0, 1, 2, 3, 4 (= N/2) Schwingungen abgebildet
Zeitsignal
Fourier-Analyse
8 22
18
0.2
18.5 0 1 2 3 4
05101520
Frequenz (Anzahl der Schwingungen)
Amplitude
Spektrum
Schwingungen in Hertz (Hz) umrechnen
Die Umsetzung der Frequenzachse in Hz ist von der Abtastrate des Signals, fs, abhängig.
1. Frequenz (Hz) = Schwingungen x fs/N zB bei der Fourier-Analyse eines 8-Punkt-Signals
bekommen wir Sinusoiden mit Schwingungen 0, 1, 2, 3, 4 (bis zur Faltung-Frequenz)
Bei fs = 16000 Hz entsprechen diese Schwingungen 0 Hz, 2000 Hz, 4000 Hz, 6000 Hz, 8000 Hz
= 3 x 16000/8
Frequenz- und Zeitauflösung
1. Frequenz (Hz) = Schwingungen x fs/N 2. der Abstand zwischen
Spektralkomponenten = fs/N Hz (wegen 1.)
0 Hz, 2000 Hz, 4000 Hz, 6000 Hz, 8000 Hz
= 3 x 16000/8 wie man hier gesehen hat…
3. die Anzahl der Spektralkomponente bis zur Faltung = N/2 +1
zB fs = 16000 Hz, Zeisignal hat N = 8 Punkte
N/2 + 1 = 5 Spektralkomponente mit einem jeweiligen Frequenzabstand von 16000/8 = 2000 Hz.
4. Daher, je größer N (also je grober die
Zeitauflösung), umso feiner/detaillierter das Spektrum…
2. der Abstand zwischen
Spektralkomponenten = fs/N Hz (wegen 1.)
N = 512
fs = 16000 Hz
N/2 + 1 = 257
Spektralkomponente zwischen 0 und 8 kHz mit einem
Abstand von 16000/512 = 31.25 Hz
N = 1024
N/2 + 1 = 513
Spektralkomponente zwischen 0 und 8 kHz mit einem Abstand von 16000/1024 =15.625 Hz
Frequenz und Zeitauflösung
4. Daher, je größer N (also je grober die Zeitauflösung), umso feiner/detaillierter das Spektrum…
fs = 16000 Hz, N = 512 fs = 16000 Hz, N = 64 Frequenzabstand
= 31.25 Hz Frequenzabstand =
16000/64 = 250 Hz
2000 3000 4000 5000
1020304050
2000 3000 4000 5000
1020304050
Frequenz (Hz)
Intensität (dB)
Zusammenfassung
Dauer in ms eines N-Punkt-Fensters: N/fskHz, wo fskHz die Abtastrate in kHz ist. zB 256 Punkte bei 10 kHz = 25.6 ms.
Von den N-spektralen Werten behalten wir diejenigen bis zur und inkl. der Faltung-Frequenz.
Das sind (N/2) + 1 spektrale Komponente zwischen 0 und fs/2 Hz mit einem Frequenzabstand von fs/N
Bei einer Fourier-Analyse werden N aufeinanderfolge digitale Werte eines Zeitsignals in N spektrale Werte umgewandelt.
Das Algorithmus in der digitalen Sprachverarbeitung um eine Fourier-Analyse anzuwenden ist der DFT oder 'discrete Fourier transform'.
Eine schnellere Form der DFT ist die FFT oder Fast Fourier Transform.
Mit der Anwendung der DFT oder FFT bekommt man genau das gleiche Ergebnis.
Um eine FFT anzuwenden, muss die
Fensterlänge, N, eine Potenz von zwei sein (2, 4, 8, 16, 32, 64…)
DFT/FFT Anwendung in dbemu
DFT/FFT Anwendung in dbemu
Das Ziel: Spektra von [, x] ('ich' vs. 'ach') miteinander vergleichen.
Spektra in dbemu und EMU-R
Wie müssten sich die Frikative voneinander im wesentlichen spektral unterscheiden?
512-Punkt Spektra in der timetable Sprachdatenbank (fs = 16000 Hz) berechnen. Extension .dft. Template-Datei ändern.
Segmentliste aller [, x] Frikative dieser Datenbank
dor =
Label-Vektor
dor.l =
Spektra für die Segmentliste (Spektral-Trackdatei)
dor.dft =
Spektra zum zeitlichen Mittelpunkt (Spektral-Matrix)
dor.dft5 =
emu.query("timetable", "*", "Phonetic= C | x")
label(dor)
emu.track(dor, "dft")
dcut(dor.dft, 0.5, prop=T)
Die Frequenzen, zu denen diese Spektralkomponente vorkommen
Anzahl der Spektralkomponente
ncol(dor.dft) ncol(dor.dft5)
Anzahl der Punkte im Zeitsignal, die Fourier-analysiert wurden[1] 257
trackfreq(dor.dft) trackfreq(dor.dft5)
Die Höchstfrequenz
max(trackfreq(dor.dft))
Daher die Abtastrate
fs =
Hz-Abstand zwischen den Spektralkomponenten
fs/N
ms-Dauer des Fensters, mit der die Spektra berechnet wurden
1000*N/fs
N = 2 * (ncol(dor.dft)-1) [1] 512
2 * max(trackfreq(dor.dft))
[1] 31.25
[1] 32
Abbildungen
Alle Spektra (zum zeitlichen Mittelpunkt)
Dasselbe aber nach Etikettierung kodiert
Mittelwert pro Kategorie (ensemble-averaged spectra) plot(dor.dft5)
plot(dor.dft5, dor.l)
plot(dor.dft5, dor.l, fun=mean, dbnorm=T)
Warum dbnorm?
plot(dor.dft5, dor.l, fun=mean, dbnorm=T)
Die Amplituden-Werte von Spektra sind in Decibel.
Decibel sind aber Logarithmen, und um den
Durchschnitt von Logarithmen zu bekommen, müssen sie zuerst in Anti- Logarithmen (eine Potenz hoch 10) umgerechnet werden.
Diese Umrechnung in Anti-Logarithmen konvertiert die logarithmische Decibel oder Bel Skala in eine lineare Kraft Skala
Die Berechnung (Durchschnitt usw.) erfolgt dann in der Kraft-Skala.
Logarithmische dB-Werte 60 dB 70 dB
lineare Kraft-Werte 10^6 10^7
Berechnungen durchführen
(10^6 + 10^7)/2
= 5500000
Logarithmische dB-Werte 10 * log(5500000, base=10)
[1] 67.40363
(Der Mittelwert von 60 dB und 70 dB = 67.4 dB)
Zugriff auf bestimmte Frequenzen
Spektrale Trackdatei/Matrizen können genau wie
Trackdateien/Matrizen behandelt werden, abgesehen davon, dass sich die Werte nach dem Komma auf die Frequenzen beziehen.
das gleiche zwischen 1000-2000 Hz dor.dft5[,1000:2000]
das gleiche, Segmente 4, 5, 7 Frequenzen 2000-2500 Hz
dor.dft5[c(4,5,7), 2000:2500]
Spektra zum zeitlichen Mittelpunkt dor.dft5
Abbildung, Spektra, pro Kategorie gemittelt, 500 – 5000 Hz
plot(dor.dft5[,500:5000], dor.l, fun=mean, dbnorm=T)