Anschauliche Beschreibung der DFT mit Hilfe von

Erarbeiten der Diskreten Fourier Transformation (GFT)
unter Verwendung von Scilab zur Veranschaulichung
1. Das Prinzip verstehen
2. DFT beschreiben
3. DFT mit Scilab testen
4. Umsetzung der DFT für einen Mikrocontroller in C++
1. Das Prinzip verstehen
- Ein Bandpaßfilter liefert nur eine hohe Ausgangsamplitude,
wenn die Eingangsfrequenz nahe der Durchlaßfrequenz ist.
Bandfilter
fin=ffilt
fin>ffilt
fin<ffilt
ffilt
f
ffilt
f
ffilt
f
1. Das Prinzip verstehen
- Eine Transformation eines zeitlichen Signals in den
Frequenzbereich kann man sich so vorstellen, dass
die Reihe der Durchlaßamplituden vieler Bandpaßfilter
der Transformierten entspricht.
Bandfilter
f
ffilt1
fin
ffilt2
f
ffilt3 f
f
1. Das Prinzip verstehen
- Ein Bandpaßfilter läßt sich mit Hilfe von Phasendrehungen
realisieren. Genau dieses Prinzip wird bei FT, DFT und FFT
angewendet.
Fourier Transformation
Fast FT
Diskrete FT
Phasendrehungen lassen sich am besten in der komplexen
Ebene darstellen.
Da Scilab direkt mit komplexen Zahlen rechnen kann,
wird Scilab zur Veranschaulichung verwendet.
Um FFT auf einem Mikrocontroller umsetzen zu können,
muß man wieder zurück auf die Darstellung mit
Sinus und Cosinus gehen.
f ( )  cos 
90o
im
180o
im
re
270o
0o
im
im
re
re
zeiger ( )  ei
im
re
re
 cos   i sin 
1. Das Prinzip verstehen
e i
Mit f gedreht ( )  ei
wird die Phase der Zeigerfunktion um den
Winkel α gedreht.
Setzen wir α=90o, so wird aus dem Realteil der Zeigerfunktion,
der vorher cosφ war dann sinφ.
Wir probieren das mit Scilab aus:


1. Das Prinzip verstehen
Nun sollen Zeitfunktionen betrachtet werden und α nicht mehr
konstant sein:
  2f1t
  2f 2t

f gedreht (t )  e i 2f1t  e i 2f 2t
Sind f1 und f2 gleich, so macht die zweite e-Funktion immer
die Phasendrehung der ersten rückgängig.
Summiert man nun fgedreht über mehrere Zeitpunkte ti auf,
so ergibt sich ein immer länger werdender Pfeil in einer festen
Richtung.
Für unterschiedliche f1 und f2 ergibt die gleiche Summation
keinen so langen Pfeil.
Hierdurch erhält man den angekündigten Bandpaßfilter auf
Grundlage einer Phasendrehung für das Zeitsignal U(t):
filterwert ( f ) 
U (t )  e
i
ti
i 2ft i
1. Das Prinzip verstehen
Veranschaulichung mit Scilab:
=
1. Das Prinzip verstehen
Das Filtern funktioniert auch, wenn u(t) reellwertig ist:
2. DFT beschreiben
Statt u(t) gibt es N Samples im Abstand Δt:
u0  u (0  t )
u1  u (1  t )
u2  u (2  t )
...
u N 1  u (( N  1)  t )
Indem dafür gesorgt wird, dass auch eine eindeutige
Rücktransformation in den Zeitbereich möglich ist und
die „Einzelfilter“ nicht auf Frequenzen der anderen Filter
reagieren (Orthogonalität), kann eine DFT ohne weitere
Herleitung so angegeben werden:
N 1
n
G(
)   u (kT )e
NT
k 0
n  0..N  1
 i 2 n
k
N
2. DFT beschreiben
N 1
 i  2  n 
n
N
)   u (kT )e
, n  0..N  1
G(
NT
k 0
k
Die Amplituden des Zeitsignals wurden mit
einer Samplingrate fs=1/T aufgezeichnet.
Es wurden N Werte aufgezeichnet: k=0..N-1
u(kT)
n
G(
)
NT
statischer Anteil
e
 i 2 n
k
N
G0..N-1 sind komplexe Zahlen deren Beträge
die Gewichte der in u vorkommenden Frequenzen
sind. Es entstehen also Gewichte korrespondierend
zur Anzahl der Samples und zur Samplefrequenz:
f0 
0
1
N 1
f s , f1 
f s ,..., f N 1 
fs
N
N
N
Phasendrehung in Abhängigkeit von k (k-ter Sample)
und n (n-te Transformierte)
3. DFT mit Scilab testen
N 1
n
G(
)   u (kT )e
NT
k 0
 i  2  n 
k
N
, n  0..N  1
Um möglichst ganzzahlige Frequenzanteile zu bekommen,
wird die Samplingfrequenz fs=120Hz=1*2*3*4*5Hz gewählt und
N=5. Wegen T=1/fs liegen die Messungen dann in zeitlichen Abständen von
T=1/120s
Für die Abtastzeitpunkte tk ergibt sich dann:
t0=0/120s, t1=1/120s, t2=2/120s, t3=3/120s, t4=4/120s
Für die sich ergebenden Frequenzanteile ergibt sich:
f0=(0/5)120Hz=0Hz, f1=(1/5)120Hz=24Hz, f2=(2/5)120Hz=48Hz
f3=(3/5)120Hz=72Hz, f4=(4/5)120Hz=96Hz.
Für u wird eine Sinus-Schwingung mit der Frequenz 48Hz benutzt, um
bei der Transformierten ein vorhersehbares Ergebnis zu bekommen:
u(tk)=sin(2π*48Hz*tk)
3. DFT mit Scilab testen
N=5
N=50
N=500
Erhöhung der Abtastungen erhöhen die Trennschärfe.
Gi für i>N/2 sind zu i<N/2 gespiegelt und machen physikalisch keinen Sinn.
Hieraus resultiert das Shnnonsche Abtast-Theorem, nach dem maximal Frequenzen
der halben Abtastfrequenz in einem abgetasteten Signal erkannt werden können.
Anmerkungen zur FFT:
Wenn N eine Zweierpotenz ist (64,128,256…) tauchen viele Phasendrehungen
und Produkte mit u wiederholt auf und müssen seltenener neu berechnet werden.
Dies macht man sich bei der FFT zunutze.
Die Abhängigkeit des Rechenaufwandes steigt bei der DFT mit der Anzahl der Abtastungen n mit O(n2).
Bei der FFT steigt sie mit O(n*logn)
Anmerkungen zu realen Tonsignalen
Echte Tonsignale bestehen in der Regel aus einem Frequenzgemisch und liegen nicht in
Phase mit den Phasendrehfunktionen.
Um trotzdem befriedigende Ergebnisse zu erhalten, werden die Ränder des aufgezeichneten
Signals meistens mit so genannten Fenster-Funktionen weggedimmt.
4. Umsetzung der DFT für einen Mikrocontroller in C++
Die Abtastrate für Audio-CDs liegt bei 44100Hz.
Dieser Wert setzt sich interessanterweise aus folgenden Primfaktoren zusammen:
44100 = 2*2*3*3*5*5*7*7.
Dies könnte eventuell daran liegen, dass sich so die Periode relativ vieler
glatter Frequenzen mit einer relativ glatten Anzahl an Samples darstellen läßt (?)
Jedenfalls lassen sich durch variierende Auswahl einiger dieser Primfaktoren leicht
Frequenzen bilden, die harmonisch miteinander klingen, da jeweils zwei
solcher Töne dann auf das ganzzahlige Vielfache eines gemeinsamen
Grundtones zurückgeführt werden können. Sie sind dann Obertöne dieses
Tones.
Beispiel:
2*1*3*3*5*5=450Hz ist zweiter Oberton zu 150Hz
2*2*3*1*5*5=300Hz ist erster Oberton von 150Hz
gemeinsamer Grundton:
2*1*3*1*5*5=150Hz
4. Umsetzung der DFT für einen Mikrocontroller in C++
Idee:
COACH-Fahrzeuge kommunizieren über ausgezeichnete zueinander
harmonische Frequenzen.
Jedes Fahrzeug hat seinen Ton.
DFT horcht nur auf die verwendeten Frequenzen
Auswahl der Tonfrequenzen:
fs = 2*2*3*3*5*5*7Hz = 6300Hz
bleiben fest
werden so gewählt,
dass Töne zwischen
200 und 3150Hz liegen.
Es ergeben sich 11 brauchbare Frequenzen:
n
n
f
n
G( f )  G(
 6300 Hz )
210
315
350
420
525
630
700
1050
1260
1575
2100
6
9
10
12
15
18
20
30
36
45
60
N
s
180
4. Umsetzung der DFT für einen Mikrocontroller in C++