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: 2f1t 2f 2t f gedreht (t ) e i 2f1t e i 2f 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 2ft 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++
© Copyright 2024 ExpyDoc