# Short-time Fourier transform

De short-time Fourier transform, kortweg STFT, ontstaat door een vensterfunctie stapsgewijs over een signaal te laten glijden, en telkens de gewone fouriertransformatie te berekenen van het stuk van het signaal dat door de vensterfunctie wordt geselecteerd. Door de resultaten van de opeenvolgende transformaties achter elkaar te plaatsen verkrijgt men een beeld waarin te zien is hoe het fourierspectrum in de tijd varieert door het signaal. Het is dus een methode om de informatie van een signaal simultaan in de tijd en in de frequentie voor te stellen. De nauwkeurigheden (resolutie in de tijd en resolutie in frequentie) waarmee dit gebeurt zijn echter aan elkaar gekoppeld: indien de ene resolutie verbeterd wordt zal de andere evenredig minder goed worden. De bepalende factor hierbij is de lengte (in de tijd) van de gebruikte vensterfunctie.

## De short-time Fourier transform
### De continue STFT

In het continue geval wordt het te transformeren signaal lokaal vermenigvuldigd met een vensterfunctie. Dit is een functie die enkel op een eindig interval verschillend is van nul, en dus een kort stuk uit het signaal knipt. Dit verklaart de benaming short-time Fourier transform. De vensterfuncties hebben, op het rechthoekig venster na, ook de eigenschap een klokvorm te hebben, waardoor ze aan de uiteinden naar nul gaan. Op die manier worden discontinuïteiten aan de twee uiteinden vermeden, hetgeen belangrijke voordelen heeft. Meer hierover is te vinden in het artikel over vensterfuncties. De vensterfunctie wordt dan steeds over een zekere afstand opgeschoven, en telkens wordt een fouriertransformatie berekend. Indien de gebruikte vensterfunctie aan de uiteinden (quasi) naar nul gaat is het nodig de opeenvolgende posities van de vensterfuncties te laten overlappen, doorgaans met vijftig procent. Anders zouden belangrijke details die toevallig aan een uiteinde van de vensterfunctie liggen niet, of niet voldoende, in rekening gebracht worden. De opeenvolgende fouriertransformaties bevatten dus elk op zich de frequentie-inhoud van een stuk van het signaal, steeds gedurende een volgende tijdspanne. De informatie wordt zowel in de tijd als in de frequentie geordend, hetgeen een vereiste is indien een signaal niet stationair is, dus indien de kenmerken van het signaal tijdens de meting veranderen in functie van de tijd. Dit is bijvoorbeeld het geval bij spraaksignalen.
De wiskundige beschrijving van de STFT gebeurt door de uitdrukking;
    $\mathbf {STFT} \left\{x(t)\right\}\equiv X(\tau ,\omega )=\int _{-\infty }^{\infty }x(t)w(t-\tau )e^{-j\omega t}\,\mathrm {d} t$
Hierbij is w(t) de vensterfunctie en x(t) het te transformeren signaal. In feite is X(τ,ω) niets anders dan de klassieke fouriertransformatie van het product van het signaal x(t) en de vensterfunctie w(t-τ). Het is dus een complexe functie van een tijdsvariabele τ en van de frequentie ω. De absolute waarde geeft de amplitude van de frequentie ω op het tijdstip τ en de complexe hoek de fase.

### De discrete STFT

Dit is het discrete (digitale) equivalent van de bovenstaande continue (analoge) STFT. Zowel het te transformeren signaal x[n] als de vensterfunctie w[n] zijn nu discreet, beiden met dezelfde bemonsteringsfrequentie:
    $f_{s}=1/T_{s}$.
Hierbij is $T_{s}$ de tijdstap tussen twee opeenvolgende samples van het discrete signaal. Indien de lengte van de vensterfunctie N samples bevat, is de totale tijdspanne van het venster en dus ook van de fouriertransformatie dus gelijk aan:
    $T=N.T_{s}=N/f_{s}$
De discrete short-time Fourier transform is dan van de gedaante:
    $\mathbf {STFT} \left\{x[n]\right\}\equiv X(m,k)=\sum _{n=-\infty }^{\infty }x[n]w[n-m]e^{-j2\pi kn/N}$
Waarbij:
* x[n] het discrete signaal is,
* w[n] de discrete vensterfunctie is. Deze is niet nul in een interval [0..N]
* de index m de positie van de vensterfunctie bepaalt. Doorgaans neemt m de waarden 0, N/2, N, 3N/2 ... aan zodat de opeenvolgende posities van de gebruikte vensterfunctie elkaar met 50% overlappen. Op die manier selecteren de opeenvolgende posities de delen [0..N], [N/2..3N/2], [N..2N]... van het totale signaal.
* de index k verwijst naar de discrete frequentie $k\omega _{o}$ waarbij $\omega _{o}$ de resolutie is van de gebruikte fouriertransformatie. Deze resolutie is
    $\omega _{o}=2\pi /T$
Voorbeeld: Stel dat een signaal x[n] een bemonsteringsfrequentie heeft van 8 kHz. Dit betekent dus dat er per seconde 8000 samples x[n] beschikbaar zijn, die elk $T_{s}=0,000125$ seconde uit elkaar liggen. Stel vervolgens dat een venster functie gebruikt wordt die 2000 samples omvat. De reële tijdsduur van de vensterfunctie is dus 0,25 seconde. Omdat dit dus ook de tijdspanne is van de fouriertransformatie zal deze een resolutie hebben van $f_{o}=1/0,25\mathrm {s} =4\mathrm {Hz}$, en dus $\omega _{o}=8\pi$ radialen per seconde. De tijdresolutie bedraagt dus 0,25 seconde. Dat is de nauwkeurigheid waarmee een kortstondig fenomeen in het signaal in de tijd kan gelokaliseerd worden. Indien de posities van de vensterfunctie elkaar met 50% overlappen zal m dus de waarden 0, 1000, 2000, 3000... 6000 aannemen.

## De koppeling van de tijdresolutie en de frequentieresolutie

Deze koppeling is van groot belang en leidt tot een nadeel van de STFT. In bovenstaand voorbeeld was de resolutie in frequentie 4 Hz. Dit betekent concreet dat de STFT informatie geeft betreffende de frequenties 0 Hz, 4 Hz, 8 Hz, 12 Hz enz. en dit om de 0,25 seconde, de tijdresolutie. Stel nu dat men de frequentieresolutie wil verbeteren tot 2 Hz. De frequentieresolutie van een fouriertransformatie is één gedeeld door de tijdsduur van het getransformeerde signaal. Een frequentieresolutie van 2 Hz vereist in bovenstaand voorbeeld dat men de lengte van de vensterfunctie verdubbelt tot 4000 samples. Het gevolg hiervan is dus wel dat de tijdsresolutie met een factor twee slechter wordt, en groeit tot 0,5 seconde. Dit is in het algemeen zo voor de STFT: de ene resolutie is omgekeerd evenredig met de andere. Een verbetering van de ene gaat steeds ten koste met een precies even grote verslechtering van de andere. Het probleem met de STFT is dat de twee resoluties zijn niet alleen aan elkaar gekoppeld, maar zijn ook beiden constant over de twee assen. Indien een goede frequentieresolutie (dus de resolutie is een klein getal) nodig is op lage frequentie zal men dezelfde goede op hoge frequentie terugvinden. Daarentegen zal, als gevolg van de goede frequentieresolutie een slechte tijdresolutie ontstaan ten gevolge van de koppeling. Een slechtere tijdresolutie is wellicht minder een probleem op lage frequentie, omdat laagfrequente gebeurtenissen per definitie ook trager verlopen. Maar op hoge frequentie kan een betere tijdresolutie wel nodig zijn. Beide resoluties zijn echter in gans het tijd-frequentiegebied constant. De wavelettransformatie bezit ook de koppeling van beide resoluties in de zin dat het product van beide overal dezelfde constant is. Het voordeel is echter dat op lage frequentie een zeer goede frequentieresolutie wordt gebruikt (en dus een slechte rijdresolutie), en dat die geleidelijk naar hogere frequenties wordt ingeruild tegen een betere tijdresolutie. De frequentieresolutie van de wavelettransformatie is niet constant over de frequentieas, maar evenredig met de frequentie, zodat overal een relatief even goede frequentieresolutie wordt bekomen. Op hoge frequentie wordt dan ook een betere tijdresolutie bekomen, hetgeen bijvoorbeeld van belang is om impactsignalen correct te kunnen lokaliseren in de tijd.

## Voorbeeld

Het voorbeeld bevat een signaal van 8192 samples, bemonsterd aan 2048 Hz, dus 2048 samples per seconde. Het signaal heeft bijgevolg een totale tijdsduur van 4 seconden en is een samenstelling van vijf componenten:
* een sinus van 420 Hz, en een sinus van 440, gedurende de volledige tijdsduur van het signaal
* een sinus van 700 Hz, tussen t = 1,46 s en 2,44 s
* een Diracpuls op t = 0,59 s
* een sweepsinus van 200 Hz bij het begin van het signaal tot 700 Hz op het einde. Een sweepsinus is een sinus waarvan de frequentie in de loop van de tijd verandert.
De STFT werd bekomen door een Hanningvenster van 0,128 seconde over het signaal te laten glijden, met een overlap van 50%. De frequentieresolutie is dus 1/0,128 s= 7,8125 Hz, de tijdresolutie is 0,128 seconde.
Hoewel de resolutie kleiner is dan het verschil tussen de twee vaste sinussen zijn ze toch niet van elkaar te onderscheiden wegens de leakage van het gebruikte Hanningvenster. De sweepsinus verloopt trapsgewijs door het steeds opschuivende venster. De tijdelijke sinus van 700 Hz is duidelijk zichtbaar. Bij de start en het einde van deze sinus treden telkens frequenties op verschillend van 700 Hz. Dit komt doordat in het eerste venster dat de sinus bevat, de sinus niet over de volledige lengte van het venster loopt. Het begin van de sinus valt immers niet samen met de rand van een positie van het venster Hetzelfde gebeurt bij het laatste venster: ook dat bevat de sinus van 700 Hz slechts in een deel van het venster. De fouriertransformatie moet dus in deze gevallen niet alleen de sinus reproduceren, maar ook rekening houden met het feit dat de sinus in een deel van het venster afwezig is. De Diracpuls op 0,59 seconde is ook zichtbaar in twee vensters, aangezien de opeenvolgende vensters elkaar met 50% overlappen. De exacte positie is dus moeilijk te kennen, want dit zou een kort tijdvenster vereisen waardoor de frequentieresolutie evenredig zou toenemen. De wavelettransformatie kan dit probleem wel oplossen omdat ze op lage frequentie een goede frequentieresolutie biedt, en op hoge frequentie (waar de Diracpuls nog steeds zichtbaar is) een goede tijdresolutie.