Algorytmy stosuje się dokładnie takie same, jak do zmiany rozmiaru grafiki
na osi X czas, czyli kolejne transformaty
na osi Y częstotliwość
kolor to moc poszczególnych prążków
widmo1.gif - to powiedzmy efekt przepuszczenia przez fouriera naszej spróbkowanej komendy
no i zakładamy, że była ona dłuższa od wzorca (widmo2.gif), wystarczy teraz odpowiednio "zagęścić" kolejne transformaty, jeżeli komenda zostanie wypowiedziana zbyt szybko, to transformaty "rozciągamy". Najlepiej zastosować w obu przypadkach jakąś choćby najprostszą interpolację (np. liniową) przy rozciąganiu i coś, co przypomina bilinear filtering, tylko, że odwrócony i tylko w jednym wymiarze przy zagęszczaniu (w sumie to ten niby-bilinear filtering można stosować zarówno do rozciągania, jak i skracania).
W praktyce można to zrealizować tak:
Założenie - częstotliwość próbkowania 6.4kHz
- Z mikrofonu mamy powiedzmy 2048 próbek (co daje nam 0.32sekundy)
- wykonujemy na nich 32 transformaty fouriera, z każdej dostajemy po 32 prążki, każdemu z wyników transformaty odpowiada (32*2)/6400=0.01s spróbkowanego sygnału.
- układamy wszystko w macierz - każda kolumna to wynik jednej transformaty (jak widać na załączonych obrazkach).
Zaczynamy sprawdzać wzorce.
- Wzorzec pierwszy trwa powiedzmy 1.3s, przeliczamy, z ilu transformat składa się wzorzec 1.3*6400/(32*2)=130 transformat.
- Bierzemy kolejne wiersze macierzy, z każdego z nich mamy sygnał zawierający tyle próbek, ile transformat (czyli u nas 32).
- Teraz bawimy się w resampling. Z pomocą przychodzi nam interpolacja. Tworzymy nowy bufor o długości takiej jak wzorzec (130) i za pomocą interpolacji "rozciągamy" nasze 32 próbki na 130 próbek, albo, jak kto woli wykonyjemy resampling z 6.4kHz na 6400*130/32=26kHz.
- W ten sam sposób postępujemy ze wszystkimi wierszami macierzy i otrzymujemy macierz o 32 wierszach i 130kolumnach.
- Liczymy korelację otrzymanej macierzy ze wzorcem.
- W ten sam sposób postępujemy ze wszystkimi wzorcami i jako rozpoznany wybieramy ten o największym współczynniku korelacji.
- Jeżeli współczynnik korelacji będzie miał niską wartość, powiedzmy<0.6 (aczkolwiek nie wiem, czy to dobry przykład, trzeba by określić eksperymentalnie), to komendę kalsyfikujemy jako nieznaną i odrzucamy.
Gdybyśmy spróbowali rozciągnąć lub skrócić dopiero co pobraną próbkę (przed transformatą fouriera), to w efekcie zmieni się także zarejestrowana częstotliwość i otrzymamy błędne wyniki porównania (większość zostanie odrzucona). Wykonując normalizację długości po transformacie Fouriera wszystkie częstotliwości mamy zachowane.
W sumie, to normalizacja długości pożera dość sporo mocy obliczeniowej, a jej zastosowanie ogranicza się w zasadzie do możliwości wydawania poleceń na ciężkim kacu

W praktyce niewielkie różnice w szybkości wypowiadanej komendy (rzędu nawet 20%) nie mają znaczącego wpływu na wynik rozpoznania, a i mówienie w tempie, w jakim zostały zarejestrowane wzorce nie powinno sprawiać większych trudności.