next up previous
Next: Πειράματα κωδικοποίησης Up: mythesis Previous: Κωδικοποίηση φωνής

Subsections

Υλοποίηση της κωδικοποίησης - το σύστημα YARROW

Εισαγωγή

Η υλοποίηση της κωδικοποίησης που παρουσιάσαμε προηγούμενα έγινε επεκτείνοντας το σύστημα φωνής Yarrow. Το Yarrow σύστημα άρχισε να αναπτύσσεται στο S.R.I από το Leonardo Neumeyer το 1997. Σκοπός του project είναι να δημιουργηθεί ένα πλαίσιο από γενικές βιβλιοθήκες (Application Programming Interface - API) σε τομείς όπως ψηφιακή επεξεργασία σήματος, αναγνώριση προτύπων & στατιστική μοντελοποίηση, για χρήση τόσο σε έρευνα όσο και σε γενικότερες εφαρμογές. Η δημιουργία του βασίστηκε στην ανάγκη για την ύπαρξη ενός front-end μηχανισμού επεξεργασίας φωνής που να είναι εύκολα μεταφέρσιμος σε διάφορες πλατφόρμες, εύκολος στη χρήση και να έχει μικρές απαιτήσεις σε πόρους κάτι που οδήγησε στην επιλογή της γλώσσα προγραμματισμού Java (www.java.sun.com) για την υλοποίησή του.

Σε αυτή την ενότητα περιγράφεται η βασική δομή του συστήματος και αναλύεται ο τρόπος επέκτασης του, με σκοπό τη δημιουργία μιας πλατφόρμας που να επιτρέπει την ερευνητική διαδικασία πάνω στο θέμα του διανυσματικού κβαντισμού των παραμέτρων της φωνής. Αρχικά περιγράφεται εκτενώς η αρχιτεκτονική του κώδικα που αναπτύχθηκε για την υποστήριξη διανυσματικού κβαντισμού και παρουσιάζεται η διασύνδεση με το σύστημα αναγνώρισης φωνής Decipher, το οποίο προσαρμόστηκε κατάλληλα για αυτό το σκοπό. Επίσης αναλύεται η χρήση του νέου συστήματος Yarrow για την διεξαγωγή πειραμάτων κωδικοποίησης φωνής. Στόχος είναι να χρησιμοποιηθεί το Yarrow στον πελάτη και το Decipher στον εξυπηρετητή σύμφωνα με το σενάριο πελάτη-εξυπηρετητή που αναφέρθηκε στο εισαγωγικό κεφάλαιο.

Βιβλιοθήκες του αρχικού συστήματος

Οι βιβλιοθήκες (packages) του αρχικού συστήματος Yarrow είναι οι εξής:

Επέκταση του συστήματος για υποστήριξη VQ

Σκοπός

Σκοπός της επέκτασης του συστήματος Yarrow είναι να μπορεί να εφαρμοστεί διανυσματικός κβαντισμός στα παραγόμενα από το front-end features (κάτι το οποίο παρέχεται ήδη από την αρχική μορφή του Yarrow), ώστε να είναι δυνατή η μέγιστη συμπίεση του σήματος της φωνής, εξασφαλίζοντας παράλληλα υψηλή ακουστική ανάλυση. Για την διεξαγωγή των πειραμάτων, θα πρέπει να είναι δυνατή η επιλογή διαφόρων σχημάτων κωδικοποίησης. Από τη μεριά του Yarrow θα πρέπει να παρέχεται η δυνατότητα εκπαίδευσης των codebooks για το train set, καθώς και η χρήση τους για την κβαντοποίηση του test set. Από την άλλη πλευρά, τα κβαντισμένα αρχεία θα δίνονται σαν είσοδος στον αναγνωριστή του Decipher, για την αξιολόγηση του σχήματος κωδικοποίησης με το οποίο γίνονται κάθε φορά τα πειράματα. Η τρόπος επέκτασης του Yarrow για την υλοποίηση του σχήματος κωδικοποίησης αυτής της εργασίας φαίνεται στο Σχήμα  [*] όπου παρουσιάζεται η αρχιτεκτονική του κώδικα, ο τρόπος χρήσης του από τα πειράματα μέσω των scripts που αναπτύχθηκαν καθώς και η διασύνδεση με το αρχικό σύστημα Yarrow.

Figure: Αρχιτεκτονική Yarrow συστήματος Η επέκταση αφορά στην προσθήκη των sri.star.coding packages και των τελικών scripts. Όπως θα δούμε στη συνέχεια το fpc package αποτελεί το συνδετικό κρίκο ανάμεσα στα 2 συστήματα.
\begin{figure}\htmlimage
\centerline{ \includegraphics[scale=0.600]{images/yarrow_images/eps/Yarrow2.eps}}\end{figure}

Αρχιτεκτονική συστήματος και υλοποίηση

Η πλατφόρμα του Yarrow χρησιμοποιήθηκε για την υλοποίηση του σχήματος κωδικοποίησης. Οι 3 παραπάνω βιβλιοθήκες αποτέλεσαν μια πραγματική βάση για την περαιτέρω επέκταση. Οι νέες βιβλιοθήκες που προστέθηκαν έχουν επεκτείνει το όνομα sri.star με το sri.star.coding για να είναι φανερό ότι ανήκουν στην βιβλιοθήκη κωδικοποίησης. Η βιβλιοθήκη αποτελείται από τις βασικές (core) κλάσεις (sri.star.coding.base), τις βοηθητικές (sri.star.coding.utils), τους πελάτες (sri.star.coding.clients.*) $\&$ τις εφαρμογές (sri.star.coding.apps.*). Αναλυτικότερα τα packages που αναπτύχθηκαν είναι τα ακόλουθα :

Βιβλιοθήκη sri.star.coding.base

Αποτελεί πράγματι τη βάση του συστήματος. Περιέχει τις κλάσεις που αποτελούν το συνδετικό κρίκο ανάμεσα στην εκπαίδευση $\&$ τον κβαντισμό. Όπως αναφέρθηκε σε προηγούμενο κεφάλαιο ο συνδετικός αυτός κρίκος δεν είναι άλλος από το codebook. Έτσι, αυτή η βιβλιοθήκη ορίζει και εκπαιδεύει τα codebooks. Οι βασικές κλάσεις είναι :

TrainerInformation
Κλάση υπεύθυνη για τη συλλογή των στατιστικών ιδιοτήτων του υποδιανύσματος στο train set, απαραίτητες για την εκπαίδευση των codebooks

Codebook
Το codebook δεν είναι παρά μια συλλογή από $2^Β$ διανύσματα μήκους L (centroids), αυτά που αντιπροσωπεύουν καλλίτερα με Β bits πληροφορίας το υποδιάνυσμα στο train set. Έτσι αυτή η κλάση εκτός από τον ορισμό, υλοποιεί μεθόδους όπως :
Classifier
Είναι το αντικείμενο που υλοποιεί τον k-means αλγόριθμο για την εκπαίδευση του codebook.

Βιβλιοθήκη πελατών (sri.star.coding.clients.*)

Οι πελάτες είναι κλάσεις που βρίσκονται ένα επίπεδο πάνω από τις βασικές κλάσεις και ένα επίπεδο κάτω από τις εφαρμογές στο abstraction layer του coding package (βλέπε Σχήμα [*]). Με λίγα λόγια υλοποιούν όλες τις εξειδικευμένες λειτουργίες που χρειάζονται οι εφαρμογές.

Πελάτες αρχείων

Το Yarrow σύστημα, στη βασική του μορφή δεν παράγει αρχεία, απλώς κάνει front-end επεξεργασία σε αρχεία κυματομορφών. Παρ' όλα αυτά, καθορίζει κάποιο τύπο αρχείων που όμως δεν το υλοποιεί. Το φορματ καθορίζει ascii αρχεία, τα οποία είναι σε συμπιεσμένη μορφή. Οι δυο επόμενες κατηγορίες υλοποιούν το διάβασμα $\&$ γράψιμο features από/σε αυτό το φορματ. Λέγοντας feature, εννοούμε κβαντισμένα ή όχι features, όπως π.χ. cepstrum, centroid coded ή index coded cepstrum. Έτσι υπάρχει ένα μοναδικό καλά ορισμένο και απλό σχετικά φορματ, για όλα τα features του Yarrow συστήματος.

Το φορματ καθορίζει κάποιο header και τα δεδομένα. Το header δίνει πληροφορία για τον τύπο του feature (integer/float), το όνομα (cepstrum/Single), το μέγεθος, και τον αριθμό των frames. Στο πρώτο παράδειγμα, έχουμε 175 frames από cepstrum. Το Compute Deltas δηλώνει ότι πρέπει να υπολογισθούν οι πρώτες και δεύτερες παράγωγοι, πριν γίνει η αναγνώριση. Παράδειγμα αρχείου με cepstrum φαίνεται στη συνέχεια :

VectorList
Type float
Name cepstrum
VectorSize 13
NumVectors 175
ComputeDeltas true
EndHeader
-600.9399 1.2876966 0.5145594 -2.0349026 22.101751 -5.7347784 -0.022707298 15.5569315 -26.187925 8.510943 1.3709744 -1.8681848 7.1525745
...
$<$ τα υπόλοιπα 174 frames$>$

Στο 2ο παράδειγμα που ακολουθεί, έχουμε 381 frames από Single που έχουν κβαντιστεί-διακριτοποιηθεί σε 9 υποδιανύσματα :

VectorList
Type int
Name Single
VectorSize 9
NumVectors 381
ComputeDeltas false
EndHeader
16 113 52 1 8 18 10 3 2
5 108 48 32 65 48 10 3 2
6 120 16 8 3 20 65 2 33
4 96 16 4 108 36 64 65 33
...
$<$ τα υπόλοιπα 377 $frames>$

Τα αρχεία αυτά έχουν ονόματα με τις εξής καταλήξεις :

Table: Παραγώμενα features και καταλήξεις αντίστοιχων αρχείων
cepstrum .cep
Single .Single
Centroid Coded Cepstrum .ccc
Centroid Coded Single .ccs
Index Coded Cepstrum .icc
Index Coded Single .ics


Οι 2 βιβλιοθήκες που σχετίζονται με το διάβασμα και γράψιμο των αρχείων είναι οι :

Πελάτες front-end

Πρόκειται για το package sri.star.coding.clients.fpc.
feature Produce Client (fpc) κλάσεις, όπως :
CepstrumProducerClient,
SingleProducerClient.
Με άλλα λόγια κλάσεις που παράγουν τα μη-κβαντισμένα features όπως cepstrum και Single. Οι κλάσεις αυτές είναι οι μόνες που χρησιμοποιούν άμεσα το front-end και αποτελούν τον ενδιάμεσο κρίκο ανάμεσα στο front-end & το coding υποσύστημα. Έτσι απομονώνεται το ένα υποσύστημα από το άλλο. Με αυτό το τρόπο όλες οι υπόλοιπες κλάσεις του coding package, δεν χρειάζονται να ξέρουν απολύτως τίποτα για το front-end.

Πελάτες κβαντισμού

Πρόκειται για το package sri.star.coding.clients.qc.
Quantizer Client (qc) κλάσεις, όπως :
QuantizerClient,
Είναι μια abstract κλάση που επεκτείνεται από τις υπόλοιπες του package και υλοποιεί τα ακόλουθα μεταξύ άλλων :
CentroidQuantizerClient, IndexQuantizerClient.
Οι δυο αυτές κλάσεις υλοποιούν τα δυο είδη κβαντισμού, δηλαδή την απεικόνιση του κάθε υποδιανύσματος στο πλησιέστερο centroid του codebook, με έξοδο είτε το ίδιο το centroid (centroid coded), είτε στο δείκτη του centroid (index coded).

Πελάτες εκπαίδευσης

Πρόκειται για το sri.star.coding.clients.tc.
Κλάσεις όπως :
TrainerInfoClient,
Ο TrainerInfoClient συλλέγει τις στατιστικές ιδιότητες του υποδιανύσματος στο train set. Οι πληροφορίες αυτές είναι απαραίτητες για την εκπαίδευση.
TrainerClient,
Οι λειτουργίες του TrainerClient είναι :
IndexTrainerClient.
Λειτουργεί σαν wrapper του TrainerClient επιτρέποντας την επιλογή των διανυσμάτων που θέλουμε να εκπαιδεύσουμε
Τέλος,υπάρχουν αρκετές κλάσεις που επεκτείνουν τον TrainerClient, αυξάνοντας την λειτουργικότητά του.

Υπόλοιποι πελάτες

Για τις υπόλοιπες λειτουργίες υπάρχουν πελάτες όπως αυτοί που ανήκουν στα πακέτα :

Βιβλιοθήκη εφαρμογών (sri.star.coding.apps*)

Είδαμε παραπάνω ότι υπάρχουν πολλά επίπεδα στα οποία είναι οργανωμένος ο κώδικας. Όπως οι πελάτες βρίσκονται ένα επίπεδο πάνω από το base package, παρόμοια το apps package βρίσκεται ένα επίπεδο πάνω από τους πελάτες και οργανώνονται σε αντίστοιχα packages όπως εφαρμογές front-end, κβαντισμού, εκπαίδευσης (βλέπε σχήμα  [*]).

Κρύβοντας όλη την δύσκολη υλοποίηση στους πελάτες, οι εφαρμογές απλά συνδυάζουν ένα ή περισσότερους πελάτες για να υλοποιήσουν μια σχετικά πολύπλοκη διαδικασία, απλά με μερικές γραμμές κώδικα !

package sri.star.coding.apps.trainer; 

import sri.star.coding.clients.trainer.*;
import sri.star.util.*;

/**
 * Produces the desired codebooks for all subVectors
 * 
 * @see sri.star.coding.clients.trainer.IndexTrainerClient  
 * @author  Perakakis Manolis
 * @version coding (1.0)
 */ 
 public class Trainer {
  
 public static void main(String args[]) {
    String config 
    String tmp "";  
    int index;
    
    if(args.length == 2) {
      config = args[0];
      tmp = args[1];   
    }
    else
      ErrorHandler.fatalError(null, 
        "USAGE: java Trainer <config_file> <index> ");
    try {
      index = (new Integer(tmp)).intValue();
      IndexTrainerClient itc = new IndexTrainerClient(config, 
	index);
      itc.produceCodebooks(); 
    }catch (Exception e) { 
      e.printStackTrace();}  
  }
}

Πειράματα VQ με το Yarrow

Μέχρι τώρα εξετάστηκε το Yarrow σε επίπεδο κώδικα. Όμως για να τρέξουν τα πειράματα χρειάζεται συχνά αρκετή προετοιμασία. Έτσι, πέρα από το API, γράφτηκαν τα απαραίτητα scripts τα οποία βρίσκονται ένα επίπεδο πάνω από τις εφαρμογές και απευθύνονται στον χρήστη, σε αντίθεση με το API που απευθύνεται στον developer. Τα πειράματα που θέλει να τρέξει κάποιος για να ελέγξει την επίδοση της κωδικοποίησης για κάποιο σχήμα, βασίζονται σε μια αλληλουχία ενεργειών που περιγράφεται στις 5 επόμενες παραγράφους :

Παραγωγή επιθυμητού feature από αρχεία κυματομορφών

Τόσο για το train όσο $\&$ για το test set. Αυτό γίνεται προκειμένου να αποφεύγεται η χρήση του front-end κάθε φορά που θέλουμε να δοκιμάσουμε ένα νέο σχήμα κωδικοποίησης3.1θα χρησιμοποιήσουμε για το κάθε διάνυσμα). Αντίθετα έχοντας παράγει το επιθυμητό feature (π.χ. Single) τόσο για το test set όσο και για το train set , το μόνο που χρειάζεται να γίνεται κάθε φορά είναι μόνο η λειτουργία του κβαντισμού/εκπαίδευσης και όχι επιπλέον και η λειτουργία της παραγωγής του feature μέσω του front-end μια διαδικασία σχετικά χρονοβόρα. Με αυτό το τρόπo σε λιγότερο χρόνο μπορούμε να κάνουμε περισσότερα πειράματα. Το επιθυμητό feature μπορεί να είναι cepstrum ή Single. Το script που κάνει τα παραπάνω είναι το go.produce.Single για το Single feature και το go.produce.cepstrum για το cepstrum. Απαιτεί configuration αρχείο της μορφής :

input_files  in.wavs
output_files  out.cepstrum


δηλαδή απλά περιέχει τις λίστες με τα αρχεία κυματομορφών και τα παραγώμενα αρχεία.

Προετοιμασία εκπαίδευσης

Και αυτό το βήμα αρκεί να γίνει μια φορά. Εδώ χρειάζεται να παραχθούν οι στατιστικές ιδιότητες του feature στο train set. Αφού τρέξει το script θα παραχθεί το καθορισμένο αρχείο στατιστικών ιδιοτήτων το οποίο θα διαβαστεί αργότερα από τον εκπαιδευτή. Το script για cepstrum feature είναι το go.InitCepstrumTrainer, ενώ για το Single feature είναι το go.InitSingle Trainer.

Διαδικασία εκπαίδευσης

Για κάθε σχήμα εκπαίδευσης που θέλουμε να δοκιμάσουμε, πρέπει να τρέξουμε τόσους trainers, όσος και ο αριθμός των υποδιανυσμάτων, παράγοντας τα αντίστοιχα codebooks.

Αφού καθοριστούν τα υποδιανύσματα, θα πρέπει να καθοριστεί και το μέγεθος του codebook, δηλαδή ο αριθμός των centroids που περιέχει το codebook. Αν για παράδειγμα χρειάζονται 64 centroids, θα γραφτούν για αυτό το υποδιάνυσμα τα codebooks με 1 έως 6 bits, έτσι ώστε αργότερα στο κβαντισμό να έχουμε διαθέσιμα όλα τα δυνατά codebooks και να μη ξαναχρειαστεί να παράγουμε το codebook με π.χ. 16 centroids αν αυτά χρειαστούν.

Η ονοματολογία των codebooks που γράφονται είναι η εξής :
$<codebook.id.numberOfBits>$, όπου id είναι το id του υποδιανύσματος όπως καθορίζεται στο Coding αρχείο. Έτσι για παράδειγμα, εάν πρόκειται να παραχθούν codebooks με 6 bits για το 3ο υποδιάνυσμα, τα αρχεία που θα παραχθούν θα είναι τα:

codebook.3.1
codebook.3.2
codebook.3.3
codebook.3.4
codebook.3.5
codebook.3.6
Το Coding αρχείο είναι αυτό που καθορίζει το σχήμα εκπαίδευσης και έχει την εξής μορφή :

2 1 2 3
2 3 4 3
3 5 6 7 3
3 8 9 10 3
3 11 12 13 3
το φορματ είναι : $<$μέγεθος υποδιανύσματος$>$ $<$ στοιχεία του feature διανύσματος που το αποτελούν$>$ $<$αριθμός $bits >$ . Η γραμμή καθορίζει και το id του υποδιανύσματος. Έτσι π.χ. η γραμμή $<$ 3 8 9 10 3 $>$ δηλώνει ότι το υποδιάνυσμα 4 αποτελείται από τα εξής 3 στοιχεία του feature διανύσματος : 8 9 10, και το codebook που θα παραχθεί θα είναι 3 bits, δηλαδή θα περιέχει 8 centroids.

Εκτός από το παραπάνω αρχείο απαιτείται και κάποιο configuration αρχείο της μορφής :

feature_type  cepstrum
input_files  trainerFiles
trainer_info_file  ../../InitTrainer/ti.cepstrum
coding_configuration  Coding
codebook_path  codebooks/cepstrum/
e  0.01
repetitions  4
total_number_of_codebooks  5


Το feature_type καθορίζει τι είδους feature έχουμε(Single,cepstrum).
Το input_files είναι η λίστα με τα αρχεία του train set.
Το trainer_info_file είναι το αρχείο με τις στατιστικές ιδιότητες που αναφέρθηκε παραπάνω.
Το coding_configuration είναι το παραπάνω Coding αρχείο.
Το codebook_path καθορίζει που θα γραφτούν τα codebooks.
Το $e$ είναι μια σταθερά που καθορίζει πόσο θα διαφέρουν τα 2 νέα centroids μετά το splitting του αρχικού.
Το repetitions είναι ο αριθμός επαναλήψεων στον αλγόριθμο εκπαίδευσης.
Το total_number_of_codebooks είναι ο συνολικός αριθμός των υποδιανυσμάτων.

Τα scripts εκπαίδευσης είναι τα go.SingleTrainer για Single features και το go.CepstrumTrainer για cepstrum features.

Διαδικασία κβαντισμού

Αφού παράγουμε τα codebooks σύμφωνα με τη παραπάνω διαδικασία, είμαστε έτοιμοι να προχωρήσουμε στο επόμενο βήμα του κβαντισμού. Ο κβαντιστής θα πρέπει να φορτώσει τα κατάλληλα codebooks. Αυτό καθορίζεται σε configuration αρχείο (καθορίζει το σχήμα κβαντισμού), που έχει τη μορφή :

input_files  in.cepstrums
output_files  out.coded.cepstrums
codebook_path  ../../trainer/codebooks/cepstrum/
number_of_codebooks  5
codebook1  3
codebook2  4
codebook3  5
codebook4  4
codebook5  4


Το input_files είναι η λίστα με τα αρχεία που θα κβαντιστούν (αυτά που φτιάξαμε στο 1ο βήμα)
Το output_files είναι η λίστα με τα ονόματα των κβαντισμένων αρχείων που θα παραχθούν
Το codebook_path είναι η τοποθεσία απ'όπου θα φορτωθούν τα codebooks

Οι επόμενες 5 γραμμές καθορίζουν τα codebooks που θα χρησιμοποιηθούν. Αυτά είναι με βάση το φορματ που καθορίστηκε παραπάνω τα :

codebook.1.3
codebook.2.4
codebook.3.5
codebook.4.4
codebook.5.4


Το script του κβαντισμού είναι το go.Quantizer

Έλεγχος με Αναγνώριση

Τα αρχεία που παράγονται από τον κβαντισμό δίνονται σαν είσοδος στον αναγνωριστή για να ελέγξουμε την επίδοση του σχήματος κωδικοποίησης που χρησιμοποιήσαμε. Συνήθως φροντίζουμε να παράγουμε codebooks με περισσότερα bits, απ'όσα συνήθως πιστεύουμε ότι ίσως είναι αρκετά. Με αυτό το τρόπο εξασφαλίζουμε ότι η επίδοση της αναγνώρισης θα είναι σε υψηλά επίπεδα. Έχοντας εξασφαλίσει το παραπάνω, πρέπει να αφαιρέσουμε όση πλεονάζουσα πληροφορία υπάρχει, χωρίς όμως να επιτρέπουμε μείωση της επίδοσης του αναγνωριστή. Αυτός άλλωστε είναι και ο στόχος μας. Για να αφαιρέσουμε τη πλεονάζουσα πληροφορία επιλέγουμε codebooks με λιγότερα bits. Έτσι για κάθε σχήμα κωδικοποίησης (σχήμα εκπαίδευσης + σχήμα κβαντισμού), εκτελούμε τόσους κβαντισμούς και αναγνωρίσεις όσους χρειάζονται για να επιτύχουμε το στόχο που τέθηκε παραπάνω.

Κάποια σχήματα κωδικοποίησης δίνουν μη ικανοποιητικά αποτελέσματα. Αυτό που πρέπει να γίνει τότε, είναι να καθοριστεί ένα νέο σχήμα κωδικοποίησης και να επαναληφθεί η διαδικασία κβαντισμού και αναγνώρισης για αυτό το σχήμα. Αν χρειαστεί να γίνουν πειράματα σε άλλα train/test sets, θα πρέπει να επαναληφθούν τα 2 πρώτα βήματα.

Αναγνώριση με το Decipher

Το σύστημα αναγνώρισης που χρησιμοποιήθηκε είναι αυτό του Decipher. Προκειμένου να γίνουν τα πειράματα έγιναν αλλαγές για να υποστηρίζουν τα νέα κβαντισμένα features που δημιουργήθηκαν με το Yarrow. Επίσης αφού όλα τα αρχεία που παράγονται με το Yarrow έχουν καθορισμένο φορματ, θα πρέπει το Decipher να μπορεί να τα διαβάσει και να τα αποκωδικοποιήσει. Επιπρόσθετα, στην περίπτωση που χρησιμοποιείται index coded κβαντισμός, θα πρέπει να γίνει διακριτοποίηση των μιγμάτων των κατανομών εξόδου των ΗΜΜ μοντέλων. Σε αυτή τη περίπτωση, για κάθε σχήμα κωδικοποίησης χρειάζεται να ξαναγίνει η διακριτοποίηση των μειγμάτων έτσι ώστε να υπάρχει πάντα συνέπεια ανάμεσα στην είσοδο του συστήματος (features) και τα μοντέλα που χρησιμοποιούνται. Η διακριτοποίηση έγινε σε άλλη διπλωματική εργασία [#!Tsak!#], ενώ στη παρούσα έγινε το απαραίτητο interface με το Yarrow. Για να υποστηρίζονται όλα τα παραπάνω, έγιναν οι απαραίτητες αλλαγές στην front-end βιβλιοθήκη του Decipher. Αυτές περιλαμβάνουν τα εξής :

Συμπεράσματα

Σε αυτή την ενότητα παρουσιάστηκε η δουλειά που έγινε πάνω στο σύστημα Yarrow, τόσο σε επίπεδο κώδικα, όσο και πειραμάτων, καθώς και το interface με το σύστημα του Decipher. Δημιουργήθηκε τελικά μια πλατφόρμα που επιτρέπει την ερευνητική διαδικασία πάνω στο θέμα του Διανυσματικού Κβαντισμού των παραμέτρων της φωνής.
next up previous
Next: Πειράματα κωδικοποίησης Up: mythesis Previous: Κωδικοποίηση φωνής
root 2001-02-24