1 / 34

Analyse von Spektra 2

Analyse von Spektra 2. Jonathan Harrington. 1. Wiederholung : Spektra in R einlesen. 2. Einige grundlegende Funktionen. 3. Zugriff auf Spektralwerte. 4. Spektrale-Abbildungen. 5. Spektrale Unterschiede in Plosiven.

kolya
Download Presentation

Analyse von Spektra 2

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Analyse von Spektra 2 Jonathan Harrington 1. Wiederholung: Spektra in R einlesen 2. Einige grundlegende Funktionen 3. Zugriff auf Spektralwerte 4. Spektrale-Abbildungen 5. Spektrale Unterschiede in Plosiven

  2. 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. Das Algorithmus um die Fourier-Analyse anzuwenden ist ein FFT und dafür muss N einer Potenz 2 sein. 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 Zuerst zur Erinnerung… Bei einer Fourier-Analyse werden N aufeinanderfolge digitale Werte eines Zeitsignals in N spektrale Werte umgewandelt.

  3. 1a. Utterance-List der kielread06 Datenbank laden to tkassp

  4. b. FFT Anwendung den Pfad eintragen, wo die spektralen Daten gespeichert werden sollen N = 512 bedeutet eine Frequenzauflösung von 16000/512 = 31.25 Hz (bei einer Abtastrate von 16 kHz). Die Extension, mit der die spektralen Daten gespeichert werden sollen

  5. c. Template-Datei ändern

  6. d. Äußerungen auswählen k67*00* add to list K67MR010 add to list e. Segmentliste speichern zB fric.txt

  7. f.gespeicherte Segmentliste in R einlesen…

  8. fric.l = label(fric) sp = emu.track(fric, "dft") Label-Vektor Spektral-Trackdatei Spektral-Objekte sp5 = dcut(sp, .5, prop=T) Spektral-Matrix der Daten zum 50% Zeitpunkt g. Spektral-Objekte in R einlesen fric = read.emusegs("H:/fric.txt") Segmentliste

  9. ist dies ein Spektral-Objekt? is.spectral() Wieviele Dimensionen? dim() trackfreq() Welche Frequenzen sind vorhanden? 2. Drei grundlegende Funktionen sp Segmentliste Spektral-Trackdatei fric sp5 Spektral-Matrix zum zeitlichen Mittelpunkt fric.l Label-Vektor

  10. is.spectral(sp) dim(sp) dim(sp5) [1] TRUE [1] 9 257 is.spectral(sp5) 9 Segmente 257 Spalten fric.l [1] "x" "C" "C" "x" "x" "C" "C" "C" "C" weil wir einen 512 Punkt FFT angewendet haben Label-Vektor Spektral-Trackdatei fric.l sp Segmentliste fric sp5 Spektral-Matrix zum zeitlichen Mittelpunkt

  11. Label-Vektor Spektral-Trackdatei fric.l sp Segmentliste fric sp5 Spektral-Matrix zum zeitlichen Mittelpunkt Was ist der Frequenzabstand in diesem Fall zwischen den Spektralkomponenten? 16000/512 = 31.25 Hz Mit trackfreq() bekommt man die tatsächlichen Frequenzen: trackfreq(sp5) 0.00 31.25 62.50 93.75 125.00 156.25 187.50 218.75 250.00 …7937.50 7968.75 8000.00

  12. 3. Zugriff auf die Spektralwerte Spektrale Trackdatei/Matrizen können genau wie Trackdateien/Matrizen behandelt werden, abgesehen davon, dass sich die Werte nach dem Komma auf die Frequenzen beziehen.

  13. Label-Vektor Spektral-Trackdatei fric.l sp Segmentliste fric sp5 Spektral-Matrix zum zeitlichen Mittelpunkt zB Spektrale Werte (zum zeitlichen Mittelpunkt) des 4en Segmentes (also alle Frequenzen) das gleiche zwischen 1000-2000 Hz sp5[4,1000:2000] Spektrale Werte, Segmente 4, 5, 7 Frequenzen 2000-2500 Hz sp5[c(4,5,7), 2000:2500] Spektrale Werte aller Segmente 0-500 Hz: sp5[,0:500]

  14. Frequenzen 480 Hz und 2000 Hz Segmente 1 und 3? sp5[c(1,3), c(480, 2000)]

  15. Man kann auch einzelne Spektralwerte bekommen: man bekommt (wie in allen Fällen) die Werte der nächst liegenden Frequenz, zB:

  16. w 1527.5 1727.5 2217.5 887.5 1677.5 747.5 1122.5 1107.5 1927.5 19.39060 18.88820 4.13902 36.24630 27.15270 27.91090 22.86600 16.02600 24.91330 attr(,"class") [1] "numeric" "spectral" attr(,"fs") [1] 500 500 is die nächst liegende Frequenz an 490 trackfreq(sp5)[15:20] [1] 437.50 468.75 500.00 531.25 562.50 593.75 Label-Vektor Spektral-Trackdatei fric.l sp Segmentliste fric sp5 Spektral-Matrix zum zeitlichen Mittelpunkt Spektrale Werte aller Segmente zu 490 Hz w = sp5[,490]

  17. Das sind die Amplituden zu 490 Hz dieser Segmente: fric.l [1] "x" "C" "C" "x" "x" "C" "C" "C" "C" Label-Vektor Spektral-Trackdatei fric.l sp Segmentliste fric sp5 Spektral-Matrix zum zeitlichen Mittelpunkt w 1527.5 1727.5 2217.5 887.5 1677.5 747.5 1122.5 1107.5 1927.5 19.39060 18.88820 4.13902 36.24630 27.15270 27.91090 22.86600 16.02600 24.91330 attr(,"class") [1] "numeric" "spectral" attr(,"fs") [1] 500 w enthält 9 dB Werte= die Amplituden zu dieser Frequenz 490 Hz. Warum 9?

  18. Label-Vektor Spektral-Trackdatei fric.l sp Segmentliste fric sp5 Spektral-Matrix zum zeitlichen Mittelpunkt w 1527.5 1727.5 2217.5 887.5 1677.5 747.5 1122.5 1107.5 1927.5 19.39060 18.88820 4.13902 36.24630 27.15270 27.91090 22.86600 16.02600 24.91330 attr(,"class") [1] "numeric" "spectral" attr(,"fs") [1] 500 Das sind die Zeiten zu denen, die Spektral-Werte vorkommen. (zum zeitlichen Mittelpunkt des jeweiligen Segmentes)

  19. sp Label-Vektor zeitlicher Mittelpunkt des 5en Segmentes Spektral-Trackdatei fric.l Segmentliste sp5 Spektral-Matrix zum zeitlichen Mittelpunkt fric w 1527.5 1727.5 2217.5 887.5 1677.5 747.5 1122.5 1107.5 1927.5 19.39060 18.88820 4.13902 36.24630 27.15270 27.91090 22.86600 16.02600 24.91330 attr(,"class") [1] "numeric" "spectral" attr(,"fs") [1] 500 fric segment list from database: kielread06 query was: Phonetic = C | x labels start end utts 1 x 1493.940 1567.440 K67MR001 2 C 1710.690 1745.130 K67MR001 3 C 2144.190 2283.130 K67MR001 4 x 825.313 947.812 K67MR003 5 x 1656.810 1694.750 K67MR003 6 C 718.000 776.375 K67MR004 7 C 1078.440 1164.940 K67MR004 8 C 1079.810 1136.440 K67MR006 9 C 1875.000 1985.690 K67MR008

  20. 4. Abbildung der Spektra plot() eigentlich plot.spectral() – d.h. plot() erkennt, dass es sich um spektrale Objekte handelt, und setzt dann plot.spectral() ein (ein Beispiel von Object Oriented Programming) daher um Hilfe/Beispiele bei der Anwendung der Abbildungen von Spektra zu bekommen, help(plot.spectral), jedoch ganz einfach plot() bei der Erzeugung von Spektral-Abbildungen verwenden.

  21. Label-Vektor Spektral-Trackdatei fric.l sp Segmentliste fric sp5 Spektral-Matrix zum zeitlichen Mittelpunkt Spektra aller Segmente Nach Etikettierung kodiert plot(sp5) plot(sp5, fric.l) Spektra im Bereich 1000-3000 Hz, + Etikettierung plot(sp5[,1000:3000], fric.l) Spektra der Segmente 3 und 5 Frequenzbereich höher als 3500 Hz nach Farbe kodiert plot(sp5[c(3,5), 4000:8000], fric.l[c(3,5)])

  22. 4b. Durchschnittsspektra (ensemble-averaged spectra) zuerst etwas zu Decibel…

  23. Decibel-Werte 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. Dann werden diese Berechnungen wieder in dB konveriert. Die Amplituden-Werte, die man durch tkassp bekommt 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.

  24. 70 dB 60 dB Logarithmische dB-Werte 10^7 10^6 lineare Kraft-Werte (10^6 + 10^7)/2 Berechnungen durchführen = 5500000 Logarithmische dB-Werte 10 * log(5500000, base=10) [1] 67.40363

  25. Glücklicherweise muss man nicht selbst diese Umrechnungen Decibel  Kraft  Decibel durchführen: dies erfolgt bei Funktionen wie plot() oder fapply() automatisch durch die Setzung des Argumentes power = T

  26. plot(sp5[,1000:1500], fric.l, fun="mean", power=T) plot(sp5[,1000:1500], fric.l) Decibel Frequenz Dieser Wert ist der Durchschnitt aller 'roten' Werten zur selben Frequenz

  27. 5. Analyse von Plosiven

  28. freqint = trackfreq(plos.dft) fs = 2 * max(freqint) N = fs/freqint[2] plos.l Etikettierungen ("b", "d") plos.w Die entsprechenden Wortetikettierungen plos.lv Die Etikettierungen der danach kommenden Vokale plos.asp Vektor der Zeiten, zu denen der Burst vorkommt plos.sam Zeitsignale von "b" "d" plos.dft Spektrale Trackdatei Wie kann man plos.dft benutzten um (a) die Abtastrate (b) die Fensterlänge, mit der die spektralen Daten berechnet worden sind, zu bekommen?

  29. Die [b, d] Burst-Spektra sollen sich dadurch unterscheiden, dass zwischen 500-4000 Hz [d]-Spektra steigen (die Amplitude nimmt mit zunehmender Frequenz zu) während [b]-Spektra fallen. Kann dieser Unterschied in diesen Daten festgestellt werden?

  30. plot(plos.sam[2,], type="l") abline(v=plos.asp[2], col=2) abline(v=plos.asp[2]-8, col=3) abline(v=plos.asp[2]+8, col=3) Hier ist das Zeitsignal fuer den zweiten Segment Der Zeitpunkt, zu dem der Burst vorkommt… Das Spektrum ist über 256 Punkte berechnet worden. Wieviele ms bei fs= 16000 Hz? 16 ms Hier ist das Intervall, worauf der 256-Punkt FFT analysiert worden ist…

  31. plos.l Etikettierungen ("b", "d") plos.w Die entsprechenden Wortetikettierungen plos.lv Die Etikettierungen der danach kommenden Vokale plos.asp Vektor der Zeiten, zu denen der Burst vorkommt plos.sam Zeitsignale von "b" "d" plos.dft Spektrale Trackdatei Wir benötigen die spektralen Werte zum Zeitpunkt vom Burst. p5 = dcut(plos.dft, plos.asp)

  32. Beweise, dass [b] Spektra steigen, [d] fallen (zwischen 500 Hz und 4000 Hz?)

  33. par(mfrow=c(1,2)) plot(p5[,500:4000], plos.l, ylab="Intensitaet (dB)", xlab="Frequenz (Hz)") plot(p5[,500:4000], plos.l, fun="mean", power=T, xlab="Frequenz (Hz)")

More Related