Short-time Fourier transform: verschil tussen versies

64 bytes verwijderd ,  10 jaar geleden
geen bewerkingssamenvatting
k (ErikvanB heeft pagina Short-time Fouriertransformatie naar Short-time Fourier transform hernoemd: Voorlopig zo conform Fast Fourier transform. Kleine f is verplicht (leidraad), short-time kan niet los indien wijzend naar transformatie.)
Geen bewerkingssamenvatting
De '''short-time FouriertransformatieFourier 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 hoe het [[Fouriertransformatie|fourierspectrum]] in de tijd variëert doorheen 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 short-time FouriertransformatieFourier 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 short-time FouriertransformatieFourier 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 [[vensterfunctie|vensterfuncties]]. De vensterfunctie wordt dan steeds over een zekere afstand opgeschoven, en telkens wordt een [[Fouriertransformatiefouriertransformatie]] berekend. Indien de gebruikte [[vensterfunctie]] aan de uiteinden (quasi) naar nul gaat is het nodig de opeenvolgende posities van de [[vensterfunctie|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 [[Fouriertransformatie|Fouriertransformaties]]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;
:<math> \mathbf{STFT} \left \{ x(t) \right \} \equiv X(\tau, \omega) = \int_{-\infty}^{\infty} x(t) w(t-\tau) e^{-j \omega t} \, dt </math>
 
Hierbij is ''w''(''t'') de [[vensterfunctie]] en ''x''(''t'') het te transformeren signaal. In feite is ''X''(τ,ω) niets anders dan de klassieke [[Fouriertransformatiefouriertransformatie]] 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 tijdsip τ en de complexe hoek de fase.
 
=== De discrete STFT ===
:<math>f_s = 1/T_s \! </math>.
 
Hierbij is <math>T_s</math> de tijdstap tussen twee opeenvolgende sampels van het discrete signaal. Indien de lengte van de vensterfunctie N sampels bevat, is de totale tijdspanne van het venster en dus ook van de [[Fouriertransformatie]]fouriertransformatie dus gelijk aan:
 
:<math>T = N.T_s = N / f_s \! </math>
 
De discrete short -time FouriertransformatieFourier transform is dan van de gedaante:
 
:<math> \mathbf{STFT} \left \{ x[n] \right \} \equiv X(m,k) = \sum_{n=-\infty}^{\infty} x[n]w[n-m]e^{-j 2 \pi k n/N} </math>
* ''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 <math>k \omega_o</math> waarbij <math>\omega_o </math> de resolutie is van de gebruikte [[Fouriertransformatie]]fouriertransformatie. Deze resolutie is
 
:<math>\omega_o = 2 \pi / T \! </math>
 
'''Voorbeeld:'''
Stel dat een signaal x[n] een [[bemonsteringsfrequentie]] heeft van 8 kHz. Dit betekent dus dat er per seconde 8000 sampels x[n] beschikbaar zijn, die elk <math>T_s = 0.,000125 </math> secondenseconde uit elkaar liggen. Stel vervolgens dat een venster functie gebruikt wordt die 2000 sampels omvat. De reële tijdsduur van de vensterfunctie is dus 0.,25 secondenseconde. Omdat dit dus ook de tijdspanne is van de Fouriertransformatiefouriertransformatie zal deze een resolutie hebben van <math>f_o =1/0.,25 = 4 Hz </math>, en dus <math>\omega_o = 8 \pi </math> radialen per seconde. De tijdresolutie bedraagt dus 0.,25 secondenseconde. Dat is de nauwkeurigheid waarmee een kortstondig fenomeen in het signaal in de tijd kan gelocaliseerd worden.
Indien de posities van de [[vensterfunctie]] elkaar met 50% overlappen zal m dus de waarden 0, 1000, 2000, 3000... 6000 aannemen.
 
[[Bestand:STFT_WVL_compare.jpg‎|thumb|right|200px|Zowel bij de STFT als de Wavelettransformatie is het product van de tijdresolutie en de frequentieresolutie constant. Bij de STFT zijn beide resoluties zelf ook constant. Bij de Wavelettransformatie wordt een goede frequentieresiolutie ingeruild tegen een goede tijdresolutie op hoge frequenties]]
 
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 secondenseconde, de tijdresolutie. Stel nu dat men de frequentieresolutie wil verbeteren tot 2 Hz. De frequentietresolutie van een [[Fouriertransformatie]]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 sampels. Het gevolg hiervan is dus wel dat de tijdsresolutie met een factor twee slechter wordt, en groeit tot 0.,5 secondenseconde.
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.
Het voorbeeld bevat een signaal van 8192 sampels, bemonsterd aan 2048 Hz, dus 2048 sampels 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 sec en 2.,44 sec
* een [[Diracpuls]] op t = 0.,59 sec
* 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 [[vensterfunctie|Hanningvenster]] van 0.,128 secondenseconde over het signaal te laten glijden, met een overlap van 50%.
De frequentieresolutie is dus 1/0.,128 sec = 7,8125 Hz, de tijdresolutie is 0.,128 secondenseconde.
 
Hoewel de resulolutie kleiner is dan het verschil tussen de twee vaste sinussen zijn ze toch niet van elkaar te onderscheiden wegens de [[vensterfunctie|leakage]] van het gebruikte [[vensterfunctie|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 omdat 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 seconden 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.
 
Hoewel de resulolutie kleiner is dan het verschil tussen de twee vaste sinussen zijn ze toch niet van elkaar te onderscheiden wegens de [[vensterfunctie|leakage]] van het gebruikte [[vensterfunctie|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 omdat 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]]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 secondenseconde 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.
 
 
520.997

bewerkingen