Dynamic Time Warping, l’algoritmo per uniformare i suoni

Ogni ogni frase, ogni parola ma anche ogni singola lettera possono essere pronunciati in maniera diversa da persona a persona. In particolare persone diverse possono impiegare tempi diversi per pronunciare lo stesso fonema. Queste differenze rappresentano un forte ostacolo per i processi di riconoscimento del parlato, non è possibile confrontare direttamente segnali audio.

Una possibile soluzione agli “sfasamenti” è rappresentata dalle tecniche basate sul Dynamic Time Warping. Questo tipo di tecnica tenta di normalizzare la durata dei frame del parlato da riconoscere con quella dei frame memorizzati durante la fase di training, si “dilata” o si “contrae” l’asse dei tempi in modo da far coincidere i picchi di segnale.

Dynamic Time Warping, l'algoritmo per uniformare i suoni

L’algoritmo del Dynamic time warping permette l’allineamento tra due sequenze in modo da eliminare gli sfasamenti dovuti alla soggettività delle persone. Una possibile implementazione del calcolo di una misura di distanza, quando le due sequenze sono stringhe di simboli discreti. d(x, y) è la distanza tra i simboli, e.g. d(x, y) = | x – y | (fonte Wikipedia):

int DTWDistance(char s[1..n], char t[1..m]) {
  declare int DTW[0..n, 0..m]
  declare int i, j, cost

  for i := 1 to m
    DTW[0, i] := infinity
  for i := 1 to n
    DTW[i, 0] := infinity
  DTW[0, 0] := 0

  for i := 1 to n
    for j := 1 to m
      cost:= d(s[i], t[j])
      DTW[i, j] := cost + minimum(DTW[i-1, j ], // insertion
        DTW[i , j-1], // deletion
        DTW[i-1, j-1]) // match

  return DTW[n, m]
}

Photo Credit Wikimedia Commons.

Pubblicato in Audio, Informatica, Sistemi Informativi Taggato con: , , , ,

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

*