Versuch 4: Lösungen

Aufgabe 4.1:

Frage: Welche Bedeutung haben die Achsen in den Bildern 'spectrum' und 'melscale filterbank coefficients' im FeatureSet Manual?

Antwort: Nach rechts läuft die Zeit in Form des Frameindexes, nach oben sind die Koeffizienten der einzelnen Merkmalsvektoren aufgetragen. Da es sich hier um spektrale Merkmale handelt entspricht dies der Frequenz. Im Falle der Melscale-Koeffizienten verläuft diese aber nichtlinear.

Frage: Welche Besonderheiten des Sprachsignals sind im Spektrum, nicht aber bei den Filterbank-Merkmalsvektoren zu erkennen?

Antwort: Die quer verlaufenden dunklen Bereiche stammen von der periodischen Anregung der Stimmbänder, Grundfrequenz (engl. pitch) oder F0 genannt. Durch das Zusammenfassen der Spektralkoeffizienten zu Bändern durch die Melscale-Filterbank werden diese verschmiert und die Formanten bestimmen nun hauptsächlich den Verlauf über die Frequenz.

Frage: Welches der beiden 'Features' eignet sich besser als Eingabe für den Spracherkenner (nennen Sie mindestens 2 Gründe)?

Antwort: Die Grundfrequenz ist ein sehr sprecherabhängiges Merkmal, das kaum zur Erkennung verschiedener Laute beiträgt. Wichtiger ist der grobe, durch die Formanten bestimmte, Verlauf. Dieser ist bei den Melscale-Koeffizienten ausgeprägt. Gleichzeitig ist die Dimensionalität sehr viel kleiner was die Verarbeitungsgeschwindigkeit erhöht.

Aufgabe 4.2:

 

 Das Feature hat insgesamt 80629 Frames. Die detailierte Ausgabe gibt es hier. Skript zum Erzeugen der Datenbasis:

#=======================================================================
#  JANUS-SR   Janus Speech Recognition Toolkit
# -----------------------------------------------------------
#  Author  :  Sebastian Stueker
#  Module  :  makeDB.tcl
#  Date    :  14.08.2006
#
#  Remarks :  Erzeugt Mini Datenbank
#
#=======================================================================

[DBase db] open db.dat db.idx -mode rwc

set FI [open ../steps/data/transcripts r]

while {[gets \$FI line]>-1} {
    set uttID [lindex \$line 0]
    set text [lrange \$line 1 end]
    db add \$uttID "{TEXT \$text} {ADC /home/islpra0/data/recordings/\$uttID}"
}

db close
exit

 Skript zum Zählen der Frames:
#=======================================================================
#  JANUS-SR   Janus Speech Recognition Toolkit
# -----------------------------------------------------------
#  Author  :  Sebastian Stueker
#  Module  :  countPowerFrames.tcl
#  Date    :  14.08.2006
#
#  Remarks :  Zähle die Frames des Power Merkmals
#
#=======================================================================
[DBase db] open db.dat db.idx -mode r
FeatureSet fs

set frameN 0
set uttN [llength [db]]

foreach uttId [db] {
    makeArray uttArr [db get \$uttId]
    fs readADC ADC \$uttArr(ADC) -hm 1024 -bm shorten -v 0
    fs adc2pow POWER ADC 16ms
    puts "\$uttId [fs:POWER configure -frameN]"
    incr frameN [fs:POWER configure -frameN]
}

puts "Total number of utterances: \$uttN"
puts "Average number of frames per utterance: [expr double(\$frameN)/double(\$uttN)]"
puts "Total number of frames: \$frameN"

exit


Aufgabe 4.3:

 

Durschnittlicher Mittelwertsvektor:

6.355965e+00  5.725445e+00  5.617912e+00  4.879478e+00  4.624830e+00  4.455776e+00  4.489425e+00  4.381860e+00  4.428291e+00  4.484589e+00  4.388685e+00  4.372012e+00  4.611276e+00  4.709805e+00  4.708699e+00  4.427597e+00

Skript zum berechnen des Mittelwerts:

 

feature description Datei:

global meanVector

fs readADC ADC \$arg(ADC) -hm 1024 -bm shorten -v 0
fs adc2mel MEL ADC 16ms
fs meansub MEAN MEL -upMean meanVector


Hauptskript:
#=======================================================================
#  JANUS-SR   Janus Speech Recognition Toolkit
# -----------------------------------------------------------
#  Author  :  Sebastian Stueker
#  Module  :  calculateMean.tcl
#  Date    :  14.08.2006
#
#  Remarks :  Berechnet Mittelwertsvektor des MEL Features
#
#=======================================================================

[DBase db] open db.dat db.idx -mode r
[FeatureSet fs] setDesc @featDesc
FVector meanVector 16

set frameN 0
set uttN [llength [db]]

foreach uttId [db] {
    makeArray uttArr [set uttInfo [db get \$uttId]]
    fs eval \$uttInfo
}

puts "Average Mean: [meanVector]"
exit


Aufgabe 4.4:

 

Skript zum Erzeugen des Ergebnisses im Feature RES:

#=======================================================================
#  JANUS-SR   Janus Speech Recognition Toolkit
# -----------------------------------------------------------
#  Author  :  Sebastian Stueker
#  Module  :  beepDetector.tcl
#  Date    :  14.08.2006
#
#  Remarks :  Detektiere 1kHz und 4kHz beeps
#
#=======================================================================

FeatureSet fs
fs readADC beeps /home/islpra0/data/beeps.adc -sr 16 -bm 01
fs spectrum SPEC beeps 10ms
fs normalize NORM SPEC

fs split 1kHz NORM 16 16
fs split 4kHz NORM 64 64

fs thresh 1kHzThresh 1kHz 0 0.5 lower
fs thresh 4kHzThresh 4kHz 0 0.5 lower

fs thresh 4kHzThresh2 4kHzThresh -1 0.5 upper
fs thresh 1kHzThresh2 1kHzThresh 1 0.5 upper

fs add RES 1.0 1kHzThresh2 1.0 4kHzThresh2

exit