DFT

Werbung
Digitale Signal-Verarbeitung 1
Kapitel 3: DFT und FFT
Inhaltsverzeichnis
3.1. EINLEITUNG ................................................................................................................................................ 2
3.2. DISKRETE FOURIERTRANSFORMATION (DFT)................................................................................ 2
3.3. EIGENSCHAFTEN DER DFT ..................................................................................................................... 3
3.4. VERWANDTSCHAFT DER DFT MIT DER FOURIERREIHE ............................................................. 5
3.5. FILTERFUNKTION DER DFT (FAKULTATIV) ..................................................................................... 6
3.6. LEAKAGE UND WINDOWING (FAKULTATIV) ................................................................................... 7
3.7. SCHNELLE FOURIERTRANSFORMATION (FFT) ............................................................................. 10
3.8. FFT VON REELLWERTIGEN SIGNALEN ............................................................................................ 11
3.9. ECHTZEIT-SIGNALVERARBEITUNG MIT DER FFT (FAKULTATIV) ......................................... 14
Literatur- bzw. Quellenverzeichnis
[1]
M. Meier: „Signalverarbeitung“, ISBN 3-528-16955-9, Vieweg Verlag, Oktober 2000.
[2]
A.V. Oppenheim, R.W. Schafer, J. R. Buck: „Zeitdiskrete Signalverarbeitung“,
2., überarbeitete Auflage, ISBN 3-8273-7077-9, Pearson Studium, 2004.
[3]
W.H. Press, S.A. Teukolsky, W.T. Vetterling, B.P. Flannery, „Numerical Recipes in C”,
ISBN 0-521-43108-5, Cambridge University Press 1992. Download (einzelne Kapitel
als PDF, kostenlos): http://www.library.cornell.edu/nr/bookcpdf.html
75880278 / 14.05.16
Seite 1 / 15
Rumc&Hhrt@ZSN@SoE@ZHAW
3.1. Einleitung
Das Fourierspektrum X(f) eines abgetasteten Signals x[n] = x(nTs) ist periodisch und kann
auch in Funktion der Abtastwerte x[n] ausgedrückt werden (siehe Kapitel 2)
X (f ) 

 x [n ]  e
 j n 2 f Ts
.
(3.1)
n  
In diesem Kapitel wird zuerst gezeigt, dass die diskrete Fouriertransformation (DFT) eine
Näherung des Fourierspektrums X(f) in Gleichung (3.1) darstellt.
Danach werden die Eigenschaften der DFT analysiert und die Verwandtschaft mit der
komplexen Fourierreihe aufgezeigt.
Ausgehend von der DFT wird dann die Fast Fourier Transformation (FFT) vorgestellt. Die
FFT ist einer der wichtigsten Algorithmen der DSV.
3.2. Diskrete Fouriertransformation (DFT)
Ein Problem bei der praktischen Bestimmung des Fourierspektrums in (3.1) ist das Aufsummieren über unendlich viele Terme. Bei der DFT berücksichtigt man nur noch die N Abtastwerte x[0], ..., x[N-1] in einem Zeitfenster bzw. window der Länge TDFT=NTs, d.h.
N-1
X(f )   x[n] e  jn 2 f Ts .
(3.2)
n=0
N bezeichnet man als Blocklänge. Die Näherung in (3.2) ist natürlich umso besser, je kleiner
die vernachlässigten Abtastwerte sind.
Aus N Abtastwerten können maximal N Frequenzwerte bestimmt werden. Bei der DFT bestimmt man deshalb nur die N äquidistanten Abtastwerte m·fs/N, m=0, ..., N-1, des FourierSpektrums X(f) im Intervall [0,fs]. Wenn man in Gleichung (3.2) die kontinuierliche Variable f
durch die diskrete Variable m·fs/N, m=0, ..., N-1, ersetzt, erhält man die DFT
N-1
X[m]   x[n] e
j
2
mn
N
m  0, 1, ..., N  1
(3.3)
n=0
Man kann zeigen, dass der folgende Ausdruck die inverse DFT bzw. die IDFT darstellt:
x[n] 
75880278 / 14.05.16
2
j mn
1 N-1
  X[m] e N
N m=0
n  0, 1, ..., N  1
Seite 2 / 15
(3.4)
Rumc&Hhrt@ZSN@SoE@ZHAW
3.3. Eigenschaften der DFT
Aus N Abtastwerten x[n] in einem Zeitfenster der Länge TDFT = N·Ts
berechnet die DFT N komplexe Spektralwerte im Frequenzbereich 0 ... fs·(N-1)/N .
Die Frequenzauflösung ist umgekehrt proportional zur Länge des Zeitfensters TDFT = N·Ts
Δf = fs / N = 1 / (N·Ts) = 1/TDFT,
(3.5)
Wenn man die Gleichungen (3.1) und (3.3) vergleicht sieht man, dass das DFT-Spektrum mit
dem Fourier-Spektrum übereinstimmt bei den
N äquidistanten Spektralwerten
f[m] = m·fs/N, 0≤m<N
welche berechnet wurden aus der Zeitfenster-Sequenz xN[n]={x[0], ..., x[N-1]}
(3.6)
Beispiel
In Abbildung 3.1 ist die Zeitfenster-Sequenz x[n] dargestellt, die man erhält, wenn man
die Stossantwort eines analogen RC-Tiefpass-Filters 1. Ordnung mit der Zeitkonstante
t0=RC=10s mit der Abtastfrequenz fs=1 Hz im Zeitfenster 0...TDFT=NTs=32s abtastet.
Ebenfalls in Abbildung 3.1 ist das normierte 32-Punkt DFT-Betragsspektrum mit der Frequenzauflösung Δf=1/TDFT=1/32 Hz im Frequenzbereich [0,fs] dargestellt. (Mit reellen
Werten x[n] ist die zweite Hälfte des DFT-Spektrums konjugiert komplex symmetrisch.)
RC = 10s
δ(t)
R
C
x[0] ,..., x[31]
xa(t)
fs = 1 Hz
N=32 Punkt
DFT
Zeitbereich
xa(t)=(1/t0)·e-t/to t0=RC=10s
Ts = 1 s
Frequenzbereich
TDFT
= 32 s
IXa(f)I = I1/(1+j2πf·t0)I
fs
= 1 Hz
Δf
= 1/TDFT = 1/32 Hz
Abbildung 3.1: Normiertes 32-Punkt-DFT-Betragsspektrum.
75880278 / 14.05.16
Seite 3 / 15
Rumc&Hhrt@ZSN@SoE@ZHAW
Das DFT-Spektrum in der 1. Nyquistzone [0,fs/2] stimmt gut mit dem Amplitudengang des
analogen RC-Tiefpass-Filters 1. Ordnung überein, weil beim Abtasten nur wenig Aliasing
entsteht.
Das DFT-Spektrum in Gleichung (3.3) ist diskret und periodisch. Ein periodisches Spektrum
hat zur Folge, dass das Zeitsignal diskret, d.h. abgetastet, ist. Weiter hat ein diskretes Spektrum zur Folge, dass das Zeitsignal periodisch ist! Mit der DFT bestimmt man also das Spektrum der periodisch fortgesetzten Zeitfenster-Sequenz, d.h.
xNp[n] = ..., {xN[n+N]}, {xN[n]}, {xN[n-N]}, {xN[n-2N]}, ...
X[n]/N
(3.7)
wobei n=0,..., N-1 und die Zeitfenster-Sequenz xN(n) in Gleichung (3.6) gegeben ist und aus
N Abtastwerten einer Periode besteht. In Abbildung 3.2 ist ein Beispiel einer periodisch fortgesetzten Zeitfenster-Sequenz xNp[n] dargestellt.
Abbildung 3.2: Periodisch fortgesetzte Zeitfenster-Sequenz xNp[n], N=32.
Die Definition der DFT in Gleichung (3.3) hat den „Nachteil“, dass die Spektralwerte mit
zunehmendem N immer grösser werden. Diesen Sachverhalt erkennt man am einfachsten,
wenn man die DC-Komponente X[0] für die DC-Folge xN[n]=1,..., 1, 0 ≤ n < N, betrachtet.
Es bleibt dem Anwender überlassen, die entsprechende Normierung vorzunehmen. Normalerweise teilt man die Spektralwerte X[m] durch N, siehe Gleichung (3.7).
Die wichtigsten Eigenschaften der DFT:
Zeitbereich
Entsprechung Frequenzbereich
N (reelle) Abtastwerte x[n]
N komplexe Spektralwerte
○●
Zeit-Abstand der Abtastwerte
Spektrum wiederholt sich nach fs
○●
Ts = 1/fs
1/Ts = fs (=> Spiegelspektren)
Zeitfenster (= Messdauer)
Frequenzauflösung
○●
TDFT = N·Ts
Δf = 1/( N·Ts) = fs/N = 1/ TDFT
75880278 / 14.05.16
Seite 4 / 15
Rumc&Hhrt@ZSN@SoE@ZHAW
3.4. Verwandtschaft der DFT mit der Fourierreihe
Jede periodische Funktion xp(t) = xp(t-nT) kann als Fourierreihe dargestellt werden. Die komplexen Fourierkoeffizienten cn stellen dabei die Spektrallinien bei den Vielfachen der
Grundfrequenz 1/T dar.
Tastet man die periodische Funktion xp(t) mit N Werten pro Periode T ab, d.h. Ts=T/N bzw.
fs=N/T, so erhält man das diskrete Signal xNp[n], dessen Spektrum aus dem Originalspektrum
cn und Kopien bei Vielfachen der Abtastfrequenz fs besteht.
Wenn beim Abtasten kein Aliasing entsteht, können die Spektrallinien cn gemäss Gleichung
(3.7) mit der DFT berechnet werden, d.h.
cn = X[n]/N, n=0,...,N/2.
(3.8)
Beispiel
Abbildung 3.3 stellt N=8 Abtastwerte x[n] einer Periode T0 des cos-Signals
x(t) = cos(2πf0t), f0 = 1/T0, und das zugehörige, normierte DFT-Spektrum X[n]/N dar.
Das periodische Signal x(t) kann mit Hilfe der Eulerformel wie folgt als (komplexe)
Fourierreihe dargestellt werden: x(t) = 0.5·e2πfot +0.5·e-2πfot. Alle Fourierkoeffizienten
cn sind Null, ausser c1=c-1=0.5.
Aus Abbildung 3.3 ist ersichtlich, dass die normierten 8-Punkt DFT-Werte mit den
Fourierkoeffizienten cn, n = -3,...,3, übereinstimmen.
Zeitbereich: N = 8 Abtastwerte x[n] einer Periode eines cos-Signals
Zeit / T0
Frequenzbereich: N = 8 Spektralwerte X[n]/N im Bereich [0,fs=N·f0]
c[1]
c[-1]
c[2]
c[0]
c[3]
c[-3]
c[-2]
Frequenz / f0
f0
fs=8f0
Abbildung 3.3: Verwandtschaft normierte DFT mit komplexer Fourierreihe.
75880278 / 14.05.16
Seite 5 / 15
Rumc&Hhrt@ZSN@SoE@ZHAW
3.5. Filterfunktion der DFT (fakultativ)
Die Berechnung der einzelnen DFT-Werte X[m] in Gleichung (3.3) entspricht einer Filterung.
In Abbildung 3.4 ist der normierte Betrag IX(5)I/N einer 40-Punkt-DFT eines mit fs=8 kHz
abgetasteten Cosinus-Signals x[n]=cos(2πf0·nTs), n=0,..., 39, dargestellt, wenn f0 variiert
wird. Die Frequenzauflösung Δf=fs/N=8000/40 Hz=200 Hz. Der DFT-Wert X(5) entspricht
der Spektralkomponente bei 5·Δf = 1 kHz.
Für ein Cosinus-Signal der Frequenz f0 = 1000 Hz resultiert wie erwartet IX(5)I/N = 0.5.
Solange die Frequenz f0 des Cosinus-Signals innerhalb des ∆f=200 Hz breiten Behälters
(engl. bin) um f0 liegt, gilt IX(5)I/N ≈ 0.5. Liegt die Frequenz f0 des Cosinus-Signals aber
ausserhalb des ∆f=200 Hz breiten Behälters um f0, spricht die 1 kHz Spektralkomponente
„kaum“ mehr an, d.h. IX(5)I/N << 0.5. Bei den (anderen) Vielfachen der Frequenzauflösung
∆f gilt sogar IX(5)I/N=0. Dort sprechen die anderen DFT-Spektralfilter an.
x[n]
x(t) = cos(2πf0t)
N=40 Punkt
DFT
X[5]/N
fs=8 kHz
Abbildung 3.4: Filterfunktion der DFT.
75880278 / 14.05.16
Seite 6 / 15
Rumc&Hhrt@ZSN@SoE@ZHAW
3.6. Leakage und Windowing (fakultativ)
Mit der DFT wird das Spektrum der periodisch fortgesetzten Zeitfenster-Sequenz xNp[n]
berechnet, siehe Gleichung (3.7). Wenn man die Fensterlänge unpassend wählt, kann es auf
Grund der periodischen Fortsetzung zu Sprungstellen kommen, die im ursprünglichen Signal
nicht enthalten waren. Das resultierende Spektrum weist dann zusätzliche, auslaufende
Spektrallinien auf.
Dieser Effekt wird leakage (Auslaufen) genannt. Der leakage-Effekt kann vermindert werden,
wenn die Zeitfenster-Sequenz xN[n] mit einem auslaufenden Fenster (Window) gewichtet
wird. Dieses sogenannte Windowing werden wir beim Digitalfilterentwurf noch genauer
kennen lernen.
Beispiel
In Abbildung 3.5 oben ist das Zeitfenster so gewählt worden, dass genau 5 Perioden
eines 50 Hz-Sinus darin Platz haben. Bei der periodischen Fortsetzung entstehen keine
Sprungstellen. Das Betragsspektrum weist nur 1 Frequenzkomponente auf, nämlich bei
50 Hz.
In Abbildung 3.5 Mitte ist das Zeitfenster so gewählt worden, dass 4.75 Perioden eines
50 Hz-Sinus darin Platz haben. Bei der periodischen Fortsetzung entstehen Sprungstellen. Das Betragsspektrum weist neben der Frequenzkomponente bei 50 Hz noch
weitere, auslaufende Frequenzkomponenten in der Nähe von 50 Hz auf (Leakage).
In Abbildung 3.5 unten ist das Zeitfenster wieder so gewählt worden, dass 4.75 Perioden
eines 50 Hz-Sinus darin Platz haben. Die Zeitfenster-Sequenz xN[n] ist in diesem Fall
aber mit einem Hanning-Fenster der Länge N gewichtet worden. Im Betragsspektrum ist
der Leakage-Effekt immer noch erkennbar, aber deutlich kleiner als in der Mitte rechts.
Abbildung 3.5: Leakage-Effekt bei der FFT, Betragsspektrum in dB, [1].
75880278 / 14.05.16
Seite 7 / 15
Rumc&Hhrt@ZSN@SoE@ZHAW
Die folgenden Abbildungen zeigen vier typische Fensterfunktionen (Windows), das
gewichtete Zeitsignal (gemessenes Zeitsignal  Fensterfunktion) und das resultierende
Frequenzspektrum.
in dB
Frequenz-Spektrum
Sample-Nummer
gewichtetes Zeitsignal
1
0
-1
-0.05
0
0.05
Zeit in s
Kaiser-Fenster mit Beta = 2
1
0.5
0
0
50
Sample-Nummer
gewichtetes Zeitsignal
1
0
-1
-0.05
0
0.05
Zeit in s
Kaiser-Fenster mit Beta = 7
1
0.5
0
0
50
Sample-Nummer
gewichtetes Zeitsignal
1
0
-1
-0.05
0
0.05
Zeit in s
1
0.5
0
0
50
50
0
0.05
0
500
Frequenz in Hz
Frequenz-Spektrum
in dB
0
Zeit in s
50
0
0
500
Frequenz in Hz
Frequenz-Spektrum
in dB
Hamming-Fenster
Zeitsignal
50
0
0
500
Frequenz in Hz
Frequenz-Spektrum
in dB
Rechteck-Fenster = ohne Gewichtung
1
1
0.5
0
0
-1
0
50
-0.05
Sample-Nummer
50
0
0
500
Frequenz in Hz
Abbildung 3.6: Windowing mit f0 = 68Hz-Sinussignal mit fs = 1000Hz und N = 50
Fensterlänge ist kein ganzzahliges Vielfaches der Periodenlänge => Sprungstelle
In der Abbildung 3.6 ist die Sprungstelle infolge periodischer Widerholung des
Signalausschnitts bei der Zeit 0 gut ersichtlich.
Die periodische Wiederholung ist nicht eine physikalisch reale Wiederholung, sondern sie
entsteht durch den DFT-Algorithmus, weil nur endlich lange gemessen wurde. Vom realen
Signal steht somit nur ein Ausschnitt mit N Messwerten für die Berechnung des FrequenzSpektrums zur Verfügung.
Aus N äquidistanten Messwerten im Zeitbereich können N äquidistante Frequenzlinien
berechnet werden. Der Abstand der Frequenzlinien (= Frequenzauflösung) beträgt somit
fs/N. Liegt die Signal-Frequenz nicht genau auf einer dieser Frequenzlinien, so sprechen die
benachbarten Frequenzlinien an.
Bezogen auf Abbildung 3.6: f = fs/N = 1000Hz/50 = 20Hz
f0 = 68Hz liegt also zwischen den Linien 60Hz und 80Hz. Die 60Hz-Linie spricht am
stärksten an, weil sie am nächsten liegt.
Gewichten des Zeitsignals (Windowing) mit einem Fenster kann die Sprungstelle verkleinern
oder sogar ganz eliminieren. Aus der Abbildung 3.6 sieht man, dass durch Windowing das
Signal „verschwimmt“ und die Frequenz weniger genau erfassbar wird.
Leakage wird durch Gewichtung mit einem Window erheblich reduziert.
Es muss immer ein Kompromiss gefunden werden zwischen Messgenauigkeit bei der
Signal-Leistung (Amplitude) und der Frequenz-Selektivität.
Frequenz möglichst genau messen => kein Fenster
Signalleistung möglichst genau messen => mit Fenster
75880278 / 14.05.16
Seite 8 / 15
Rumc&Hhrt@ZSN@SoE@ZHAW
in dB
Frequenz-Spektrum
Sample-Nummer
gewichtetes Zeitsignal
1
0
-1
-0.05
0
0.05
Zeit in s
Kaiser-Fenster mit Beta = 2
1
0.5
0
0
50
Sample-Nummer
gewichtetes Zeitsignal
1
0
-1
-0.05
0
0.05
Zeit in s
Kaiser-Fenster mit Beta = 7
1
0.5
0
0
50
Sample-Nummer
gewichtetes Zeitsignal
1
0
-1
-0.05
0
0.05
Zeit in s
1
0.5
0
0
50
50
0
0.05
0
500
Frequenz in Hz
Frequenz-Spektrum
in dB
0
Zeit in s
50
0
0
500
Frequenz in Hz
Frequenz-Spektrum
in dB
Hamming-Fenster
Zeitsignal
50
0
0
500
Frequenz in Hz
Frequenz-Spektrum
in dB
Rechteck-Fenster = ohne Gewichtung
1
1
0.5
0
0
-1
0
50
-0.05
Sample-Nummer
50
0
0
500
Frequenz in Hz
Abbildung 3.7: Windowing mit einem 80Hz-Sinussignal mit fs = 1000Hz und N = 50
Fensterlänge ist ein ganzzahliges Vielfaches der Periodenlänge => keine Sprungstelle
Abbildung 3.7 zeigt den Fall, dass die Frequenz des zu messenden Signals genau auf einer
Frequenzlinie liegt. In diesem Fall gibt es keine Sprungstelle im periodisch fortgesetzten
Signal. Beim Rechteck-Fenster spricht genau diese eine Frequenzlinie an.
Durch das Gewichten mit einem Fenster wird das Zeitsignal etwas verfälscht, was sich in
einem „breiteren“ Spektrum bemerkbar macht.
Leakage lässt sich ganz vermeiden, wenn die Fensterlänge für die FFT ein Vielfaches
der Periodendauer des Signals beträgt.
Auf Windowing kann verzichtet werden. Windowing ist hier sogar nachteilig!
Die Abbildungen 3.6 und 3.7 wurden mit dem Matlab-Skript
dsv1kap3_dftfft_windowing.m erstellt.
Für den Fensterentwurf unter Matlab steht das Kommando wintool zur Verfügung. Mit
help window resp. doc window können Erklärungen und Listen mit den verfügbaren
Fenstern angezeigt werden.
Mathematisch entspricht der Multiplikation im Zeitbereich eine Faltung im Frequenzbereich
(siehe Kapitel 2.9.3 Fouriertransformation):
x(t)w(t) ○-● X(f)W(f)
Damit kann Leakage mathematisch und numerisch korrekt gerechnet werden. Sie ist auch
eine andere (präzisere) Sichtweise auf die oben gegebene intuitive Erklärung für das
Leakage.
75880278 / 14.05.16
Seite 9 / 15
Rumc&Hhrt@ZSN@SoE@ZHAW
3.7. Schnelle Fouriertransformation (FFT)
Die Verarbeitungszeit für einen Algorithmus hängt wesentlich von der Anzahl Multiplikationen
ab, die ein Rechner ausführen muss. Der Aufwand zur Berechnung der N Spektralwerte beträgt mit der DFT ca. N2 komplexe Multiplikationen, siehe Gleichung (3.3).
Cooley und Tukey haben 1965 die Fast Fourier Transformation entwickelt. Mit dem FFTAlgorithmus lassen sich die N DFT-Werte mit einem Aufwand von ca. N·log2(N) komplexen
Multiplikationen berechnen, was einer enormen Reduktion des Aufwands entspricht. Für eine
Blocklänge von N=1024 zum Beispiel müssten mit der DFT ca. 1 Million Multiplikationen
berechnet werden, während mit der FFT nur ca. 10’000 Multiplikationen anfallen.
Es gibt allerdings Anwendungen (z.B. Detektion DTMF-Wählton), in denen nur wenige
Spektralwerte interessieren. In diesen Anwendungen kann es durchaus vorteilhaft sein, mit
der DFT die wenigen Spektralwerte direkt und nicht mit der FFT alle möglichen DFT-Werte
zu berechnen. Mit dem Görtzel-Algorithmus [2] ist es z.B. möglich, einzelne DFT-Werte X[m0]
mit IIR-Filtern 1. bzw. 2. Ordnung rekursiv zu berechnen.
Die Grundidee bei der FFT besteht darin, eine N-Punkt DFT in zwei N/2-Punkt DFTs aufzuteilen, eine über die geraden und eine über die ungeraden Abtastwerte. Im Folgenden nehmen wir der Einfachheit wegen an, dass N eine Zweierpotenz ist.
Wenn man in der Definition (3.3) der DFT eine Aufteilung für die geraden und die ungeraden
Abtastwerte x[2n] und x[2n+1] vornimmt, erhält man
X[m] 
N/2-1
N/2-1
n=0
n=0
 x[2n] WNm2n 
 x[2n+1] W
m(2n 1)
N
m  0, 1, ..., N  1 ,
(3.9)
wobei der Term W N=e-j2π/N weight oder twiddle factor genannt wird und nur eine Funktion von
N ist. W N weist die Symmetrie W N2mn=W N/2mn auf. Der Ausdruck (3.9) kann deshalb wie folgt
vereinfacht werden,
X[m] 
N/2-1
 x[2n] W
mn
N/2
n=0
N/2-1
 WNm   x[2n+1] WNmn/ 2
m  0, 1, ..., N  1 .
(3.10)
n=0
Die beiden Summen oben stellen N/2-Punkt DFTs dar. Für die Berechnung von (3.10) sind
jetzt aber nur noch 2·(N/2)2+N komplexe Multiplikationen erforderlich, statt N2 für die DFT in
der ursprünglichen Form. Diese Reduktion ist für grosse N (z.B. N=1024) bereits beträchtlich.
Die beiden kurzen DFTs im Ausdruck (3.10) können nun sukzessive in DFTs halber Länge
unterteilt werden, bis letztlich nur noch 2-Punkt-DFTs zu berechnen sind.
Man bezeichnet FFT-Algorithmen, die die Eingangsfolge x[n] wie oben beschrieben in immer
kürzere Teilfolgen unterteilen, decimation-in-time FFT-Algorithmen. Umgekehrt gibt es auch
decimation-in-frequency Algorithmen, die die Ausgangsfolge X[n] in immer kürzere Teilfolgen
unterteilen.
In Abbildung 3. ist das Signalflussdiagramm zur Berechnung des FFT-Algorithmus für N=4
gemäss Gleichung (3.10) dargestellt. Die Addition ist mit zusammenlaufenden Pfaden dargestellt. Die Multiplikation mit 1 ist nicht speziell gekennzeichnet.
75880278 / 14.05.16
Seite 10 / 15
Rumc&Hhrt@ZSN@SoE@ZHAW
X[0] = (x[0]+x[2]) + (-j)0·(x[1]+x[3])
x[0]
00 => 00
x[2]
-1
10 => 01
x[1]
X[1] = (x[0]-x[2]) + (-j)1·(x[1]-x[3])
-j
-1
01 => 10
x[3]
-1
11 => 11
j
X[2] = (x[0]+x[2]) + (-j)2·(x[1]+x[3])
X[3] = (x[0]-x[2]) + (-j)3·(x[1]-x[3])
Abbildung 3.8: Signalflussdiagramm der 4-Punkt FFT mit Bitumkehr am Eingang.
Das Spektrum kann in log2(N) unabhängigen Teilschritten mit Hilfe von je N/2 sogenannten
butterflys berechnet werden. Es ist nur 1 Vektor mit N komplexen Speicherwerten erforderlich (in-place computation)!
Die Eingangswerte sind seltsam sortiert und müssen umsortiert werden, was ein Bestandteil
des Algorithmus ist. Die korrekte Reihenfolge erhält man, wenn man den Zeitindex n von x[n]
binär darstellt und für die Speicherung rückwärts liest (bit-reversed-Adressierung bzw. Bitumkehr, siehe Abbildung 3.8).
Der FFT-Algorithmus ist so wichtig in der digitalen Signalverarbeitung, dass die meisten
Numerikprogramme und DSP-Entwicklungsumgebungen FFT-Library-Routinen bereitstellen.
In der Matlab Signal Processing Toolbox z.B. gibt es die Funktionen fft()und ifft().
In [3] gibt es gut dokumentierte C-Beispielprogramme für den Fall, dass keine Routinen zur
Verfügung stehen.
3.8. FFT von reellwertigen Signalen
Eine N-Punkt FFT transformiert N komplexe Zeitwerte in N komplexe Spektralwerte.
In der Praxis sind die meisten Zeitsignale x[n] aber reellwertig, denn sie repräsentieren zum
Beispiel einen Spannungsverlauf in Funktion der Zeit.
Selbstverständlich ist es möglich, mit einer N-Punkt FFT aus N reellen Zeitwerten N komplexe Spektralwerte zu berechnen. Dazu muss man im Speicher einfach die Imaginärteile der
N Speicherwerte mit Null initialisieren, siehe Abbildung 3.9.
reellwertiges
Zeitsignal
komplexes
Spektrum
Re{x[0]} = x[0]
Im{x[0]} = 0
Re{x[1]} = x[1]
Im{x[1]} = 0
:
Re{x[N-1]} = x[N-1]
Im{x[N-1]} = 0
Re{X[0]}
Im{X[0]}
Re{X[1]}
Im{X[1]}
:
Re{X[N-1]}
Im{X[N-1]}
N-Punkt FFT
Abbildung 3.9: N-Punkt FFT eines Zeitsignals x[n] mit N reellen Abtastwerten.
75880278 / 14.05.16
Seite 11 / 15
Rumc&Hhrt@ZSN@SoE@ZHAW
Dank der in-place Berechnung ist im Speicher nur 1 Vektor mit N komplexen Werten
erforderlich. Der Vektor x mit den Zeitwerten wird im Laufe der Berechungen durch den
Vektor X mit den Spektralwerten überschrieben.
Man kann aber vermuten, dass man effizienter arbeiten kann. Tatsächlich gibt es 2 Verbesserungsmöglichkeiten:
Eine Verbesserungsmöglichkeit besteht darin, mit einer einzigen N-Punkt FFT gleichzeitig
zwei N-Punkt Spektren von zwei verschiedenen, reellwertigen Zeitsignalen (z.B. linker und
rechter Stereokanal) zu berechnen.
Eine andere Verbesserungsmöglichkeit besteht darin, mit einer kurzen N/2-Punkt FFT ein
grosses N-Punkt Spektrum eines reellwertigen Zeitsignals zu berechnen und so Rechenzeit
und Speicherplatz zu sparen.
N-Punkt FFT von 2 reellwertigen Zeitsignalen mit je N Abtastwerten
Wir betrachten zuerst die gleichzeitige Berechnung von zwei N-Punkt Spektren X1[m] und
X2[m] mit Hilfe einer einzigen N-Punkt FFT, siehe Abbildung 3.10.
x1[0]
X1[0]
x1[1]
Re{y[0]}
:
Im{y[0]}
x1[N-1]
x1[0]
x2[0]
N-Punkt
FFT
x1[1]
Packing
x2[0]
X1[1]
Re{Y[0]}
Im{Y[0]}
:
Re{Y[1]}
X1[N-1]
Splitting
x2[1]
Im{Y[1]}
:
:
X2[0]
x2[1]
Re{y[N-1]}
x1[N-1]
Re{Y[N-1]}
X2[1]
:
Im{y[N-1]}
x2[N-1]
Im{Y[N-1]}
:
Zeitbereich
Frequenzbereich
X2[N-1]
x2[N-1]
Abbildung 3.10: Berechnung von zwei N-Punkt Spektren mit einer einzigen N-Punkt FFT.
Im 1. Schritt bildet man aus den beiden verschiedenen, reellwertigen Zeitsignalen x1[n] und
x2[n] der Länge N einen komplexen Inputvektor
y[n] = x1[n] + j·x2[n], n=0,...,N-1,
(3.11)
für die FFT, indem man die geraden Speicherzellen im FFT-Buffer mit x1[n], n=0,...,N-1, und
die ungeraden Speicherzellen mit x2[n], n=0,...,N-1, füllt, siehe Abbildung 3.10.
Im 2. Schritt berechnet man mit Hilfe der FFT aus den N komplexen Werten y[n], n=0,...,N-1,
die N komplexen Spektralwerte Y[m], m=0,...,N-1. Wegen der Linearität der DFT gilt:
Y[m] = X1[m] + j·X2[m]
(3.12)
Die gewünschten Spektren X1[m] und X2[m] sind komplex und können deshalb nicht einfach
durch Bildung des Realteils und des Imaginärteils in Gleichung (3.12) bestimmt werden, wie
man vielleicht auf den ersten Blick vermuten mag.
75880278 / 14.05.16
Seite 12 / 15
Rumc&Hhrt@ZSN@SoE@ZHAW
Um die beiden gewünschten Spektren X1[m] und X2[m] aus dem FFT-Spektrum Y[m] heraus
zu trennen, werden im 3. Schritt deshalb die folgenden Summen gebildet
(Y[m] + Y*[N-m])/2 = (X1[m] + j·X2[m] + X1*[N-m] - j·X2*[N-m])/2
(3.13)
(Y[m] - Y*[N-m])/2j = (X1[m] + j·X2[m] - X1*[N-m] + j·X2*[N-m])/2j
wobei m=0,...,N-1. In Gleichung (3.13) stellt z* den konjugiert komplexen Wert von z dar.
Ausserdem ist in der Umformung Gleichung (3.12) sowie die Identität (z1+z2)* = z1*+z2*
verwendet worden.
Für das N-Punkt FFT-Spektrum eines reellwertigen Zeitsignals x[n] gilt aber die Symmetrie
X*[N-m] = X[m]
(3.14)
wobei m = 0,..., N-1.
Durch Einsetzen von (3.14) in (3.13) erhält man die gewünschte Spektrumstrennung
X1[m] = (Y[m] + Y*[N-m]) / 2
(3.15)
X2[m] = (Y[m] - Y*[N-m]) / 2j,
wobei m=0,...,N-1. Wegen der Symmetrie Y*[N]=Y[0] gilt für die DC-Werte insbesondere
X1[0] = Re{Y[0]} und X2[0] = Im{Y[0]}.
N/2-Punkt FFT eines reellwertigen Zeitsignals mit N Abtastwerten
Wir betrachten nun die Berechnung eines N-Punkt Spektrums eines reellwertigen Zeitsignals
x[n] mit Hilfe einer (kurzen) N/2-Punkt FFT, siehe Abbildung 3.11.
x[0]=xe[0]
y[0]
x[1]=xo[0]
x[2]=xe[1]
y[1]
y[N/2-1]
Re{Y[0]}
N/2-Punkt
FFT
Im{Y[0]}
Re{Y[1]}
X[0]
Zusammenfügen
X[1]
X[2]
x[3]=xo[1]
Im{Y[1]}
X[3]
:
:
:
x[N-2] =xe[N/2-1]
Re{Y[N/2-1]}
X[N-2]
x[N-1]=xo[N/2-1]
Im{Y[N/2-1]}
X[N-1]
Zeitbereich
Frequenzbereich
Abbildung 3.11: Berechnung eines N-Punkt Spektrums mit einer N/2-Punkt FFT.
Zuerst bildet man aus dem reellwertigen Zeitsignal x[n] der Länge N einen Eingangsvektor
für die FFT mit N/2 komplexen Werten
y[n] = x[2n] + j·x[2n+1] = xe[n] + j·xo[n], n=0,...,N/2-1,
(3.16)
indem man die geraden Speicherzellen im FFT-Buffer mit den geraden bzw. even-Werten
xe[n], n=0,...,N/2-1, und die ungeraden Speicherzellen mit den ungeraden bzw. odd-Werten
xo[n], n=0,...,N/2-1, füllt, siehe Abbildung 3.11.
75880278 / 14.05.16
Seite 13 / 15
Rumc&Hhrt@ZSN@SoE@ZHAW
Dann berechnet man die N/2-Punkt FFT und erhält N/2 komplexe Spektralwerte
Y[m] = Xe[m] + j∙Xo[m], m=0,...,N/2-1.
(3.17)
Das Spektrum Y[m] setzt sich aus dem even-Spektrum Xe[m] und dem odd-Spektrum Xo[m]
zusammen. Gemäss Gleichung (3.10) kann das N-Punkt Spektrum X[m] aber aus den zwei
N/2-Punkt-Spektren Xe[m] und Xo[m] wie folgt zusammengesetzt werden,
X[m] = Xe[m] + ej2πm/N ∙Xo[m], m=0,...,N/2-1.
(3.18)
Verwendet man jetzt wieder die Symmetrie (3.14), kann man analog zur Herleitung oben
zeigen, dass man das gewünschte Spektrum X[m] wie folgt bestimmen kann (siehe [2], [3]):
X[m] = 0.5∙(Y[m] + Y*[N-m]) - 0.5∙j∙(Y[m] - Y*[N-m])∙ej2πm/N
(3.19)
wobei m=0,...,N-1.
In der Praxis nennt man die oben beschriebenen Verfahren manchmal etwas unpräzis
„komplexe FFT“ und „reelle FFT“.
In [3] gibt es gut dokumentierte C-Beispielprogramme für den Fall, dass keine Routinen für
die „reelle FFT“ zur Verfügung stehen.
3.9. Echtzeit-Signalverarbeitung mit der FFT (fakultativ)
Die Ausgangsfolge eines Digitalfilters kann mit Hilfe der diskreten Faltung direkt im Zeitbereich bestimmt werden. Alternativ kann die Ausgangsfolge aber auch mit Hilfe der FFT
und der IFFT indirekt via Frequenzbereich bestimmt werden, siehe Abbildung 3.12.
Je nach Aufgabe kann sich der „Umweg“ über den Frequenzbereich dank der Effizienz der
FFT/IFFT sogar aufwandmässig lohnen.
x[n]
FFT
X[m]
Y[m]
IFFT
y[n]
H[m] = FFT{ h[n] }
Abbildung 3.12: Bestimmung der Ausgangsfolge eines Digitalfilters via Frequenzbereich.
Bei der in Abbildung 3.12 dargestellten Alternative gibt es aber eine Schwierigkeit. Die Multiplikation der DFT-Spektren im Frequenzbereich entspricht der zyklischen Faltung der entsprechenden Zahlenfolgen im Zeitbereich, d.h.
N 1
y[n]  x[n]  h[n]   h[m]  x[( n  m) mod N ]
(3.20)
m 0
Die DFT „betrachtet“ nämlich die Signale x[n] und y[n] als periodisch. Für die Echtzeit-Verarbeitung braucht es aber die lineare Faltung ohne die Modulo-Operation im Ausdruck (3.20).
Deshalb bedient man sich eines Tricks. Die zyklische Faltung stimmt mit der linearen Faltung
überein, wenn die Folgen x[n] und h[n] entsprechend mit Nullen ergänzt werden.
75880278 / 14.05.16
Seite 14 / 15
Rumc&Hhrt@ZSN@SoE@ZHAW
In Abbildung 3.13 ist die FFT-Echtzeit-Verarbeitung mit der overlap-add-Methode dargestellt.
Die Eingangsfolge x[n] wird in Segmente xM[n] mit M Abtastwerten unterteilt. Jedes Segment
wird mit L-M Nullen ergänzt und einer L-Punkt-FFT unterzogen. Das resultierende Spektrum
werde mit XL[m] bezeichnet.
Die Filter-Stossantwort h[n] der Länge N+1 wird mit L-N-1 Nullen ergänzt und auch einer
L-Punkt-FFT unterzogen. Die Bestimmung des diskreten Frequenzgangs HL[m] muss nur
einmal gemacht werden.
Die Spektren XL[m] der verlängerten Segmente werden je mit dem diskreten Frequenzgang
HL[m] multipliziert. Dieser Multiplikation im Frequenzbereich entspricht die zyklische Faltung
im Zeitbereich. Letztere ist aber Dank der Nullen-Ergänzung identisch mit der linearen
Faltung, solange L > M+N.
Mit Hilfe der IFFT werden die gefilterten Segmente yL[n] bestimmt. Sie haben die Länge
L>M und überlappen sich. Die Ausgangsfolge y[n] kann bestimmt werden, indem man die
gefilterten Segmente yL[n] überlappend addiert (Superposition bei einem linearen System).
In der Matlab Signal Processing Toolbox gibt es die Funktion fftfilt(), die auf der
overlap-add-Methode basiert. Es exisitiert noch ein anderes Segmentierverfahren (overlapsave).
Segmente mit M Abtastwerten
x[n]
M
xN[n]
M
h[n]
N+1
M
M
L-M
Nullen
L-N-1 Nullen
M
L > M+N
L-Punkt-FFT => Multiplikation XL[m]·HL[m] => L-Punkt-IFFT
yL[n]
L
L
L
overlap!
y[n]
Abbildung 3.13:
75880278 / 14.05.16
M
M
M
M
FFT-Echtzeitsignalverarbeitung mit der overlap-add-Methode.
Seite 15 / 15
Rumc&Hhrt@ZSN@SoE@ZHAW
Herunterladen