MATLABr-Programmierung · 1Eingaben in MATLABr sollten keine deutschen Sonderzeichen wie ¨a, ¨o,...

229
G. Doblinger MATLAB -Programmierung in der digitalen Signalverarbeitung 0.1 0.2 0.3 0.4 0.5 0 1 2 3 4 5 g[n] g[n] g[n] g[n] FFT FFT FFT FFT Frequency (kHz) Time (sec.) c Gerhard Doblinger, 2014

Transcript of MATLABr-Programmierung · 1Eingaben in MATLABr sollten keine deutschen Sonderzeichen wie ¨a, ¨o,...

Page 1: MATLABr-Programmierung · 1Eingaben in MATLABr sollten keine deutschen Sonderzeichen wie ¨a, ¨o, ¨u,ß enthalten, wenn die Programme auch im nichtdeutschsprachigen Raum eingesetzt

G. Doblinger

MATLABr-Programmierung

in der digitalen Signalverarbeitung

0.1 0.2 0.3 0.4 0.50

1

2

3

4

5

g[n] g[n] g[n] g[n]

FFT FFT FFT FFT

Fre

quen

cy (

kH

z)

Time (sec.)

c© Gerhard Doblinger, 2014

Page 2: MATLABr-Programmierung · 1Eingaben in MATLABr sollten keine deutschen Sonderzeichen wie ¨a, ¨o, ¨u,ß enthalten, wenn die Programme auch im nichtdeutschsprachigen Raum eingesetzt

MATLABr-Programmierungin der digitalen Signalverarbeitung

Dr. Gerhard DoblingerInstitute of TelecommunicationsTechnische Universitat WienGusshausstr. 25/389A-1040 Wien

Tel. 58801 38927, Fax 58801 38999Email: [email protected]: www.nt.tuwien.ac.at/about-us/staff/gerhard-doblinger/

c© Gerhard Doblinger, Technische Universitat Wien, 2014

Copyright-Notiz:

Dieses Buch ist in gedruckter Form von 2001 bis 2014 im J. Schlembach Fachver-lag Wilburgstetten, D-91634, unter ISBN 3-935340-02-8 erschienen. Mit Schreibendes Verlags vom 20.9.2014 wurden die Rechte an diesem Buch an den Autor un-eingeschrankt zuruckgegeben. Das Buch wird ab sofort nur als PDF-Dokumentaufgelegt.

Dieses Werk einschließlich aller seiner Teile ist urheberrechtlich geschutzt. AlleRechte, insbesondere die Vervielfaltigung, Verbreitung und Ubersetzung liegenbeim Autor. Kein Teil des Werkes darf ohne Genehmigung des Autors, auch nichtfur Unterrichtszwecke, fotokopiert oder durch andere Verfahren reproduziert undverbreitet werden. Eine Einspeicherung und Verarbeitung in Netzwerken (Internet)darf ohne Genehmigung des Autors nicht vorgenommen werden.

MATLABr ist ein eingetragenes Warenzeichen der Firma The MathWorks, Inc.,USA.

Page 3: MATLABr-Programmierung · 1Eingaben in MATLABr sollten keine deutschen Sonderzeichen wie ¨a, ¨o, ¨u,ß enthalten, wenn die Programme auch im nichtdeutschsprachigen Raum eingesetzt

Vorwort

In allen Bereichen der Informationstechnik und der Telekommunikation breitet sichder Einsatz der Digitalisierung mit rasanter Geschwindigkeit aus. Mobilfunk, digi-taler Rundfunk und vor allem das globale Netzwerk Internet benotigen eine digitaleSpeicherung, Ubertragung und Verarbeitung analoger Signale. Von Forschern undIngenieuren auf dem Gebiet der digitalen Signalverarbeitung wird heute voraus-gesetzt, daß sie beim Systementwurf umfangreiche Simulationen der eingesetzten,hochkomplexen Algorithmen vornehmen. Dazu werden eine Fulle von Programm-paketen angeboten, die dem Anwender vor allem die Programmierung von Stan-dardaufgaben und die Visualisierung der Daten erleichtern. Ein weitverbreitetesund leistungsfahiges Programmpaket ist MATLABr. Es stellt nicht nur schlussel-fertige Losungen fur viele Standardaufgaben zur Verfugung, sondern ermoglichtauch durch eine universelle Programmentwicklung maßgeschneiderte Losungen.Wegen der Komplexitat muß sich ein Anwender die MATLABr-Kenntnisse aller-dings meist muhsam durch das Studium der sehr umfangreichen Dokumentationaneignen.

Hier bietet das vorliegende Buch in kompakter Form einen rascheren Einstieg.Anhand grundlegender Problemstellungen und ausgewahlter Anwendungen derdigitalen Signalverarbeitung kann Schritt fur Schritt der effiziente Einsatz derMATLABr-Programmierung erlernt werden. Die dabei gewahlte Methodik be-steht aus einer theoretischen Einfuhrung zu jeder Gruppe von Aufgaben und ausMusterlosungen, die als Starthilfe fur das Kennenlernen der jeweils verwendetenMATLABr-Befehle dienen.

Das Buch ist anhand des Skriptums zu einer Lehrveranstaltung entstanden, dieich seit 1994 an der Technischen Universitat Wien abhalte. Dabei wird das Zielverfolgt, den Studenten neben der theoretischen Ausbildung auf dem Gebiet derdigitalen Signalverarbeitung die Moglichkeit zum anwendungsbezogenen Umgangmit den Methoden und Algorithmen anzubieten. Daher ist dieses Buch auch alsBruckenschlag zwischen Theorie und Praxis anzusehen, mit einer Stoffauswahl, diesich nicht nur auf Standardwissen der digitalen Signalverarbeitung beschrankt. Dasvorliegende Buch ist daher meiner Meinung nach auch fur die Weiterbildung vonIngenieuren in der Praxis gut geeignet.

Page 4: MATLABr-Programmierung · 1Eingaben in MATLABr sollten keine deutschen Sonderzeichen wie ¨a, ¨o, ¨u,ß enthalten, wenn die Programme auch im nichtdeutschsprachigen Raum eingesetzt

iv Vorwort

Ein großer Teil dieses Buches besteht aus Aufgaben, mit denen die MATLABr-Programmierung vertieft wird und die fast alle anwendungsorientiert sind. DieGrundlagen fur die Bearbeitung der einzelnen Aufgaben werden zwar knapp aberhoffentlich verstandlich prasentiert. Trotzdem werden grundlegende Kenntnisse derdigitalen Signalverarbeitung vorausgesetzt, die in jedem Standardwerk auf diesemGebiet zu finden sind. Schnelleser konnen gerne einzelne Kapitel uberspringen undsich auf Aufgaben ihrer Wahl beschranken, wenn auch zu bedenken ist, daß Schwie-rigkeit und Umfang proportional zur Seitenzahl zunehmen. Zum Verstandnis derProgrammbeispiele ist es sicher vorteilhaft, die Kurzbeschreibung der MATLABr-Syntax im Anhang zu lesen. Ansonsten sollte man Programmieren nicht durchLesen, sondern durch Programmieren lernen!

Die Programmbeispiele dieses Buches, die Losungen zu den umfangreicherenAufgaben und andere nutzliche Programme sind unter

www.nt.tuwien.ac.at/about-us/staff/gerhard-doblinger/

zu finden. Fur diese Programme wird jedoch keine Garantie fur deren richti-ge Funktion ubernommen. Der Einsatz dieser Programme ist ausschließlich furden Ausbildungsbereich und nicht fur eine kommerzielle Verwertung gedacht. DieVerfugbarkeit der Losungen sollte nicht den Reiz der Suche nach eigenen Pro-blemlosungen vermindern. Es gibt daher auf meiner Internetseite auch eine Samm-lung von Aufgaben, deren Losung nicht publik gemacht wird und die z.B. furSeminararbeiten vorgesehen sind.

Zum Abschluß mochte ich mich sehr gerne bei meinen Kollegen und Studentenbedanken, die mir bei den Vorarbeiten zu diesem Buch in hohem Maße geholfenhaben. Mein besonderer Dank gilt Herrn Prof. W. Mecklenbrauker fur seine zahlrei-chen Beitrage und Diskussionen auf dem Gebiet der digitalen Signalverarbeitung,Herrn Dr. R. Sucher fur die engagierte Mithilfe bei der Verfassung des Skriptumszur erwahnten Lehrveranstaltung und Herrn Dr. M. Lang fur seine exzellentenBeitrage uber Optimierungsmethoden zum Entwurf digitaler Filter. Mein Dankgeht auch an Herrn Prof. H. W. Schußler. Die Stoffauswahl und anschauliche Dar-stellung der digitalen Signalverarbeitung in seinen Buchern und Skripten habenmich bei der Verfassung dieses Buches sehr inspiriert. Bei Herrn Dr. J. Schlembachvom Verlag mochte ich mich fur die bewahrte Unterstutzung und Bereitwilligkeitzur Publikation dieses Buches sehr herzlich bedanken.

Wien, im Marz 2001 G. Doblinger

Page 5: MATLABr-Programmierung · 1Eingaben in MATLABr sollten keine deutschen Sonderzeichen wie ¨a, ¨o, ¨u,ß enthalten, wenn die Programme auch im nichtdeutschsprachigen Raum eingesetzt

Inhaltsverzeichnis

1 Zeitdiskrete Signale 1

1.1 Erzeugung elementarer Signale . . . . . . . . . . . . . . . . . . . . 2

1.2 Zeitachsentransformationen . . . . . . . . . . . . . . . . . . . . . . 7

1.3 Faltungsoperation fur zeitdiskrete Signale . . . . . . . . . . . . . . 16

2 Zeitdiskrete Systeme 27

2.1 Beschreibung durch Faltungsoperation . . . . . . . . . . . . . . . . 28

2.2 Beschreibung im Frequenzbereich . . . . . . . . . . . . . . . . . . . 34

2.3 Beschreibung durch Differenzengleichung . . . . . . . . . . . . . . . 41

2.4 Zustandsraumbeschreibung . . . . . . . . . . . . . . . . . . . . . . 54

3 Diskrete Fouriertransformation 63

3.1 Interpolation im Frequenzbereich . . . . . . . . . . . . . . . . . . . 67

3.2 Dezimation im Frequenzbereich . . . . . . . . . . . . . . . . . . . . 69

3.3 Fenstereffekt bei der DFT . . . . . . . . . . . . . . . . . . . . . . . 71

3.4 Zyklische Faltung . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72

3.5 Overlap-Add und Overlap-Save Methode . . . . . . . . . . . . . . . 75

3.6 Chirp-DFT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78

4 Entwurf digitaler Filter 83

4.1 FIR-Filterentwurf . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83

4.1.1 Frequenzabtastungsmethode . . . . . . . . . . . . . . . . . . 87

4.1.2 Methode der kleinsten Quadrate . . . . . . . . . . . . . . . 89

4.1.3 Fenstermethode . . . . . . . . . . . . . . . . . . . . . . . . . 91

4.1.4 Optimaler Entwurf mit dem Remez-Algorithmus . . . . . . 95

4.1.5 FIR-Filter mit geringer Signalverzogerung . . . . . . . . . . 99

Page 6: MATLABr-Programmierung · 1Eingaben in MATLABr sollten keine deutschen Sonderzeichen wie ¨a, ¨o, ¨u,ß enthalten, wenn die Programme auch im nichtdeutschsprachigen Raum eingesetzt

vi Inhaltsverzeichnis

4.2 IIR-Filterentwurf . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107

4.2.1 Approximation der Impulsantwort . . . . . . . . . . . . . . 107

4.2.2 Bilineare Z-Transformation . . . . . . . . . . . . . . . . . . 113

4.2.3 Frequenztransformationen . . . . . . . . . . . . . . . . . . . 120

4.2.4 Least-Squares-Approximation von Frequenzgangen . . . . . 123

5 Multiratenfilterbanke und Wavelets 127

5.1 Cosinusmodulierte Filterbanke . . . . . . . . . . . . . . . . . . . . 129

5.1.1 Entwurf aquidistanter Filterbanke . . . . . . . . . . . . . . 129

5.1.2 Entwurf nichtaquidistanter Filterbanke . . . . . . . . . . . . 136

5.2 DFT-Filterbanke . . . . . . . . . . . . . . . . . . . . . . . . . . . . 144

5.3 Wavelet-Transformation . . . . . . . . . . . . . . . . . . . . . . . . 151

5.3.1 Diskrete Wavelet-Transformation (DWT) . . . . . . . . . . 151

5.3.2 Zeitdiskrete Wavelet-Transformation (DTWT) . . . . . . . 154

5.3.3 Signalentstorung mit Wavelets . . . . . . . . . . . . . . . . 168

6 Anwendungen aus dem Bereich der Audiotechnik 173

6.1 Pitch- und Zeitskalierung mit der DFT-Filterbank . . . . . . . . . 174

6.1.1 Pitch-Skalierung . . . . . . . . . . . . . . . . . . . . . . . . 174

6.1.2 Zeitskalierung . . . . . . . . . . . . . . . . . . . . . . . . . . 179

6.2 Entstorung verrauschter Audiosignale . . . . . . . . . . . . . . . . 182

A Kurzbeschreibung der MATLABr Syntax 191

A.1 Vektoren und Matrizen . . . . . . . . . . . . . . . . . . . . . . . . . 192

A.2 Cell-Arrays und Strukturen . . . . . . . . . . . . . . . . . . . . . . 194

A.3 Steuerung des Programmablaufs . . . . . . . . . . . . . . . . . . . 197

A.4 MATLABr-Funktionen . . . . . . . . . . . . . . . . . . . . . . . . 199

A.5 Verwendung von eval() und feval() . . . . . . . . . . . . . . . . 200

B Formeln fur Fourier- und Z-Transformation 203

B.1 Fourierreihen zeitdiskreter periodischer Signale . . . . . . . . . . . 204

B.2 Fouriertransformation zeitdiskreter Signale . . . . . . . . . . . . . 205

B.3 Diskrete Fouriertransformation (DFT) . . . . . . . . . . . . . . . . 206

B.4 Z–Transformation . . . . . . . . . . . . . . . . . . . . . . . . . . . 208

B.5 Systeme mit Mehrfachtaktverarbeitung . . . . . . . . . . . . . . . . 211

Literatur 213

Page 7: MATLABr-Programmierung · 1Eingaben in MATLABr sollten keine deutschen Sonderzeichen wie ¨a, ¨o, ¨u,ß enthalten, wenn die Programme auch im nichtdeutschsprachigen Raum eingesetzt

Inhaltsverzeichnis vii

Glossar 217

Index 219

Page 8: MATLABr-Programmierung · 1Eingaben in MATLABr sollten keine deutschen Sonderzeichen wie ¨a, ¨o, ¨u,ß enthalten, wenn die Programme auch im nichtdeutschsprachigen Raum eingesetzt

viii Inhaltsverzeichnis

Page 9: MATLABr-Programmierung · 1Eingaben in MATLABr sollten keine deutschen Sonderzeichen wie ¨a, ¨o, ¨u,ß enthalten, wenn die Programme auch im nichtdeutschsprachigen Raum eingesetzt

1

Zeitdiskrete Signale

Im Gegensatz zur analogen Signalverarbeitung, in der Signale zeitkontinuierlichund fur alle Zeitwerte definiert sind, werden in der digitalen Signalverarbeitungzeitdiskrete Signale verwendet. Diese Signale sind nur zu diskreten Zeitwerten de-finiert, wobei die Zeitpunkte durch einen Zeitindex n durchnumeriert werden. Einzeitdiskretes Signal kann demnach als Folge x[n] oder xn von Amplitudenwertenaufgefaßt werden. Die Amplitudenwerte konnen reell- oder komplexwertige, skalareoder vektorielle Großen sein. In diesem Kapitel werden eindimensionale, skalare Si-gnale behandelt, die jedoch komplexwertig sein konnen. Der Index n reprasentiertstets die (diskrete) Zeitachse. Die Amplitudenachse kann bei Simulationen mitMATLABr als wertkontinuierlich vorausgesetzt werden, da die Rechengenauigkeitim verwendeten Gleitkommaformat etwa 15 Dezimalstellen betragt.

Ein zeitdiskretes Signal kann als Funktion x(n) reprasentiert werden, wobeiin der Notation nicht zwischen Funktion und Funktionswert unterschieden wird,d.h. x(n) ist sowohl der gesamte Funktionsverlauf, als auch der Funktionswert zumZeitpunkt n. Eine gebrauchliche graphische Darstellung eines zeitdiskreten Signalsals Funktion x(n) ist in Abb. 1.1 gezeigt.

Die verwendete Notation entspricht auch der von MATLABr-Vektoren, wodie Amplitudenwerte z.B. im Vektor x und die Zeitwerte im Vektor n gespeichertwerden. Ist n eine skalare Große, dann ist x(n) der Signalwert an der Stelle n. Wennn ein Vektor ist, dann beschreibt x(n) den gesamten gespeicherten Signalverlauf(oder einen Teil davon, falls n nicht alle Vektorelemente umfaßt). Allerdings ist inMATLABr zu beachten, daß der Index der Vektorelemente nur Werte großer alsnull annehmen darf, d.h. der Zeitindex n stimmt mit dem Elementindex bis aufeine Verschiebung (Offset) uberein.

Page 10: MATLABr-Programmierung · 1Eingaben in MATLABr sollten keine deutschen Sonderzeichen wie ¨a, ¨o, ¨u,ß enthalten, wenn die Programme auch im nichtdeutschsprachigen Raum eingesetzt

2 1 Zeitdiskrete Signale

Zeitindex n

x(n)

1086420-2-4-6-8-10

1

0.5

0

-0.5

-1

Abbildung 1.1: Graphische Darstellung eines zeitdiskreten Signals

1.1 Erzeugung elementarer Signale

Durch die Vektor- und Matrizenoperationen von MATLABr konnen die mei-sten elementaren Signale mit wenigen Programmzeilen und ohne Verwendungvon Schleifen generiert werden. Da MATLABr fur die Blockverarbeitung opti-miert ist, sollten moglichst viele Teile eines Programms vektorisiert werden. Nurdann werden mit MATLABr Programmausfuhrzeiten erreicht, die an jene vonC-Programmen heranreichen.

Mit der folgenden Eingabe im Kommandofenster der MATLABr-Umgebungkann das in Abb. 1.1 gezeigte Signal erzeugt werden:1

n = -10:10; % create a row vector n containing integers

% (time points) -10, -9 , ... 9, 10

n = n.’; % transpose vector n to column vector

x = 0.8 * sin(2*pi/10*n); % create a sinusoidal signal stored in

% column vector x

stem(n,x); % discrete-time plot

In diesem Beispiel wird der Vektor n zur Speicherung der Zeitachse verwendet. Beider Erzeugung des sinusformigen Signals wird fur das erste Vektorelement x(1) derZeitindex n = −10 verwendet, fur x(2) n = −9 und so fort. Dieser Unterschied inder Indizierung ist wichtig, wenn Signalwerte und Zeitpunkte zugeordnet werden.Die Darstellung der Signale in einem Graphikfenster erfolgt hier mit der Funktionstem(). Weitere Informationen, wie z.B. Achsenbeschriftung erhalt man mit helpplot, help title, help xlabel, help ylabel.2

1Eingaben in MATLABr sollten keine deutschen Sonderzeichen wie a,o,u,ß enthalten, wenndie Programme auch im nichtdeutschsprachigen Raum eingesetzt werden sollen. Die in Englischverfaßten Kommentare sollen daran erinnern.

2Auf die umfangreichen graphischen Moglichkeiten mit MATLABr wird hier nicht eingegan-gen. Die MATLABr-Dokumentation “Using MATLAB Graphics” bietet dazu eine umfassendeEinfuhrung.

Page 11: MATLABr-Programmierung · 1Eingaben in MATLABr sollten keine deutschen Sonderzeichen wie ¨a, ¨o, ¨u,ß enthalten, wenn die Programme auch im nichtdeutschsprachigen Raum eingesetzt

1.1 Erzeugung elementarer Signale 3

Mit MATLABr konnen Vektorelemente einfach manipuliert werden, so daßelementare Signale elegant und ohne großen Programmieraufwand erzeugt werdenkonnen:

nx = 20;

x1 = zeros(1,nx); % create a row vector of 20 zeros

i1 = 1:2:nx; % row vector of odd integers (1,3,5,...19)

x1(i1) = 1; % set every other element of x1 to one

stem(x1); % plot x1

x2 = zeros(1,nx);

i2 = 1:10;

x2(i2) = 1; % create a rectangular impulse signal

stem(x2);

In den beiden folgenden Beispielen wird der find-Befehl verwendet, um Signal-segmente zu verandern:

n = -20:20;

x = sin(0.1*pi*n);

x1 = x;

i1 = find(x1 < 0); % find indices of x1 where vector

% components are negative

x1(i1) = 0; % replace negative signal parts by zeros

stem(n,x1);

x2 = 2 * x;

i2p = find(x2 > 1);

i2n = find(x2 < -1);

x2(i2p) = 1; % clip positive half waves

x2(i2n) = -1; % clip negative half waves

stem(n,x2);

Schließlich konnen auch mit logischen Operationen sehr einfach zweistufige(binare) Signale erzeugt werden:

n = -20:20;

x = sin(0.1*pi*n);

x1 = (x > 0); % x1 is set to 1 where x > 0, and x1 = 0

% elsewhere, i.e. a square wave is created

% from the original sinusoid

stem(n,x1);

N = 5;

x2 = (rem(n,N) == 0); % x2 = 1 at multiples of N, i.e. a unit

% pulse train with period N is generated

% (rem() is the modulo operation)

stem(n,x2);

Page 12: MATLABr-Programmierung · 1Eingaben in MATLABr sollten keine deutschen Sonderzeichen wie ¨a, ¨o, ¨u,ß enthalten, wenn die Programme auch im nichtdeutschsprachigen Raum eingesetzt

4 1 Zeitdiskrete Signale

Diese wenigen Beispiele fur die Verwendung einiger grundlegender MATLABr-Befehle genugen fur die Losung der folgenden Aufgabe. Bevor Sie die Losungder ersten Aufgaben versuchen, lesen Sie bitte die Kurzfassung der MATLABr-Syntax im Anhang. Alle Aufgaben sollen zunachst interaktiv bearbeitet werden.Die Alternative ware das Speichern der Befehle in einem File (z.B. mit dem Namenaufgabe1_1.m). Durch Aufruf des File-Namens (ohne Erweiterung .m) wird dieBefehlsfolge abgearbeitet.

Zur Protokollierung der interaktiven Eingaben wird zu Beginn der MATLABr-Sitzung mit diary protokoll.txt die Protokolldatei protokoll.txt angelegt.Am Ende der Sitzung wird diese Datei mit diary off gespeichert und steht dannals normale Textdatei zur Verfugung.

Mit dem HELP DESK oder mit dem Help-Befehl (z.B. help rem) erhaltman eine vielfach ausreichende Online-Hilfe zu MATLABr, so daß sich ein Nach-schlagen in dicken Handbuchern erubrigt. Die elektronische Dokumentation istim HTML-Format und als PDF-Files verfugbar und ist mit einer umfangreichenSuchfunktion ausgestattet.

Fur eine okonomische Tastaturbedienung konnen die Editiermoglichkeitender Eingabezeile mit den Cursor-Tasten eingesetzt werden. So werden beispiels-weise mit ↑ und ↓ die vorherigen Befehle in die Eingabezeile geholt, die auch mit← und → editiert werden konnen. Die weiteren Moglichkeiten hangen von derTastaturkonfiguration ab und variieren von Betriebssystem zu Betriebssystem.

Aufgabe 1.1

Fur die folgenden zeitdiskreten Signale soll der Zeitbereich n ∈ [−20, 20]verwendet werden. Stellen Sie alle Signale graphisch am Bildschirm dar.

x1(n) = δ(n) (Einsimpuls)

x2(n) = σ(n) (Sprungfunktion)

x3(n) = (−1)n

x4(n) =

0 n ≤ 0

n n > 0

x5(n) =

−5 n ≤ −5n −5 < n < 5

5 n ≥ 5

Probieren Sie insbesondere bei den zweistufigen Signalen mehrere Losun-gen aus.

Page 13: MATLABr-Programmierung · 1Eingaben in MATLABr sollten keine deutschen Sonderzeichen wie ¨a, ¨o, ¨u,ß enthalten, wenn die Programme auch im nichtdeutschsprachigen Raum eingesetzt

1.1 Erzeugung elementarer Signale 5

Ein besonderes Signal ist die zeitdiskrete Sinus- oder Cosinusschwin-gung, deren zeitkontinuierliches Gegenstuck ja der Prototyp eines periodischenSignals ist. In der folgenden Aufgabe sollen Sie untersuchen, ob diese Aussageauch im zeitdiskreten Fall gultig ist.

Aufgabe 1.2

Die zeitdiskrete Cosinusschwingung mit der “Frequenz” θ sei gegebendurch

x(n) = cos θn mit n ∈ [−20, 20].Fur welche Werte θ ist x(n) periodisch? Wie hangt θ mit der Anzahl derSignalwerte pro Periode zusammen? Variieren Sie θ im Intervall [0, 2π]und kommentieren Sie das Ergebnis.Welche Bedeutung haben die Werte θ = π und θ = 2π, wenn x(n)durch Abtastung des analogen Signals xa(t) = cosωt zustande kommt,d.h. x(n) = xa(nT )?

Ein weiteres Beispiel eines wichtigen Signals ist die zeitdiskrete Exponen-tialschwingung

x(n) = αn n ≥ 0, (1.1)

die im Analogbereich dem Verlauf xa(t) = e−tτ , t ≥ 0, entspricht. Im Gegensatz

zum analogen Signal tritt im zeitdiskreten Fall fur α < 0 ein oszillierendes Verhal-ten auf. Mit den Vektorverarbeitungsmoglichkeiten von MATLABr kann diesesSignal durch die Anweisungen

n = 0:20; % vector of time points 0, 1, 2 ... 20

alpha = 0.9;

x = alpha .^ n; % operator .^ performs a componentwise

% exponentiation

stem(n,x);

erzeugt werden, wobei durch den Potenzoperator .^ die skalare Große α hocheinem Vektor (hier n) genommen wird. Das bedeutet, daß mit einem einzigenBefehl alle Potenzen α0, α1, . . . α20 berechnet werden konnen. Diese Syntax zurVerknupfung von Vektoren, die auch elementweise Operationen zulaßt, ist eineder Hauptvorzuge von MATLABr. Mit der folgenden Aufgabe konnen Sie sichmit dieser Notation vertraut machen.

Page 14: MATLABr-Programmierung · 1Eingaben in MATLABr sollten keine deutschen Sonderzeichen wie ¨a, ¨o, ¨u,ß enthalten, wenn die Programme auch im nichtdeutschsprachigen Raum eingesetzt

6 1 Zeitdiskrete Signale

Aufgabe 1.3

Verwenden Sie die bisher vorgestellten MATLABr-Befehle, um die fol-genden Signale zu erzeugen. Dabei soll n ∈ [−20, 20] sein und α in [−1, 1]liegen.

x1(n) = αnσ(n)

x2(n) = (n+ 1)αnσ(n)

x3(n) = α|n|

x4(n) =

0 n < 0

1− αn 0 ≤ n < 10

1− α10 n ≥ 10

x5(n) = σ(n)n∑

k=0

αk

Die Berechnung einer Summe mit MATLABr haben Sie noch nicht ken-nengelernt, so daß Sie diese spezielle Summe eben anders berechnenmussen!

Die Behandlung elementarer zeitdiskreter Signale soll durch einige Beispielekomplexwertiger Signale abgeschlossen werden. In MATLABr sind die Varia-blen i und j als

√−1 vordefiniert. Werden diese Variablennamen jedoch bereits

in einem anderen Zusammenhang (z.B. als Indizes) verwendet, dann mussen siedurch eine der Anweisungen i = sqrt(-1), j = sqrt(-1), clear i, clear j

wieder neu definiert werden.

n = 0:40;

x = 0.9 .^ n;

x1 = x .* exp(0.1*pi*j*n); % create a damped complex exponential

% signal (.* means componentwise

% multiplication)

x2 = x1.’; % .’ takes transpose of x1

x3 = x1’; % but ’ alone takes complex conjugate

% transpose of x1

[x2(1:10) x3(1:10)] % display the first 10 components of

% both vectors on screen (observe

% the difference)

x2 = x1 + conj(x1); % x2 = 2*real(x1)

stem(x2); stem(real(x1)); stem(imag(x1));

Page 15: MATLABr-Programmierung · 1Eingaben in MATLABr sollten keine deutschen Sonderzeichen wie ¨a, ¨o, ¨u,ß enthalten, wenn die Programme auch im nichtdeutschsprachigen Raum eingesetzt

1.2 Zeitachsentransformationen 7

Aufgabe 1.4

Erzeugen Sie fur n ∈ [−20, 20] die folgenden Signale:

x1(n) = ejπn

x2(n) =sin 0.1πn

πnej0.3πn

x3(n) = ej0.01πn2

Bestimmen Sie mit den MATLABr-Befehlen abs() und angle() denjeweiligen Betrags- und Phasenverlauf der Signale.

1.2 Zeitachsentransformationen

Eine Vielzahl von wichtigen Signalverarbeitungsalgorithmen bezieht sich auf Trans-formationen der Zeitachse. Beispiele sind Filteroperationen oder die Taktraten-umsetzung bei zeitdiskreten Signalen. Die einfachsten Zeitachsentransformationensind die Zeitverschiebung in Form der Signalverzogerung und der Signalvorei-lung, sowie die Zeitinversion. Diese Operationen sind wegen der einfachen digita-len Signalspeicherung im Gegensatz zur analogen Signalverarbeitung ohne großenAufwand zu realisieren.

In Abb. 1.2 und Abb. 1.3 sind diese beiden elementaren Signaloperationengraphisch dargestellt. Will man diese Zeitachsentransformationen mit MATLABr

durchfuhren, so muß die bereits erwahnte Tatsache berucksichtigt werden, daß dieElementindizes von Vektoren nicht null oder negativ werden durfen. Man wirddaher den Zeitursprung n = 0 so wahlen, daß er z.B. dem Index des mittlerenElements des Signalvektors entspricht.

Das Verschieben eines Signals entlang der Zeitachse kann mit MATLABr ei-nerseits durch Einfugen von Nullen erzielt werden:

x = 0.8 .^ [0:20]; % create exponentially decaying signal

Nd = 10; % time delay in samples

y = [zeros(1,Nd-1),x]; % add Nd-1 leading zeros to delay signal

stem(y);

Eine andere Moglichkeit ist die geeignete Platzierung des Signalvektors x im Er-gebnisvektor y, der anfangs mit Nullen initialisiert wird. Zur Vermeidung vonMATLABr-Fehlermeldungen muß der Vektor y am Beginn genugend viele Nullenenthalten. Damit wird erreicht, daß das Signal x beim Speichern in y nicht uberdie Grenzen von y geschoben wird.

Page 16: MATLABr-Programmierung · 1Eingaben in MATLABr sollten keine deutschen Sonderzeichen wie ¨a, ¨o, ¨u,ß enthalten, wenn die Programme auch im nichtdeutschsprachigen Raum eingesetzt

8 1 Zeitdiskrete Signale

n0 1 2 3 4 5 6 7 8 9−1−2−3−4−5−6−7

n0 1 2 3 4 5 6 7 8 9−1−2−3−4−5−6−7

n0 1 2 3 4 5 6 7 8 9−1−2−3−4−5−6−7

x(n+ k)

k = 4

k = 5

(k > 0)

n → n+ k

Voreilung

(k > 0)

n → n− k

Verzogerung

x(n− k)

x(n)

Abbildung 1.2: Zeitverschiebung bei zeitdiskreten Signalen

y = zeros(1,40);

n = [0:20];

x = 0.8 .^ n; % create exponentially decaying signal

Nd = 10; % time delay in samples

y(n+Nd+1) = x; % y contains x delayed by Nd samples

stem(y);

Die Zeitinversion laßt sich mit MATLABr dadurch erzeugen, daß nach derSignalspeicherung im Vektor x, die Elemente in umgekehrter Reihenfolge demVektor entnommen werden:

n = -20:20;

x = 0.8 .^ [0:20]; % create a row vector of exponentially

% decaying signal samples

x = [zeros(1,20) x]; % add leading zeros to vector x to shift

% time origin

x_rev = x(end:-1:1); % perform time-inversion by reversing

% order of vector components

% Note: end = index of last x-component

Page 17: MATLABr-Programmierung · 1Eingaben in MATLABr sollten keine deutschen Sonderzeichen wie ¨a, ¨o, ¨u,ß enthalten, wenn die Programme auch im nichtdeutschsprachigen Raum eingesetzt

1.2 Zeitachsentransformationen 9

n0 1 2 3 4 5 6 7 8 9−1−2−3−4−5−6−7

n0 1 2 3 4 5 6 7 8 9−1−2−3−4−5−6−7

x(−n)

x(n)

Abbildung 1.3: Zeitumkehr bei zeitdiskreten Signalen

figure, stem(n,x); % figure opens a new plot window

figure, stem(n,x_rev);

Mit der Zeitverschiebung konnen durch periodische Fortsetzung eines zeitlichbegrenzten Signals x(n), n ∈ [0, N − 1], periodische Signale xp(n) erzeugt wer-den:

xp(n) =

∞∑

k=−∞

x(n− kN) = x(n⊕N) (1.2)

(⊕ ist die Modulooperation).

Da in MATLABr alle Signale endliche Dauer haben, ist bei der Verarbei-tung periodischer Signale zu beachten, daß keine Randeffekte entstehen. Die Vek-torlange sollte daher ein ganzzahliges Vielfaches der Periodendauer N sein:

N = 20; % period

n = 0:N-1;

x = 0.7 .^ n; % finite length signal

n = 0:4*N-1;

xp = x(rem(n,N)+1); % use modulo operation rem() to periodically

% extend signal x

stem(n,xp);

Bei der Zeitverschiebung periodischer Signale, die auch als zyklische Zeitver-schiebung bezeichnet wird, muß ebenfalls die Modulooperation eingesetzt werden,um die periodischen Fortsetzungen in den betrachteten Signalausschnitt zu schie-ben. Das Nachschieben von Nullen, wie bei aperiodischen Signalen, darf daher bei

Page 18: MATLABr-Programmierung · 1Eingaben in MATLABr sollten keine deutschen Sonderzeichen wie ¨a, ¨o, ¨u,ß enthalten, wenn die Programme auch im nichtdeutschsprachigen Raum eingesetzt

10 1 Zeitdiskrete Signale

periodischen Signalen nicht angewendet werden! Das folgende Beispiel zeigt einezyklische Zeitverschiebung mit MATLABr:

N = 20; % period

Nd = 10; % time-shift in samples

n = 0:N-1;

x = 0.7 .^ n; % finite length signal

n = 0:4*N-1;

xp = x(rem(n+Nd,N)+1); % cyclic time-shift by Nd samples

stem(n,xp);

Bei der Zeitverschiebung periodischer Signale kann der Zeitindex null odernegativ werden, was zu Fehlermeldungen in MATLABr fuhrt. Durch Addition derPeriodendauer zur Signalverzogerung laßt sich das jedoch einfach vermeiden:

xp(n−Nd) = x((n−Nd)⊕N) = x(n+N −Nd)⊕N) (1.3)

(mit 0 ≤ Nd ≤ N).

Mit der folgenden Aufgabe konnen die bisher besprochenen Zeitachsentransfor-mationen an einfachen Signalen angewendet werden. Die Ergebnisse der Simulatio-nen mit MATLABr sollten stets mit analytisch gewonnenen Resultaten verglichenwerden.

Aufgabe 1.5

Fur das zu betrachtende Zeitintervall wird wieder n ∈ [−20, 20] gewahlt.Beachten Sie, daß bei elementweisen arithmetischen Verknupfungen vonVektoren die Vektorlangen und die Art (Zeilen- oder Spaltenvektor)ubereinstimmen mussen. Mit Ausnahme von Addition und Subtraktionmuß der Punktoperator (also .* oder ./ oder .^) fur die elementweisenOperationen angewendet werden.

x1(n) = σ(n+ 4)− σ(n− 4)

x2(n) = e−0.1(n+10)σ(n+ 10)

x3(n) =1

2

(

x2(n)± x2(−n))

x4(n) = x2(−n− 10)

x5(n) = x1((n− 4)⊕ 14)

Page 19: MATLABr-Programmierung · 1Eingaben in MATLABr sollten keine deutschen Sonderzeichen wie ¨a, ¨o, ¨u,ß enthalten, wenn die Programme auch im nichtdeutschsprachigen Raum eingesetzt

1.2 Zeitachsentransformationen 11

Neben den bisher vorgestellten elementaren Zeitachsentransformationen gibt esauch solche, die fur fortgeschrittene Signalverarbeitungsaufgaben benotigt werdenund die Dezimation und Interpolation von zeitdiskreten Signalen betref-fen. Diese Operationen werden bei der Abtastratenumsetzung angewendet, aberauch bei der Speicherung und Darstellung von Signalen eingesetzt.

Bei der Dezimation (Unterabtastung) eines zeitdiskreten Signals um den ganz-zahligen Faktor M wird aus dem Signal jeder M -te Amplitudenwert herausgegrif-fen, d.h. x(n) → x(nM). Dadurch wird bei gespeicherten Signalen die Signallangeum den Faktor M reduziert oder bei Echtzeitverarbeitung das Abtastintervall umden Faktor M vergroßert3. Graphisch laßt sich dieser Vorgang wie in Abb. 1.4darstellen.

Originalsignal x(n)

Zeitindex n

20151050-5-10-15-20

1

0.5

0

-0.5

-1

Unterabgetastetes Signal y(m) = x(mM)

Zeitindex m

543210-1-2-3-4-5

1

0.5

0

-0.5

-1

Abbildung 1.4: Graphische Darstellung der Unterabtastung (Dezimation) eineszeitdiskreten Signals x(n) um den Faktor M = 4

Ahnlich wie bei der Abtastung zeitkontinuierlicher Signale kann auch bei derDezimation Aliasing entstehen. Mit der folgenden MATLABr-Simulation konnenSie diesen Sachverhalt (neben Ihrer theoretischen Uberlegung) auch experimentellverifizieren. Durch Variation des Dezimationsfaktors M kann das Einsetzen vonAliasing beobachtet werden.

3Genaugenommen wird ein gespeichertes Signal mit N Werten durch Dezimation mit demFaktor M auf ein Signal mit ceil( N

M) Werten reduziert (z.B. ceil( 41

4) = 11, wie in Abb. 1.4).

Page 20: MATLABr-Programmierung · 1Eingaben in MATLABr sollten keine deutschen Sonderzeichen wie ¨a, ¨o, ¨u,ß enthalten, wenn die Programme auch im nichtdeutschsprachigen Raum eingesetzt

12 1 Zeitdiskrete Signale

n = -40:40; % time indices of sinusoid

theta = pi/20; % relative frequency of sinusoid

x = sin(theta*n);

M = 4; % decimation factor M = 4

y = x(1:M:end); % extract every Mth component out of x

stem(y);

Aufgabe 1.6

Bestimmen Sie den theoretischen Zusammenhang zwischen dem maxi-malen Faktor M und der “Frequenz” θ des Sinussignals x(n) = sin θn,so daß y(m) = x(mM) kein Aliasing aufweist. Kontrollieren Sie Ihr Er-gebnis experimentell mit MATLABr.

Eine Signalunterabtastung kann auch bei der graphischen Darstellung von sehrlangen Signalen, wie z.B. von Sprachsignalen, nutzlich sein. So ist es sicherlichnicht sinnvoll, bei einer Bildschirmauflosung von 640 × 480 Punkten ein Signalmit mehr als etwa 500 Abtastwerten darzustellen. Man wird daher nur jeden M -ten Amplitudenwert zeichnen. Das fuhrt allerdings speziell bei Sprachsignalen zurelativ starken Verfalschungen der Signalstruktur (siehe Abb. 1.5).

Um diesen Effekt zu unterdrucken, kann man einen simplen Algorithmus an-wenden, der das Erscheinungsbild stark unterabgetasteter Sprachsignale wesentlichverbessert. Es werden jeweilsM Abtastwerte zu einem Block zusammengefaßt undfur jeden dieser Blocke das Minimum und Maximum der Amplituden bestimmt.Zeichnet man die Minimum- und Maximumverlaufe in einem Diagramm, so ergibtsich eine Darstellung, die etwa die Einhullende des Sprachsignals zeigt undeine starke Datenreduktion ermoglicht. Im Gegensatz zur reinen Dezimation wirdhier der Sprachsignalverlauf sehr gut wiedergegeben (siehe Abb. 1.6).

Mit MATLABr kann dieses einfache Verfahren zur Datenreduktion sehr kom-pakt implementiert werden (der Vektor x enthalt das Sprachsignal):

Nx = length(x);

Nb = floor(Nx/M); % number of blocks of length M

Nx = M*Nb; % make Nx a multiple of M

X = zeros(M,Nb); % create a M x Nb matrix of zeros

X(:) = x(1:Nx); % each column of X contains a block

% of M consecutive speech samples

xmax = max(X); % xmax = row vector of column maxima of X

xmin = min(X); % xmin = row vector of column minima of X

t = 0:Nb-1;

hold on, area(t,xmax), area(t,xmin), hold off, colormap([0 0.6 1]), grid on

% colored envelope plot using area()

Page 21: MATLABr-Programmierung · 1Eingaben in MATLABr sollten keine deutschen Sonderzeichen wie ¨a, ¨o, ¨u,ß enthalten, wenn die Programme auch im nichtdeutschsprachigen Raum eingesetzt

1.2 Zeitachsentransformationen 13

Originalsprachsignal x(n)

Zeitindex n

120001000080006000400020000

0.5

0

-0.5

Sprachsignal dezimiert um Faktor M = 40

Zeitindex n (dezimiert)

300250200150100500

0.5

0

-0.5

Abbildung 1.5: Graphische Darstellung der Dezimation bei Sprachsignalen

Der Trick bei der blockweisen Minimum- und Maximumbestimmung ist hierdas Speichern des Signalvektors in den Spalten einer Matrix. In MATLABr gibt esdazu den :-Operator, der diese Umorganisation der Daten durchfuhrt. Am bestenlaßt sich das an einem einfachen Beispiel erlautern. Mit den Anweisungen

x = 1:12;

X = zeros(3,4);

X(:) = x;

wird aus dem Zeilenvektor xT = (1, 2, 3, . . . , 12) eine 3× 4 Matrix

X =

1 4 7 10

2 5 8 11

3 6 9 12

gebildet, d.h. der Vektor wird in Blocke der Lange 3 unterteilt, die dann neben-einander als Spalten der Matrix angeordnet werden. Es gibt auch die Umkehrope-ration x = X(:), die die Spalten einer Matrix zu einem Vektor auffadelt.

Das Gegenstuck zur Dezimation von Signalen ist die Interpolation, bei derzwischen den Abtastwerten neue Werte eingefugt werden. Bei einer Interpolati-

Page 22: MATLABr-Programmierung · 1Eingaben in MATLABr sollten keine deutschen Sonderzeichen wie ¨a, ¨o, ¨u,ß enthalten, wenn die Programme auch im nichtdeutschsprachigen Raum eingesetzt

14 1 Zeitdiskrete Signale

Min/Max-Plot (Einhullende) des Sprachsignals

Zeitindex n (dezimiert)

300250200150100500

0.5

0

-0.5

Abbildung 1.6: Datenreduktion durch Min/Max-Berechnung bei der graphischenDarstellung von Sprachsignalen

on um den ganzzahligen Faktor L werden L − 1 Werte eingefugt, so daß bei Si-gnalspeicherung ein Signal der Lange N auf die Lange NL ausgedehnt wird4.Beim Echtzeitbetrieb wird durch Interpolation das Abtastintervall um den Fak-tor L verkurzt. Die einfachste Art der Signalinterpolation ist das Einfugen vonNullen. Eine verbesserte Methode ist das Wiederholen von Signalwerten durcheine Halteoperation (siehe Abb. 1.7). Die besten Ergebnisse erhalt man, wenndie Taktratenerhohung mit einer Signalfilterung kombiniert wird (siehe z.B. dieMATLABr-Funktion resample()).

Um das Einfugen von Nullen mit MATLABr effizient durchzufuhren, kann mandie oben erwahnten Matrizenverarbeitungsmoglichkeiten von MATLABr heranzie-hen. Dazu wird zuerst eine Matrix definiert, deren erste Zeile das gegebene Signalenthalt. An diese Zeile werden L − 1 Zeilen mit Nullen angefugt, wenn mit demFaktor L interpoliert werden soll. Das interpolierte Signal wird dadurch erzeugt,daß mit dem :-Operator alle Spalten dieser Matrix zu einem langen Spaltenvektoraneinandergefugt werden.

n = 0:10; % time indices for signal x

x = sin(0.1*pi*n); % original signal stored in

% row vector x

L = 4;

X = [x; zeros(L-1,length(x))]; % first row of matrix X is x

% append zero matrix to obtain

% desired block matrix

y = X(:); % concatinate all columns of X

stem(y)

4Zu jedem Signalwert (daher auch zum letzten) werden L−1 Nullen angefugt, so daß insgesamtN +N(L− 1) = NL Signalwerte entstehen.

Page 23: MATLABr-Programmierung · 1Eingaben in MATLABr sollten keine deutschen Sonderzeichen wie ¨a, ¨o, ¨u,ß enthalten, wenn die Programme auch im nichtdeutschsprachigen Raum eingesetzt

1.2 Zeitachsentransformationen 15

Originalsignal x(n)

Zeitindex n

109876543210

1

0.5

0

-0.5

-1

Interpolation mit Nullen

Zeitindex n

4035302520151050

1

0.5

0

-0.5

-1

Interpolation mit Halteoperation

Zeitindex n

4035302520151050

1

0.5

0

-0.5

-1

Abbildung 1.7: Graphische Darstellung zweier einfacher Interpolationsmethodendes zeitdiskreten Signals x(n) mit dem Faktor L = 4

Page 24: MATLABr-Programmierung · 1Eingaben in MATLABr sollten keine deutschen Sonderzeichen wie ¨a, ¨o, ¨u,ß enthalten, wenn die Programme auch im nichtdeutschsprachigen Raum eingesetzt

16 1 Zeitdiskrete Signale

In ahnlich effizienter Weise kann auch die zweite Methode der Interpolation,das ist die Wiederholung der Signalwerte, realisiert werden.

Aufgabe 1.7

Modifizieren Sie die vorherigen MATLABr-Befehle fur die Signalinter-polation mit Halteoperation. Dabei wird jeder Signalwert L − 1 malwiederholt (anstelle des Anhangens von L− 1 Nullen).Hinweis: Die benotigte Matrix kann sehr einfach als außeres Produkteines Einsvektors mit dem Signalvektor gebildet werden5.

Fur die Realisierung weiterer Methoden zur Signalinterpolation werden linearedigitale Filter benotigt. Diese Filter liefern die passenden Zwischenwerte, die einenmoglichst “glatten” Signalverlauf ergeben. Die Grundlage zur linearen Signalfilte-rung bildet die Signalfaltung, die im nachsten Abschnitt behandelt wird.

1.3 Faltungsoperation fur zeitdiskrete Signale

Die Faltungsoperation ist eine grundlegende Verknupfung von Signalen, mit zahl-reichen Anwendungsmoglichkeiten. Sie kommt z.B. bei digitalen Filtern zum Ein-satz, bei der Multiplikation von Polynomen und bei der Berechnung von Korre-lationsfunktionen. Fur Signale unendlicher Dauer ist die Faltungsoperation (auchFaltungssumme oder kurz Faltung genannt) folgendermaßen definiert (z.B. [1]):

y(n) =

∞∑

k=−∞

h(k) x(n− k) =∞∑

k=−∞

x(k)h(n− k), n = 0,±1,±2, . . . (1.4)

Graphisch ist die Faltungsoperation an einem einfachen Beispiel in Abb. 1.8 an-schaulich dargestellt. Sind die Signale von endlicher Dauer, wie in MATLABr,dann erstreckt sich die Summation auf ein endliches Intervall und man erhalt mitx(n), n ∈ [0, Nx − 1] und h(n), n ∈ [0, Nh − 1]

y(n) =

min(n,Nh−1)∑

k=max(0,n−Nx+1)

h(k) x(n− k), n = 0, 1, 2, . . . , Nx +Nh − 2. (1.5)

5Ein außeres Produkt ist das Produkt eines Spaltenvektors mit einem Zeilenvektor und ergibteine Matrix. Im Gegensatz dazu liefert das innere Produkt (Zeilenvektor mal Spaltenvektor) eineskalare Große.

Page 25: MATLABr-Programmierung · 1Eingaben in MATLABr sollten keine deutschen Sonderzeichen wie ¨a, ¨o, ¨u,ß enthalten, wenn die Programme auch im nichtdeutschsprachigen Raum eingesetzt

1.3 Faltungsoperation fur zeitdiskrete Signale 17

k

k

kn0

0

0

0

h(n0 − k)

h(k)

h(−k)

0

y(n0)

n0n

...

k

x(k)

0

(a)

(b)

(c)

(d)

(e)

y(n)

Abbildung 1.8: Graphische Darstellung der Faltung y(n) =∑∞

k=−∞ x(k)h(n− k)(Impulsantwort (a), Zeitinversion (b), Zeitinversion+Verschiebung (c), Eingangs-signal (d), Ausgangssignalwert bei n = n0 (e))

Page 26: MATLABr-Programmierung · 1Eingaben in MATLABr sollten keine deutschen Sonderzeichen wie ¨a, ¨o, ¨u,ß enthalten, wenn die Programme auch im nichtdeutschsprachigen Raum eingesetzt

18 1 Zeitdiskrete Signale

Das Faltungsergebnis hat eine Signallange Nx + Nh − 1. Fur die Implemen-tierung der Faltung stehen in MATLABr eigene Funktionen zur Verfugung (siehehelp conv oder help filter), so daß an sich keine eigenen Funktionen entwickeltwerden mussen. Trotzdem ist es eine lehrreiche Aufgabe, die auch wichtige An-wendungen hat, die Faltung mit Hilfe von Matrizen- und Vektoroperationen zurealisieren. Fur einen gegebenen Zeitindex n laßt sich namlich mit

h = (h(0), h(1), . . . , h(Nh − 1))T (1.6)

x(n) = (x(n), x(n− 1), . . . , x(n−Nx + 1))T (1.7)

die Faltungssumme als Skalarprodukt (inneres Produkt) dieser Vektoren darstel-len:

y(n) = hTx(n) = xT (n)h . (1.8)

Faßt man die Faltungsergebnisse fur alle Zeitindizes n zum Vektor

y = (y(0), y(1), . . . , y(Nx +Nh − 2))T (1.9)

zusammen, dann ergibt sichy = Hx . (1.10)

H ist eine Toplitz-Matrix (siehe dazu [2]) der Dimension (Nx+Nh− 1)×Nx. Umdie Struktur dieser Matrix zu zeigen, wird der Fall Nx = 4, Nh = 3 betrachtet:

y(0)

y(1)

y(2)

y(3)

y(4)

y(5)

=

h(0) 0 0 0

h(1) h(0) 0 0

h(2) h(1) h(0) 0

0 h(2) h(1) h(0

0 0 h(2) h(1)

0 0 0 h(2)

x(0)

x(1)

x(2)

x(3)

. (1.11)

In den Spalten von H sind alle moglichen Zeitverschiebungen von h(n) gespei-chert. Fur die Erzeugung der Toplitz-Matrix gibt es in MATLABr verschiedeneMoglichkeiten. Die einfachste ist die Verwendung einer FOR-Schleife, in der h(n)in den Spalten der Matrix H gespeichert wird:

H = zeros(Nx+Nh-1,Nx); % fill matrix H with zeros

h = h(:); % force h to column vector

for n = 1:Nx

H(n:n+Nh-1,n) = h; % place h in columns of H

end

Die Matrix kann aber auch ohne FOR-Schleife aufgestellt werden. Diese Methodeist trickreicher und effizienter, aber auch weniger durchsichtig. Es ist jedoch einwichtiges Beispiel fur die Manipulation von Indizes in MATLABr:

Page 27: MATLABr-Programmierung · 1Eingaben in MATLABr sollten keine deutschen Sonderzeichen wie ¨a, ¨o, ¨u,ß enthalten, wenn die Programme auch im nichtdeutschsprachigen Raum eingesetzt

1.3 Faltungsoperation fur zeitdiskrete Signale 19

h1 = [zeros(Nx-1,1) ; h(:) ; zeros(Nx-1,1)];

% add zeros to vector h

Ny = Nx + Nh - 1;

ic = [0:Ny-1]’;

ir = Nx:-1:1;

H = ic(:,ones(Nx,1)) + ir(ones(Ny,1),:);

% H contains indices to place

% h in final matrix

H(:) = h1(H); % reshape vector h1 to matrix H

Im ersten Schritt wird fur den Fall Nx = 4 und Nh = 3 der Vektor h mit Nullenzu einem Hilfsvektor

h1 = (0, 0, 0, h(0), h(1), h(2), 0, 0, 0)T (1.12)

erganzt. Danach wird eine Indexmatrix gebildet, die im vorliegenden Fall die Form

H =

4 3 2 1

5 4 3 2

6 5 4 3

7 6 5 4

8 7 6 5

9 8 7 6

(1.13)

hat. Die Bildung dieser Hilfsmatrix erfolgt durch Wiederholung von Spalten undZeilen mit den ones()-Vektoren in den Teilmatrizen ic() und ir() und anschlie-ßender Addition.6 Diese Hilfsmatrix enthalt die Indizes der Komponenten des Vek-tors h1. Im letzten Schritt werden die Komponenten von h1 an die entsprechendenStellen der Matrix H positioniert. Dabei wird gleichzeitig die Matrix mit der Er-gebnismatrix uberschrieben.

Die Matrizendarstellung Gl. 1.10 der Faltungsoperation hat unter MATLABr

eine Reihe von Vorteilen. Sie ermoglicht die Implementierung von Blockverarbei-tungsfiltern. Auch Filter mit Taktratenumsetzung (Multiratenfilter) und adaptiveFilter lassen sich damit elegant darstellen. Eine weitere Anwendung wird bei derinversen Filterung auf Seite 32 behandelt.

Mit den angegebenen MATLABr-Befehlen fur die Faltung kann nun im Rah-men der nachsten Aufgabe eine MATLABr-Funktion programmiert werden. Al-ternative Implementierungen der Faltung, die die schnelle Fouriertransformationeinsetzen und noch effizienter sind, werden in Kapitel 3 behandelt.

6Das entspricht dem außeren Vektorprodukt (Spalte mal Zeile) eines Vektors mit einem Eins-vektor.

Page 28: MATLABr-Programmierung · 1Eingaben in MATLABr sollten keine deutschen Sonderzeichen wie ¨a, ¨o, ¨u,ß enthalten, wenn die Programme auch im nichtdeutschsprachigen Raum eingesetzt

20 1 Zeitdiskrete Signale

Aufgabe 1.8

Entwickeln Sie eine MATLABr-Funktion zur Faltung von Signalen, in-dem Sie eine Datei conv_lin.m mit folgendem Inhalt anlegen:

function y = conv_lin(h,x)

Nx = length(x);

Nh = length(h);

Ny = ...

% compute convolution matrix H

...

% compute result vector

y = ...

Als Alternative konnen Sie die Faltung auch mit FOR-Schleifen berech-nen. Zum Vergleich der Rechenzeiten beider Funktionen fugen Sie amBeginn der Funktion T0 = clock; ein. Nach den Rechenoperationen er-halten Sie mit etime(clock,T0) die Rechenzeit. Wenden Sie Ihr Pro-gramm auf folgende Signale an:

a) h(n) = 1/10, 0 ≤ n ≤ 9, x(n) = sin π5n, 0 ≤ n < 50

b) h = (1,−1, 1)T , x(n) = sin π3n, 0 ≤ n < 30

c) h(n) = δ(n)− δ(n− 1), x(n) = σ(n).

Interpretieren und vergleichen Sie die Ergebnisse mit jenen derMATLABr-Funktion conv().

Bei der Faltung zweier periodischer Signale mit der gleichen Perioden-dauer N erstreckt sich die Summation in Gl. 1.4 uber die Dauer einer Periode.Außerdem muß bei der Zeitverschiebung die periodische Fortsetzung berucksich-tigt werden. Damit ergibt sich die zyklische Faltung

y(n) =N−1∑

k=0

h(k) x((n− k)⊕N), n = 0, 1, 2, . . . , N − 1. (1.14)

Im Gegensatz zur normalen (linearen) Faltung zweier Signale der gleichen LangeN , bei der das Faltungsergebnis die Lange 2N−1 hat, andert sich das Zeitintervallbei der zyklischen Faltung nicht, da ja auch das Ergebnis periodisch mit N ist.Diese unterschiedlichen Ergebnisse sind in Abb. 1.9 an Hand der Faltung zwei-er rechteckformiger Signale dargestellt. Durch die periodische Fortsetzung bei der

Page 29: MATLABr-Programmierung · 1Eingaben in MATLABr sollten keine deutschen Sonderzeichen wie ¨a, ¨o, ¨u,ß enthalten, wenn die Programme auch im nichtdeutschsprachigen Raum eingesetzt

1.3 Faltungsoperation fur zeitdiskrete Signale 21

x(n) = h(n)

Zeitindex n

20151050

1.5

1

0.5

0

Ergebnis der zyklischen Faltung

Zeitindex n

20151050

12

8

4

0

Ergebnis der normalen (linearen) Faltung

Zeitindex n

4035302520151050

12

8

4

0

Abbildung 1.9: Graphische Darstellung der linearen und zyklischen Faltung deszeitdiskreten Signals x(n) mit sich selbst

Page 30: MATLABr-Programmierung · 1Eingaben in MATLABr sollten keine deutschen Sonderzeichen wie ¨a, ¨o, ¨u,ß enthalten, wenn die Programme auch im nichtdeutschsprachigen Raum eingesetzt

22 1 Zeitdiskrete Signale

zyklischen Faltung stimmen in diesem Beispiel die ersten 3 Signalwerte bei bei-den Faltungsergebnissen nicht uberein. Ist die Impulsbreite des Rechtecksignalshingegen kleiner oder hochstens gleich 10, dann tritt kein Unterschied auf. Die-sen Sachverhalt konnen Sie in der nachsten Aufgabe naher erforschen. Denken Siedabei daran, daß bei der zyklischen Faltung die Signale periodisch fortgesetzt sind.

Aufgabe 1.9

Soll die lineare Faltung zweier Signale der Lange N mit Hilfe der zy-klischen Faltung durchgefuhrt werden, so kann man durch Anfugen vonNullen die Signale auf eine geeignete Lange bringen, so daß der Einflußder periodischen Fortsetzung durch die Nullen eliminiert wird. WievieleNullen muß man mindestens an die Signale anfugen, damit diese Metho-de funktioniert?

Wird die zyklische Faltung in Matrizenschreibweise

y = Hcx (1.15)

dargestellt, so erhalt man wegen der zyklischen Zeitverschiebung von h(n) inGl. 1.14 eine zyklische Faltungsmatrix Hc, also beispielsweise fur N = 4:

y(0)

y(1)

y(2)

y(3)

=

h(0) h(3) h(2) h(1)

h(1) h(0) h(3) h(2)

h(2) h(1) h(0) h(3)

h(3) h(2) h(1) h(0)

x(0)

x(1)

x(2)

x(3)

. (1.16)

Im Gegensatz zur linearen Faltung ist bei der zyklischen Faltung die Faltungs-matrix quadratisch. Das Aufstellen dieser zyklischen Matrix kann mit MATLABr

mit den gleichen Befehlen wie auf Seite 19 erfolgen. Lediglich der Vektor h1 istabweichend zu initialisieren:

h = h(:);

h1 = [h(2:N) ; h];

ic = [0:N-1]’;

ir = N:-1:1;

Hc = ic(:,ones(N,1)) + ir(ones(N,1),:);

Hc(:) = h1(Hc);

Page 31: MATLABr-Programmierung · 1Eingaben in MATLABr sollten keine deutschen Sonderzeichen wie ¨a, ¨o, ¨u,ß enthalten, wenn die Programme auch im nichtdeutschsprachigen Raum eingesetzt

1.3 Faltungsoperation fur zeitdiskrete Signale 23

Aufgabe 1.10

Verwenden Sie diese MATLABr-Befehle fur ein M-File conv_cyc.m zurImplementierung der zyklischen Faltung und verwenden Sie zum Testenfolgende Signale:

a) N = 10, h(n) = (−1)n, 0 ≤ n ≤ N − 1, x(n) = 1, 0 ≤ n ≤ N − 1

b) Wiederholen Sie Punkt a) fur N = 11

c) N = 10, h(n) = δ(n)−δ(n−1), 0 ≤ n ≤ N−1, x(n) = n, 0 ≤ n ≤N−1. Vergleichen Sie hier das Ergebnis der zyklischen Faltung mitjenem der linearen Faltung.

Die bisher vorgestellten Realisierungsmoglichkeiten beschranken sich auf diedirekte Programmierung der Faltungssumme, deren Rechenaufwand bei Signalender Lange N mit einer Komplexitat O(N2) ansteigt. Im Kapitel 3 wird eine schnel-lere Methode auf der Grundlage der FFT (schnelle Fouriertransformation)behandelt, deren Aufwand nur mit O(N log2N) zunimmt.

Ein Sonderfall der Faltungsoperation ist die Berechnung derKorrelation zwei-er Signale entsprechend der Beziehung

y(n) =∞∑

k=−∞

h(k) x(n+ k), n = 0,±1,±2, . . . , (1.17)

bei der im Vergleich zu Gl. 1.4 in der Summenbildung x(k) anstelle von x(−k)verwendet wird. Die Korrelation entspricht daher der Faltungsoperation, wobeiein Signal zeitinvers in die Berechnung eingeht. Ein Sonderfall ist die Autokorre-lation, bei der h(n) = x(n) ist und die ein Maß fur die Ubereinstimmung zeitlichauseinanderliegender Signalwerte ist. Mit der Autokorrelation werden daher zeit-lich verschobene, ahnliche Signalteile detektiert.

In MATLABr konnen die Faltungsfunktionen auch direkt zur Korrelationsbe-rechnung eingesetzt werden. Bei Signalen h(n) und x(n) mit endlicher Dauer Nh

bzw. Nx erhalt man mit Gl. 1.17

y(n) =

min(Nh−1,Nx−n−1)∑

k=max(−n,0)

h(k) x(n+ k), n = −Nh + 1, . . . , Nx − 1. (1.18)

Das Korrelationsergebnis hat wie bei der normalen Faltung die Lange Nx+Nh−1.Allerdings treten jetzt bei y(n) negative Indizes auf. In MATLABr wird man daher

Page 32: MATLABr-Programmierung · 1Eingaben in MATLABr sollten keine deutschen Sonderzeichen wie ¨a, ¨o, ¨u,ß enthalten, wenn die Programme auch im nichtdeutschsprachigen Raum eingesetzt

24 1 Zeitdiskrete Signale

bei graphischen Darstellungen den Ursprung der n-Achse entsprechend verschie-ben. In der Matrizenschreibweise der Korrelation

y = Hdx (1.19)

hat die Faltungsmatrix Hd fur Nx = 4, Nh = 3 folgende Gestalt:

y(−2)y(−1)y(0)

y(1)

y(2)

y(3)

=

h(2) 0 0 0

h(1) h(2) 0 0

h(0) h(1) h(2) 0

0 h(0) h(1) h(2)

0 0 h(0) h(1)

0 0 0 h(0)

x(0)

x(1)

x(2)

x(3)

. (1.20)

Sie besitzt die gleiche Struktur wie in Gl. 1.11, nur die h(n)-Werte treten in denSpalten erwartungsgemaß in umgekehrter Reihenfolge auf.

Eine der vielen Anwendungen der Korrelation von Signalen ist die Impuls-kompression, die bei der Signaldetektion eine wesentliche Rolle spielt. Ein Signal,dessen Autokorrelation stark lokalisiert ist, ist der in Abb. 1.10 dargestellte si-nusformige Chirp

x(n) = sin(αn2

), n = 0, 1, . . . , N − 1. (1.21)

Diese starke Konzentration der Autokorrelation tritt beispielsweise bei Sinussigna-len nicht auf. Wird dieses Chirp-Signal mit anderen Signalen korreliert (z.B. mitRauschen oder Sinussignalen), dann ist das Maximum der Korrelation deutlich ge-ringer als die Autokorrelation des Chirp. Diese Tatsache, die bei der Signaldetek-tion ausgenutzt wird, konnen Sie in der folgenden Aufgabe im Detail untersuchen.

Aufgabe 1.11

Verwenden Sie Ihre MATLABr-Funktion zur Faltung fur die Darstel-lung der Autokorrelation des Chirp-Signals von Gl. 1.21. Bestimmen Siedanach Verlauf und Maximum der Korrelation des Chirp-Signals vonGl. 1.21 (α = π/3000) mit folgenden Signalen:

a) h(n) = sin(

5π300n

), n = 0, 1, . . . , N mit N = 300.

b) h(n) = sin(

π2000n

2), n = 0, 1, . . . , N mit N = 300.

c) h = randn(N,1); (Gaußsches Rauschsignal der Lange N).

Page 33: MATLABr-Programmierung · 1Eingaben in MATLABr sollten keine deutschen Sonderzeichen wie ¨a, ¨o, ¨u,ß enthalten, wenn die Programme auch im nichtdeutschsprachigen Raum eingesetzt

1.3 Faltungsoperation fur zeitdiskrete Signale 25

Chirp-Signal x(n)

Index n

300250200150100500

1

0.5

0

-0.5

-1

Autokorrelationsfunktion von x(n)

Index n

3002001000−100−200−300

150

100

50

0

-50

Abbildung 1.10: Sinusformiges Chirp-Signal und Autokorrelationsfunktion fur α =π/3000 und N = 300

In der abschließenden Aufgabe soll mit Hilfe der Autokorrelation die Perioden-dauer verrauschter Sinussignale bestimmt werden. Dazu wird zunachst mit denfolgenden MATLABr-Befehlen gaußsches Rauschen zum sinusformigen Meßsignaladdiert. Als Parameter wird der Signal-Rausch-Abstand (SNR) im logarithmischenMaßstab (dB) vorgegeben:

Nx = 200;

SNR = -5; % SNR in dB (SNR = 20*log20(R))

w0 = 2*pi/Nx*5; % frequency of sinusoid

x = sin(w0*[0:Nx-1]);

r = randn(size(x)); % create gaussian noise

R = norm(x)/norm(r); % compute actual SNR

gain = R * 10^(-SNR/20); % gain factor needed for given SNR

xn = x + gain*r; % add noise to create noisy measurement data

Page 34: MATLABr-Programmierung · 1Eingaben in MATLABr sollten keine deutschen Sonderzeichen wie ¨a, ¨o, ¨u,ß enthalten, wenn die Programme auch im nichtdeutschsprachigen Raum eingesetzt

26 1 Zeitdiskrete Signale

Aufgabe 1.12

Bestimmen Sie anhand der Autokorrelationsfunktion des verrauschtenSinussignals die Periodendauer (oder die Frequenz) in Abhangigkeit vomSignal-Rausch-Abstand SNR. Die automatische Berechnung der Peri-odendauer kann im vorliegenden Fall einfach durch Zahlen der Null-durchgange des Signals erfolgen.

a) Ab welchem SNR nimmt der Meßfehler drastisch zu?

b) Wie hangt die Meßgenauigkeit mit der Meßdauer (Signallange Nx)zusammen?

Vergleichen Sie das Ergebnis mit den Messungen der Periodendauer di-rekt am verrauschten Sinussignal.Hinweis: Die Bestimmung der Nulldurchgange ist in MATLABr denk-bar einfach. Wandeln Sie die Autokorrelationsfunktion in ein Rechteck-signal um. Durch Differenzbildung benachbarter Werte erhalten Sie Im-pulse an den Positionen der Nulldurchgange. Die Positionen werden dannmit dem FIND-Befehl bestimmt.

Page 35: MATLABr-Programmierung · 1Eingaben in MATLABr sollten keine deutschen Sonderzeichen wie ¨a, ¨o, ¨u,ß enthalten, wenn die Programme auch im nichtdeutschsprachigen Raum eingesetzt

2

Zeitdiskrete Systeme

Die Verarbeitung zeitdiskreter Signale erfolgt mit zeitdiskret arbeitenden Syste-men, die man entsprechend ihren Haupteigenschaften in folgender Weise einteilenkann:

• Lineare Systeme, wie z.B. linearer Mittelwertbilder, frequenzselektive Filter,

• Nichtlineare Systeme (z.B. Minimum/Maximumdetektor, Medianfilter),

• Zeitinvariante Systeme (zeitlich konstante Systemparameter),

• Zeitvariante Systeme, wie z.B. Systeme mit Modulatoren, Systeme mit meh-reren Taktraten (Multiratensysteme),

• Adaptive Systeme (automatische Anpassung von Systemparametern).

Eine Feingliederung kann nach Nebeneigenschaften wie Kausalitat, Stabilitat,Minimalphasigkeit, Linearphasigkeit, Invertierbarkeit etc. erfolgen. Die erwahntenEigenschaften werden in einigen Aufgaben dieses Buches behandelt. Ein bereitsvorgestelltes Beispiel eines nichtlinearen Systems ist die auf Seite 12 blockweiseMinimum- und Maximumbestimmung zur Dezimation von Sprachsignalen.

Fur die Beschreibung der Systeme stehen eine Reihe grundlegender Methodenzur Verfugung, die in den folgenden Abschnitten zusammengefaßt werden unddie sich sehr gut mit MATLABr fur die praktische Anwendung umsetzen lassen.Dabei stehen in erster Linie die linearen und zeitinvarianten Systeme imVordergrund.

Page 36: MATLABr-Programmierung · 1Eingaben in MATLABr sollten keine deutschen Sonderzeichen wie ¨a, ¨o, ¨u,ß enthalten, wenn die Programme auch im nichtdeutschsprachigen Raum eingesetzt

28 2 Zeitdiskrete Systeme

2.1 Beschreibung durch Faltungsoperation

Zeitdiskrete Systeme transformieren das Eingangssignal x(n) durch Anwendungeines zeitdiskret arbeitenden Algorithmus T · in ein Ausgangssignal y(n):

y(n) = T x(n) . (2.1)

Eine wichtige Klasse von Systemen sind lineare Systeme, bei denen die Antwortauf eine Summe von Eingangssignalen gleich der Summe der Einzelantworten ist.Die Summenbildung ist mit der Systemfunktion T · vertauschbar:

y(n) = T ax1(n) + bx2(n) = aT x1(n)+ bT x2(n) ∀n, a, b, x1, x2 . (2.2)

Eine unmittelbare Anwendung ergibt sich bei Darstellung des Eingangssignals alsSumme zeitverschobener und gewichteter Einsimpulse nach der Beziehung

x(n) =∞∑

k=−∞

x(k)δ(n− k) . (2.3)

Jeder Einsimpuls in Gl. 2.3 selektiert in der Summe nur den x-Wert bei n = k.Alle anderen Werte werden mit null gewichtet. Wendet man diese Darstellung aufGl. 2.2 an, so folgt

y(n) = T

∞∑

k=−∞

x(k)δ(n− k)

=

∞∑

k=−∞

x(k)T δ(n− k) =∞∑

k=−∞

x(k)h(n, k) ,

(2.4)mit der Impulsantwort h(n, k) = T δ(n−k). Das Eingangs/Ausgangsverhaltendes linearen Systems wird durch die Impulsantwort komplett charakterisiert. Imallgemeinen Fall hangt die Impulsantwort h(n, k) sowohl vom Zeitindex n, alsauch vom Summationsindex k ab. Fur den wichtigen Spezialfall zeitinvarianter(time-invariant) Systeme genugt die Beschreibung durch eine eindimensionaleFunktion h(n), da bei diesen Systemen

T δ(n− k) = h(n− k) (2.5)

ist. Bei zeitinvarianten Systemen andert sich somit die Form des Ausgangssignalsnicht, wenn das Eingangssignal zu verschiedenen Zeitpunkten angelegt wird. Estritt lediglich eine Zeitverschiebung auf, die gleich jener des Eingangssignals ist.Damit erhalt man fur lineare, zeitinvariante Systeme die grundlegende Ein-gangs/Ausgangsbeziehung

y(n) =

∞∑

k=−∞

x(k)h(n− k) =∞∑

k=−∞

x(n− k)h(k) , (2.6)

Page 37: MATLABr-Programmierung · 1Eingaben in MATLABr sollten keine deutschen Sonderzeichen wie ¨a, ¨o, ¨u,ß enthalten, wenn die Programme auch im nichtdeutschsprachigen Raum eingesetzt

2.1 Beschreibung durch Faltungsoperation 29

die schon auf Seite 16 als Faltungsoperation (Convolution) vorgestellt wur-de. Wie bereits in Abb. 1.8 an einem Beispiel illustriert, wird bei der Faltungdie zeitinvertierte Impulsantwort des Systems als Fensterfunktion uber das Signal“geschoben”. Alle Eingangssignalwerte innerhalb dieses Fensters werden gewich-tet, aufsummiert und tragen so zum aktuellen Ausgangswert bei. Ist h(n) = 0 furn < 0, dann haben wegen der Zeitinversion von h(n) nur vergangene Eingangs-signalwerte einen Einfluß auf das Ausgangssignal. Die Dauer der Impulsantwortbestimmt das Gedachtnis des Systems. Bei einer Impulsantwort unendlich langerDauer spricht man von Infinite Impulse Response Duration Filtern, IIR-Filtern.Im Gegensatz dazu werden Systeme mit einer Impulsantwort endlich langer Dauerals Finite Impulse Response Duration Filter, FIR-Filter bezeichnet. Bei FIR-Filtern erstreckt sich daher die Summation in Gl. 2.6 nur uber ein endliches Inter-vall.

Die Faltungssumme hat eine Reihe wichtiger Konsequenzen fur die Eigen-schaften linearer, zeitinvarianter Systeme [1, 3]:

• Fur die Bestimmung des Eingangs/Ausgangsverhaltens genugt eine einzigeFunktion, namlich die Impulsantwort h(n), zur Systembeschreibung.

• Fur stabile Systeme muß die Impulsantwort h(n) absolut summierbar sein:

∞∑

k=−∞

|h(k)| <∞.

• Bei der Kettenschaltung zweier stabiler Systeme mit den Impulsantwor-ten h1(n) und h2(n) ist die Reihenfolge der Systeme vertauschbar und dasGesamtsystem hat eine Impulsantwort

h(n) =∞∑

k=−∞

h1(k)h2(n− k) =∞∑

k=−∞

h1(n− k)h2(k) .

h1(n) h2(n) h1(n) h(n)h2(n)

• Die Parallelschaltung zweier Systeme mit den Impulsantworten h1(n) undh2(n) kann durch ein Gesamtsystem mit der Impulsantwort

h(n) = h1(n) + h2(n)

dargestellt werden.

h2(n)

h1(n)

h(n)

Page 38: MATLABr-Programmierung · 1Eingaben in MATLABr sollten keine deutschen Sonderzeichen wie ¨a, ¨o, ¨u,ß enthalten, wenn die Programme auch im nichtdeutschsprachigen Raum eingesetzt

30 2 Zeitdiskrete Systeme

• Bei kausalen Systemen eilt die Systemantwort der Systemanregung nichtvoraus. Die Systemantwort fur jeden Zeitindex n = n0 hangt nur von Ein-gangssignalwerten zu Zeitpunkten n ≤ n0 ab. Daraus folgt als Konsequenzfur die Impulsantwort

h(n) = 0 fur n < 0.

Aufgabe 2.1

Verwenden Sie MATLABr zur Analyse der folgenden Systeme, d.h.klaren Sie, ob die Systeme kausal, stabil, zeitinvariant und linear sind.Die “unbekannten” Systeme sind in Form von MATLABr-Befehlen ge-geben (das Eingangssignal x(n) hat die Lange N):

a) System 1: y = 2*x + 0.5;

b) System 2: y = [x(1) ; x(2:N)-x(1:N-1)];

c) System 3:y = conv([1 1 1 1 1],x); y = min(y,1); y = max(y,-1);

d) System 4: y(1:2:N) = x(1:2:N); y(2:2:N) = -x(2:2:N);

e) System 5: y = [0:N-1]’ .* x(:);

f) System 6: y = filter(1,[1 -0.9],x,0.5);1

Schreiben Sie dazu eine MATLABr-Funktion blackbox.m mit der dieeinzelnen Systeme durch das Argument systype ausgewahlt werdenkonnen:

function y = blackbox(systype,x)

x = x(:);

N = length(x);

if systype == 1, y = 2*x + 0.5;

elseif systype == 2, y = [x(1) ; x(2:N)-x(1:N-1)];

elseif ...

end

Setzen Sie dazu verschiedene Eingangssignale x in blackbox() ein. Te-sten Sie die Systeme nicht nur mit Einsimpulsen!

1Die MATLABr-Funktion filter() wird in Abschnitt 2.3 ausfuhrlich behandelt.

Page 39: MATLABr-Programmierung · 1Eingaben in MATLABr sollten keine deutschen Sonderzeichen wie ¨a, ¨o, ¨u,ß enthalten, wenn die Programme auch im nichtdeutschsprachigen Raum eingesetzt

2.1 Beschreibung durch Faltungsoperation 31

Die Vertauschbarkeit von Systemen bei deren Kettenschaltung ist nurbei Systemen erlaubt, die linear, zeitinvariant und stabil sind. Ist auch nur einedieser Eigenschaften nicht erfullt, dann wird das Gesamtsystemverhalten von derAnordnung der Teilsysteme abhangen.

Aufgabe 2.2

Versuchen Sie analytisch und experimentell mit MATLABr herauszufin-den, ob bei den folgenden Systemen eine Vertauschung der Teilsystemeh1(n), h2(n) bei Kettenschaltung zulassig ist, d.h.

∞∑

k=−∞

h1(k)h2(n− k) =∞∑

k=−∞

h1(n− k)h2(k), ∀n.

a) h1(n) = σ(n) (Sprungfunktion) und h2(n) = δ(n)− δ(n− 1)Zum Testen mit MATLABr verwenden Sie x(n) = σ(n).

b)

h1(n) =

1N 0 ≤ n ≤ N − 1

0 sonsth2(n) = sin

Nn σ(n).

Das Testsignal soll in diesem Fall x(n) = cos 2πN n sein.

Dokumentieren Sie die Probleme, die bei der Behandlung dieser Beispielemit MATLABr auftreten.

Bei der Invertierung von Systemen wird zum gegebenen System ein so-genanntes inverses System in Kette geschaltet, mit dem Ziel, am Ausgang desGesamtsystems wieder das Eingangssignal zu erhalten (siehe Abb. 2.1).

x(n)h(n) hi(n)

System inverses System

y(n) = x(n−N0)

Abbildung 2.1: Kettenschaltung zur Invertierung von Systemen

Die Verzogerungszeit N0 ist gegebenenfalls fur die Kausalitat des inversen Sy-stems erforderlich. Angewendet wird die Invertierung von Systemen beispielswei-se bei der Kanalentzerrung in Datenubertragungssystemen. Der Ubertragungs-kanal wird dabei durch die Impulsantwort h(n) modelliert. Das Entzerrerfilter

Page 40: MATLABr-Programmierung · 1Eingaben in MATLABr sollten keine deutschen Sonderzeichen wie ¨a, ¨o, ¨u,ß enthalten, wenn die Programme auch im nichtdeutschsprachigen Raum eingesetzt

32 2 Zeitdiskrete Systeme

hi(n) im Empfanger macht dann die Einflusse der Kanalimpulsantwort ruckgangig.Ein verwandter Anwendungsfall tritt bei der inversen Filterung von Raumimpuls-antworten auf. Hier ist h(n) die Impulsantwort der Ubertragungsstrecke Mikrofon-Raum-Lautsprecher. Das Entzerrerfilter hi(n) verbessert z.B. durch die Unter-druckung des Nachhalls die Raumakustik. In beiden Fallen ergibt sich die gesuchteImpulsantwort hi(n) des inversen Filters (zumindest theoretisch) als Losung deslinearen Gleichungssystems

∞∑

k=−∞

h(n− k)hi(k) = δ(n−N0). (2.7)

Die Bestimmung der Impulsantwort hi(n) des inversen Systems anhand der ge-gebenen Impulsantwort h(n) ist jedoch nicht immer exakt moglich. So konnenbeispielsweise Systeme mit Sperrbereichen (komplette Unterdruckung bestimmterFrequenzen oder Frequenzbander) nicht entzerrt werden. Genauere Bedingungenfur die Invertierbarkeit von Systemen ergeben sich bei der Behandlung minimal-phasiger Systeme [4] (siehe dazu auch Seite 48).

Zur Losung der Problems der inversen Filterung mit MATLABr sollen zweiMethoden untersucht werden. Fur das gegebene Filter (Ubertragungskanal) mitder Impulsantwort h(n) wird ein FIR-Filter der Lange N vorausgesetzt. Das in-verse Filter soll ebenfalls durch ein Filter mit einer Impulsantwort hi(n) endlicherDauer Ni approximiert werden. Dann kann Gl. 2.7 unter Verwendung von Gl. 1.10in Matrizenform angeschrieben werden:

Hhi = δ. (2.8)

H ist eine N +Ni − 1 ×Ni Matrix, hi ein Ni × 1 Vektor und δ = (1, 0, . . . , 0)T .Als unbekannte Verzogerungszeit wird dabei N0 = 0 verwendet. Die Faltungsma-trix H ist im allgemeinen Fall keine quadratische Matrix, da normalerweise mehrGleichungen als Unbekannte vorhanden sind. Damit ist das Gleichungssystem 2.8nicht exakt losbar. Es kann aber mit der Methode der kleinsten Quadrate(Least-Squares Problem) eine Naherungslosung gefunden werden [2, 5].

Fur die Losung uber- oder unterbestimmter Gleichungssysteme mit MATLABr

gibt es den \-Operator. Mit den folgenden MATLABr-Befehlen wird ausgehendvon h(n) und Ni das zugehorige inverse Filter hi(n) als LS-Losung von Gl. 2.8berechnet. Die Erzeugung der Faltungsmatrix H mit MATLABr-Befehlen ist aufSeite 18 kommentiert.

N = length(h);

Nd = N + Ni - 1;

d = [1 ; zeros(Nd-1,1)];

h1 = [zeros(Ni-1,1) ; h(:) ; zeros(Ni-1,1)];

ic = [0:Nd-1]’;

Page 41: MATLABr-Programmierung · 1Eingaben in MATLABr sollten keine deutschen Sonderzeichen wie ¨a, ¨o, ¨u,ß enthalten, wenn die Programme auch im nichtdeutschsprachigen Raum eingesetzt

2.1 Beschreibung durch Faltungsoperation 33

ir = Ni:-1:1;

H = ic(:,ones(Ni,1)) + ir(ones(Nd,1),:);

H(:) = h1(H); % convolution matrix H

hi = H \ d; % LS-solution of H*hi = d

Bei der Losung linearer Gleichungssysteme mit MATLABr wird abhangig vonder Anzahl der Gleichungen und der Unbekannten, aber auch von der Strukturder Systemmatrix, automatisch der passende Algorithmus zur Gleichungslosungeingesetzt (siehe MATLABr Function Reference, Arithmetic Operators).

Eine alternative Berechnung des inversen Filters mit MATLABr, die ohneLosung einen LS-Problems auskommt, ist die Verwendung der Funktion filter()

(siehe dazu auch Abschnitt 2.3).

N = length(h);

Nd = N + Ni - 1;

d = [1 ; zeros(Nd-1,1)];

hi = filter(1,h,d);

Mit den beiden vorgestellten MATLABr-Moglichkeiten soll nun die inverseFilterung mit einfachen Systemen naher analysiert werden.

Aufgabe 2.3

Finden Sie analytisch und experimentell mit MATLABr die Impuls-antworten hi(n) der inversen Systeme zu den gegebenen Impulsantwor-ten h(n). Von den Impulsantworten h(n) wird dazu nur ein endlicherAusschnitt mit 0 ≤ n < N betrachtet.

a) h(n) = (0, 8)nσ(n)

b) h(n) = (0, 8)n cos 3π10nσ(n)

c)

h(n) =

0, 5(

1 + cos 2πN+1 (n+ 1)

)

0 ≤ n ≤ N − 1

0 sonst

Welche dieser Systeme sind uberhaupt invertierbar? Experimentieren Siemit verschiedenen Werten fur N und Ni. Gibt es Unterschiede in denLosungen der beiden Methoden? Testen Sie die Qualitat der inversenFilterung durch Vergleich von Ein- und Ausgangssignal in Abb. 2.1. AlsEingangssignal kann die Sprungfunktion x(n) = σ(n) eingesetzt werden.

Page 42: MATLABr-Programmierung · 1Eingaben in MATLABr sollten keine deutschen Sonderzeichen wie ¨a, ¨o, ¨u,ß enthalten, wenn die Programme auch im nichtdeutschsprachigen Raum eingesetzt

34 2 Zeitdiskrete Systeme

2.2 Beschreibung im Frequenzbereich

Zur Untersuchung zeitdiskreter Systeme im Frequenzbereich werden diese Syste-me, so wie bei analogen Filtern, mit sinusformigen Signalen angeregt. Durch Va-riation der Frequenz kann schrittweise der Frequenzgang des Systems bestimmtwerden. Als Ausgangspunkt dient die Faltungsoperation Gl. 1.4, die das Ein-gangs/Ausgangsverhalten linearer und zeitinvarianter System fur alle Arten vonEingangssignalen beschreibt. Zur Untersuchung des Frequenzgangs ist die Verwen-dung einer komplexen Exponentialschwingung anstelle von Sinus- oder Cosinussi-gnalen vorteilhaft, da man sich das umstandliche Rechnen mit trigonometrischenSummenformeln erspart.2 Setzt man namlich fur das Eingangssignal x(n) die Ex-ponentialschwingung x(n) = ejθn in Gl. 1.4 ein, so folgt ohne langere Zwischen-rechnungen

y(n) =

∞∑

k=−∞

h(k) ejθ(n−k)︸ ︷︷ ︸

x(n−k)

= ejθn∞∑

k=−∞

h(k)e−jθk

︸ ︷︷ ︸

H(ejθ)

= H(ejθ)ejθn . (2.9)

Das System antwortet auf die komplexe Exponentialschwingung ejθn ebenfallsmit einem ejθn-Verlauf, dessen Amplitude und Phase mit dem komplexen Fak-tor H

(ejθ)modifiziert wird, der eine Funktion der Frequenz θ ist. Es ist eine

grundlegende Eigenschaft linearer, zeitinvarianter Systeme, die Kurvenform vonExponentialschwingungen (und damit auch von Sinus- und Cosinussignalen) nichtzu verandern. Daher konnen mit diesen Signalen die Frequenzgange der Systemedurch Betrags- und Phasenmessungen bestimmt werden. Der Frequenzgang wirddabei durch die Ubertragungsfunktion

H(ejθ)=

∞∑

k=−∞

h(k)e−jθk = FT h(n) (2.10)

charakterisiert, die durch die Impulsantwort festgelegt ist und das digitale Fil-ter im Frequenzbereich beschreibt. Dieser Zusammenhang zwischen H

(ejθ)und

h(n), der sich unmittelbar aus der Faltungsoperation ergeben hat, wird als Fou-riertransformation fur zeitdiskrete Signale FT · bezeichnet [1]. Wird dieUbertragungsfunktion mit Betrag A(θ) und Phase φ(θ) entsprechend

H(ejθ)= A(θ)ejφ(θ) (2.11)

dargestellt, dann ergibt sich beispielsweise fur ein cosinusformiges Eingangssi-gnal x(n) = cos θ0n = ℜeejθ0n mit Gl. 2.9 als Ausgangssignal

y(n) = ℜeH(ejθ0

)ejθ0n

= A(θ0) cos (θ0n+ φ(θ0)) . (2.12)

2Diese Vorgehensweise entspricht der komplexen Wechselstromrechnung, also dem Rechnenmit komplexen Zeigern, in der Analogtechnik.

Page 43: MATLABr-Programmierung · 1Eingaben in MATLABr sollten keine deutschen Sonderzeichen wie ¨a, ¨o, ¨u,ß enthalten, wenn die Programme auch im nichtdeutschsprachigen Raum eingesetzt

2.2 Beschreibung im Frequenzbereich 35

Die Amplitude des Cosinussignals wird durch den Betrag der Ubertragungsfunk-tion bei der Eingangsfrequenz θ0 modifiziert, wahrend die Phase durch den Pha-senverlauf bei θ0 beeinflußt wird.

Als Beispiel einer Ubertragungsfunktion eines einfachen digitalen Filters (IIR-Filter) wird eine exponentielle Impulsantwort unendlich langer Dauer der Form

h(n) = anσ(n) =

an n ≥ 0

0 n < 0. (2.13)

betrachtet. Diese Signalform weist fur 0 < a < 1 einen exponentiell abklingendenFunktionsverlauf auf. Wird Gl. 2.13 in Gl. 2.10 eingesetzt, so erhalt man mitder Summenformel einer unendlichen, geometrischen Reihe (

∑∞k=0 x

k = 11−x ) die

Ubertragungsfunktion

H(ejθ)=

∞∑

k=−∞

h(k)e−jθk =∞∑

k=0

(ae−jθ

)k=

1

1− ae−jθ(2.14)

bzw. als Betragsverlauf

A(θ) =∣∣H(ejθ)∣∣ =

1√1 + a2 − 2a cos θ

. (2.15)

Der in Abb. 2.2 dargestellte Betragsfrequenzgang zeigt eine Tiefpaßcharak-teristik fur dieses digitale Filter. Außerdem besitzt der Frequenzgang eine 2π-

a = 0, 87

θ

∣∣H(ejθ)∣∣

2ππ0−π−2π

8

6

4

2

0

Abbildung 2.2: Betragsverlauf der Ubertragungsfunktion des einfachen digitalenFilters (θ = 2π entspricht der Abtastfrequenz)

Periodizitat, die der periodischen Fortsetzung der Spektren abgetasteter Analog-signale mit der Abtastrate entspricht.

Page 44: MATLABr-Programmierung · 1Eingaben in MATLABr sollten keine deutschen Sonderzeichen wie ¨a, ¨o, ¨u,ß enthalten, wenn die Programme auch im nichtdeutschsprachigen Raum eingesetzt

36 2 Zeitdiskrete Systeme

Mit MATLABr gibt es mehrere Moglichkeiten die Ubertragungsfunktion zeit-diskreter Systeme zu berechnen. Fur das einfache Filter kann Gl. 2.14 mit folgendenBefehlen ausgewertet werden:

theta = linspace(0,pi,200); % create 200 equally spaced frequency

% points from theta = 0 to pi

H = 1 ./ (1 - 0.87*exp(-j*theta));

plot(theta,abs(H)); % show magnitude response

plot(theta,angle(H)); % show phase response

Einfacher und auch schneller ist die Verwendung der MATLABr-Funktion[H,theta] = freqz(b,a,Nf), mit der die allgemeine Ubertragungsfunktion

H(ejθ)=b(1) + b(2)e−jθ + . . .+ b(M + 1)e−jMθ

a(1) + a(2)e−jθ + . . .+ a(N + 1)e−jNθ(2.16)

an Nf Frequenzpunkten von θ = 0 . . . π bestimmt wird. Die Berechnung ist amschnellsten, wenn Nf eine Zweierpotenz ist (FFT-Algorithmus). Der Vektor b

enthalt die Zahlerkoeffizienten b(1) . . . b(M + 1) bzw. a die Nennerkoeffizientena(1) . . . a(N +1). Damit ergibt sich fur die Berechnung der Ubertragungsfunktionvon Gl. 2.14

[H,theta] = freqz(1,[1 -0.87],256);

plot(theta,abs(H));

plot(theta,angle(H));

Wird freqz() ohne Ausgabeargumente [H,theta] aufgerufen, dann erfolgt auto-matisch die graphische Darstellung von Betrag und Phase. Weitere Moglichkeitender Funktion freqz() werden mit help freqz angezeigt.

Ein weiteres, illustratives Beispiel ist ein FIR-Filter mit einer Impulsantwortendlicher Dauer

h(n) =

1N 0 ≤ n < N

0 sonst, (2.17)

mit dem innerhalb des rechteckformigen Zeitfensters (Impulsantwort) der arithme-tische Mittelwert des Signals gebildet wird. Mit Gl. 2.17 und der FaltungssummeGl. 2.6 ergibt sich namlich

y(n) =1

N

N−1∑

k=0

x(n− k) = 1

N

n∑

k=n−N+1

x(k) (2.18)

und damit eine gleitende Mittelwertbildung (Moving Averager) fur dasEingangssignal. Die Ubertragungsfunktion kann fur h(n) aus Gl. 2.17 mit Hilfe

Page 45: MATLABr-Programmierung · 1Eingaben in MATLABr sollten keine deutschen Sonderzeichen wie ¨a, ¨o, ¨u,ß enthalten, wenn die Programme auch im nichtdeutschsprachigen Raum eingesetzt

2.2 Beschreibung im Frequenzbereich 37

der Summenformel einer endlichen, geometrischen Reihe (siehe Seite 35) berechnetwerden:

H(ejθ)=

1

N

N−1∑

k=0

e−jθk =1

N

1− e−jθN

1− e−jθ. (2.19)

Damit folgt fur den Betragsverlauf dieses FIR-Filters

∣∣H(ejθ)∣∣ =

1

N

∣∣∣∣∣

sin θN2

sin θ2

∣∣∣∣∣. (2.20)

N = 6

θ

∣∣H(ejθ)∣∣

2ππ0−π−2π

1.2

1

0.8

0.6

0.4

0.2

0

Abbildung 2.3: Betragsverlauf der Ubertragungsfunktion des gleitenden Mittel-wertbilders

Nach Abb. 2.3 zeigt auch der Mittelwertbilder im Frequenzbereich ein Tief-paßverhalten. Zusatzlich treten bei Vielfachen von 2π/N Nullstellen auf, d.h. si-nusformige Signale mit diesen Frequenzen (Sperrfrequenzen) werden komplettunterdruckt. Im Frequenzbereich sind solche charakteristischen Frequenzen mit ei-nem Blick sehr leicht erkennbar. Hingegen kann das Auffinden von Sperrfrequenzenim Zeitbereich durch Auswertung der Faltungssumme recht muhsam sein!

Die Ubertragungsfunktion des gleitenden Mittelwertbilders wird mit den fol-genden MATLABr-Befehlen berechnet und graphisch dargestellt:

N = 6;

h = 1/N*ones(1,N); % impulse response

[H,theta] = freqz(h,1,256); % frequency response

plot(theta,abs(H));

Page 46: MATLABr-Programmierung · 1Eingaben in MATLABr sollten keine deutschen Sonderzeichen wie ¨a, ¨o, ¨u,ß enthalten, wenn die Programme auch im nichtdeutschsprachigen Raum eingesetzt

38 2 Zeitdiskrete Systeme

plot(theta,angle(H));

plot(theta,20*log10(abs(H)+eps)); % vertical axis in dB

plot(theta,max(-80,20*log10(abs(H)+eps)));

% vertical axis range = 80 dB

Die beiden letzten Plot-Befehle erzeugen eine dB-Skala fur die (logarithmische)vertikale Achse. Da der Mittelwertbilder Nullstellen in der Ubertragungsfunktionhat, kann durch Addition von ε ≈ 2, 22 × 10−16 die Bildung von log(0) verhin-dert werden. Mit der Maximumfunktion kann zusatzlich der Dynamikbereich derDarstellung begrenzt werden. Eine alternative Moglichkeit zur Achsenskalierungbietet der Befehl axis(), dessen Verwendung mit help axis angezeigt wird.

Fur die Beschreibung digitaler Filter im Frequenzbereich wird noch der Zusam-menhang zwischen den Fouriertransformationen (Spektren) des Eingangs- und desAusgangssignals benotigt. Ahnlich wie bei der Impulsantwort kann dem Eingangs-signal x(n) die Fouriertransformation

X(ejθ)=

∞∑

n=−∞

x(n)e−jθn = FT x(n) (2.21)

und dem Ausgangssignal y(n)

Y(ejθ)=

∞∑

n=−∞

y(n)e−jθn = FT y(n) (2.22)

zugeordnet werden. Fur den Zusammenhang zwischen Y(ejθ)und X

(ejθ)erhalt

man

Y(ejθ)=

∞∑

n=−∞

∞∑

k=−∞

x(k)h(n− k)︸ ︷︷ ︸

y(n)

e−jθn

=

∞∑

k=−∞

x(k)

∞∑

n=−∞

h(n− k)e−jθ(n−k)

︸ ︷︷ ︸

H(ejθ)

e−jθk

= H(ejθ)X(ejθ).

(2.23)

Die Filteroperation (Faltungssumme im Zeitbereich) entspricht damit einer Mul-tiplikation des Eingangssignalspektrums mit der Ubertragungsfunktion. Durchgeeignete Wahl der Ubertragungsfunktion konnen durch die multiplikative Ver-knupfung bestimmte Frequenzkomponenten unterdruckt bzw. selektiert werden(siehe Abb. 2.4).

Page 47: MATLABr-Programmierung · 1Eingaben in MATLABr sollten keine deutschen Sonderzeichen wie ¨a, ¨o, ¨u,ß enthalten, wenn die Programme auch im nichtdeutschsprachigen Raum eingesetzt

2.2 Beschreibung im Frequenzbereich 39

0 π−πθ

0 π−πθ

0 π−πθ

−θ0 θ0

1

X(ejθ)

H(ejθ)

Y(ejθ)= H

(ejθ)X(ejθ)

θ0−θ0

Abbildung 2.4: Beispiel fur eine ideal frequenzselektive Bandpaßfilterung

Die Frequenzbereichsdarstellung kann jedoch nicht nur zur Systemanalyse, son-dern auch zur Implementierung von digitalen Filtern herangezogen werden. Da-zu wird die Fouriertransformation auf das Eingangssignal angewendet und diesedann mit der gewunschten Ubertragungsfunktion multipliziert. Die Ruckkehr inden Zeitbereich erfolgt mit Hilfe der inversen Fouriertransformation, die imzeitdiskreten Fall ohne großen mathematischen Aufwand hergeleitet werden kann:Die Fouriertransformation des Signals x(n) ist eine periodische Funktion in derFrequenz θ und Gl. 2.21 ist die Fourierreihendarstellung dieser periodischen Funk-tion mit x(n) als Reihenkoeffizienten! Die Fourierreihenkoeffizienten werden dahermit dem Integral

x(n) =1

∫ π

−π

X(ejθ)ejθndθ = FT −1

X(ejθ)

(2.24)

berechnet, wobei sich das Integrationsintervall uber eine Periode von X(ejθ)er-

streckt.

Page 48: MATLABr-Programmierung · 1Eingaben in MATLABr sollten keine deutschen Sonderzeichen wie ¨a, ¨o, ¨u,ß enthalten, wenn die Programme auch im nichtdeutschsprachigen Raum eingesetzt

40 2 Zeitdiskrete Systeme

X(ejθ)

Y(ejθ)= X

(ejθ)H(ejθ)

FT ↓h(n)

FT ↓H(ejθ)

y(n) =

∞∑

k=−∞

x(k)h(n− k)

FT −1 ↑x(n)

Abbildung 2.5: Beschreibung digitaler Filter im Zeit- und im Frequenzbereich

Zusammenfassend kann nach Abb. 2.5 das Ausgangssignal eines linearen, zeit-invarianten Systems entweder im Zeitbereich durch Faltung des Eingangssignalsmit der Impulsantwort oder im Frequenzbereich durch Multiplikation der Fourier-transformation des Eingangssignals mit der Ubertragungsfunktion und anschlie-ßender inverser Fouriertransformation bestimmt werden. Der Weg uber den Fre-quenzbereich scheint auf den ersten Blick aufwendiger zu sein. Er benotigt au-ßerdem die Auswertung eines Integrals. Mit Hilfe der in Abschnitt 3 behandeltenschnellen Fouriertransformation (FFT) ist jedoch eine effiziente Implemen-tierung von FIR-Filtern mit Blockverarbeitung moglich. Die Komplexitat diesesAlgorithmus ist O(N log2N) verglichen mit O(N2) bei der direkten Implementie-rung der Faltungssumme (N ist die Lange der Impulsantwort des FIR-Filters).

Aufgabe 2.4

Bestimmen Sie mit MATLABr die Antworten y(n) folgender Syste-me auf ein Eingangssignal der Form x(n) = cos θ0n fur verschiedeneFrequenzwerte θ0.

a) h(n) = (0, 9)n cos 2π32nσ(n)

b) h(n) = (0.9)|n|

c) H(ejθ)=

1

1− ejθ

Hinweis: Verwenden Sie Gl. 2.12 zur exakten Berechnung des einge-schwungenen Zustands.

Page 49: MATLABr-Programmierung · 1Eingaben in MATLABr sollten keine deutschen Sonderzeichen wie ¨a, ¨o, ¨u,ß enthalten, wenn die Programme auch im nichtdeutschsprachigen Raum eingesetzt

2.3 Beschreibung durch Differenzengleichung 41

2.3 Beschreibung durch Differenzengleichung

Wie bei analogen Filtern konnen auch digitale Filter mit Netzwerken dargestelltwerden, deren Elemente im Fall linearer, zeitinvarianter Systeme Addierer, Multi-plizierer (mit Konstanten) und Speicher sind. Je nach Anordnung dieser Grund-elemente ergeben sich Strukturen ohne Ruckkopplungen (nichtrekursive Syste-me) oder Strukturen mit Ruckkopplungen (rekursive Systeme). Zwei einfacheBeispiele fur die Zusammenschaltung der drei Grundelemente sind in Abb. 2.6 ge-genubergestellt. Nichtrekursive Systeme haben eine Impulsantwort h(n) endlicher

x(n) y(n)

T

a

x(n) y(n)

T

a

y(n− 1)ax(n− 1)x(n− 1) ay(n− 1)

y(n) = x(n) + ax(n− 1) y(n) = ay(n− 1) + x(n)

h(n) = an n ≥ 0h(n) = δ(n) + aδ(n− 1)

Abbildung 2.6: Nichtrekursives digitales Filter (links) und rekursives digitales Fil-ter (rechts) mit zugehorigen Impulsantworten h(n)

Dauer (FIR-Filter) und werden durch eine Faltungssumme mit endlichem Summa-tionsintervall beschrieben. Rekursive Systeme weisen Ruckkopplungsschleifen auf.Sie besitzen im Normalfall eine Impulsantwort unendlich langer Dauer (IIR-Filter)und damit ein unendliches Summationsintervall bei der Faltung. Sie werden durchDifferenzengleichungen (siehe z.B. [1, 3, 4, 6]) charakterisiert, bei denen dasAusgangssignal auf beiden Seiten der Gleichung auftritt (vgl. die linke und rechteGleichung in Abb. 2.6).

Die Differenzengleichung ist eine weitere Moglichkeit zur Beschreibung digitalerSysteme, die im Gegensatz zur Faltung auch den inneren Systemzustand beruck-sichtigt. Dadurch konnen bei Einschaltvorgangen die Startwerte der internen Spei-cherelemente bei der Berechnung des Ausgangssignals miteinbezogen werden. Soergibt sich beispielsweise beim rekursiven System in Abb. 2.6 auch dann ein un-endlich langes Ausgangssignal, wenn das Eingangssignal fur alle Zeiten null ist,zum Einschaltzeitpunkt n = 0 aber im Speicherelement ein Wert y(−1) 6= 0 vor-handen ist. Die Werte an den Ausgangen der Speicherelemente bei n = 0 werdenals Anfangswerte bezeichnet. Die Berechnung des Ausgangssignals mit Differen-zengleichungen ist daher nur dann eindeutig, wenn auch die Anfangswerte zum

Page 50: MATLABr-Programmierung · 1Eingaben in MATLABr sollten keine deutschen Sonderzeichen wie ¨a, ¨o, ¨u,ß enthalten, wenn die Programme auch im nichtdeutschsprachigen Raum eingesetzt

42 2 Zeitdiskrete Systeme

Einschaltzeitpunkt bekannt sind.

Das einfache rekursive Filter von Abb. 2.6 zeigt auch, daß durch die Ruck-kopplung ein instabiles Systemverhalten moglich ist. So wachst fur |a| > 1 dieAmplitude des Ausgangssignals uber alle Grenzen, egal ob das Filter vom Ein-gang her oder durch eine Anfangsbedingung y(−1) 6= 0 angeregt wird. Eine solcheInstabilitat ist bei nichtrekursiven Systemen nicht moglich.

Die einfachen Systeme in Abb. 2.6 sind Filter 1. Ordnung.3 Im allgemeinenFall mit N Ruckkopplungsschleifen ergibt sich eine Differenzengleichung N -terOrdnung mit konstanten Koeffizienten:

y(n) =M∑

k=0

bkx(n− k)−N∑

k=1

aky(n− k) . (2.25)

Eine mogliche Realisierung dieser Differenzengleichung ist fur N =M in Abb. 2.7dargestellt.

T

T−a1

−a2

−aN

b0

b1

b2

bN

y(n)

TeilTeilnichtrekursiver rekursiver

x(n)

Abbildung 2.7: Direkte Realisierung fur rekursive digitale Filter N -ter Ordnung

3Bei rekursiven Systemen ist die Filterordnung durch die Gesamtanzahl der Verzogerungs-elemente in den Ruckkopplungsschleifen bestimmt. Hingegen legt bei nichtrekursiven Filtern dieAnzahl der Verzogerungselemente die Filterordnung fest. (Das gilt jedoch nicht fur seltene Spe-zialfalle mit redundanten Schleifen oder Verzogerungselementen.)

Page 51: MATLABr-Programmierung · 1Eingaben in MATLABr sollten keine deutschen Sonderzeichen wie ¨a, ¨o, ¨u,ß enthalten, wenn die Programme auch im nichtdeutschsprachigen Raum eingesetzt

2.3 Beschreibung durch Differenzengleichung 43

Mit MATLABr wird die Differenzengleichung 2.25 in Form der Struktur vonAbb. 2.7 mit der Funktion filter() realisiert. So kann beispielsweise die Im-pulsantwort eines Filters 2. Ordnung mit den folgenden MATLABr-Befehlen be-stimmt werden:

n = 0:199;

x = n == 0; % x = unit impulse

a = [1 -1.798 0.8167]; % a = [1 a1 a2]

b = [0.0137 -0.0087 0.0137]; % b = [b0 b1 b2]

y = filter(b,a,x); % y = impulse response

plot(y);

Bei der Verarbeitung sehr langer Signale (z.B. ein digitalisiertes Audiosignal)besteht das Problem, daß nicht das gesamte Signal im MATLABr-ArbeitsspeicherPlatz hat. Das Signal muß daher in Blocke unterteilt werden und jeder Block ein-zeln gefiltert werden. Damit beim Aneinanderfugen der Blocke keine Stoßstellendurch die Ein- und Ausschwingvorgange des Filters entstehen, muß der Filterend-zustand des gerade verarbeiteten Blocks als Anfangszustand im nachsten Blockweiterverwendet werden. Der Filterzustand wird als Vektor der Verzogerungs-elementinhalte gespeichert. Die nahtlose Blockverarbeitung mit der MATLABr-Funktion filter() zeigt das folgende Beispiel:

state = zeros(N,1); % N = filter order

fin = fopen(’x.dat’,’rb’);

fout = fopen(’y.dat’,’wb’);

Nb = 2048; % Nb = block size

Nx = Nb;

while (Nx == Nb)

[x,Nx] = fread(fin,Nb,’short’);

[y,state] = filter(b,a,x,state);

fwrite(fout,y,’short’);

end

fclose(fin);

fclose(fout);

Die Eingangssignalwerte sind als 16 Bit Integers in binarer Form in der Dateix.dat gespeichert. Die Ausgabe erfolgt ebenfalls in binarer Form in die Dateiy.dat. Am Beginn werden alle Verzogerungselementinhalte des Filters (die Ord-nung sei N) auf null gesetzt. In der WHILE-Schleife werden Nb = 2048 Daten inden Vektor x gelesen. Die tatsachliche Datenanzahl wird in Nx von der Funktionfread() zuruckgeliefert. Die Filterfunktion verarbeitet den Datenvektor und denZustandsvektor des vorhergegangenen Blocks und aktualisiert den Zustandsvektor.Danach wird das Filterausgangssignal fur den aktuellen Block in der Ausgabedateiy.dat gespeichert.

Page 52: MATLABr-Programmierung · 1Eingaben in MATLABr sollten keine deutschen Sonderzeichen wie ¨a, ¨o, ¨u,ß enthalten, wenn die Programme auch im nichtdeutschsprachigen Raum eingesetzt

44 2 Zeitdiskrete Systeme

Der Anfangszustand des Filters bestimmt neben dem Eingangssignal das Fil-terausgangssignal. Die Losung der Differenzengleichung 2.25 ist demnach nur danneindeutig, wenn neben dem Eingangssignal auch die Anfangsbedingungen gege-ben sind. Soll beispielsweise das Einschwingverhalten des Filters fur n ≥ 0 berech-net werden, dann mussen neben x(n), n ≥ 0, entsprechend Gl. 2.25 auch die An-fangswerte x(−1), x(−2), . . . , x(−M) und y(−1), y(−2), . . . , y(−N) gegeben sein.Zur Analyse der Differenzengleichungen mit der MATLABr-Funktion filter()

muß daher aus den gegebenen Anfangsbedingungen der Anfangszustandsvektordes Filters berechnet werden. Dazu dient die Funktion filtic(), wie das nachsteBeispiel zeigt:

n = 0:199;

x = n == 0; % x = unit impulse

a = [1 -1.798 0.8167]; % a = [1 a1 a2]

b = [0.0137 -0.0087 0.0137]; % b = [b0 b1 b2]

xi = [-1 0]; % xi = [x(-1) x(-2)];

yi = [0 1]; % yi = [y(-1) y(-2)];

z0 = filtic(b,a,yi,xi); % initial filter state z0

y = filter(b,a,x,z0); % output signal for n >= 0

plot(y);

Aufgabe 2.5

Verwenden Sie die MATLABr-Funktionen filter und filtic zur Be-stimmung von y(n) fur folgende Differenzengleichungen:

a) y(n) = 0.5y(n− 1) + x(n)− 0.5x(n− 1)fur x(n) = σ(n) und der Anfangsbedingung y(−1) = 1.

b) y(n)− 0.6y(n− 1)− 0.16y(n− 2) = 5x(n)fur x(n) = δ(n) und y(−2) = 25

4 , y(−1) = 0.

Zeigen Sie, daß sich die Systemantwort jeweils zusammensetzt aus

y(n) = yh(n) + yp(n)

(yh(n) ist die Systemantwort fur x(n) ≡ 0 und yp(n) jene fur verschwin-dende Anfangsbedingungen.)

Fur den Fall verschwindender Anfangsbedingungen kann der Frequenzgangdes digitalen Filters unter Verwendung der Differenzengleichung berechnet wer-den. Dazu werden, wie bei der Behandlung der Systeme im Frequenzbereich im Ab-

Page 53: MATLABr-Programmierung · 1Eingaben in MATLABr sollten keine deutschen Sonderzeichen wie ¨a, ¨o, ¨u,ß enthalten, wenn die Programme auch im nichtdeutschsprachigen Raum eingesetzt

2.3 Beschreibung durch Differenzengleichung 45

schnitt 2.2, die Exponentialschwingung x(n) = ejθn und die zugehorige Systemant-wort y(n) = H

(ejθ)ejθn (siehe Gl. 2.9) in die Differenzengleichung Gl. 2.25 ein-

gesetzt:

H(ejθ)ejθn = ejθn

M∑

k=0

bke−jθk −H

(ejθ)ejθn

N∑

k=1

ake−jθk (2.26)

Damit folgt fur die Ubertragungsfunktion

H(ejθ)=

M∑

k=0

bke−jθk

1 +N∑

k=1

ake−jθk

. (2.27)

Mit der komplexen Variablen z = ejθ ergibt sich schließlich

H(z) =

M∑

k=0

bkz−k

1 +N∑

k=1

akz−k

. (2.28)

Die Ubertragungsfunktion des digitalen Filters ist daher eine rationale Funk-tion, bestehend aus einem Zahlerpolynom vom Grad M und einem Nennerpoly-nom N -ten Grades.4 Die Nullstellen des Zahlerpolynoms bestimmen dieM Sperr-stellen z = z0k des Filters, bei denen H(z0k) = 0 ist. Die Resonanzen (Pol-stellen) sind durch die N Nullstellen z = z∞k des Nennerpolynoms festgelegt(|H(z∞k)| → ∞). Man kann zeigen, daß fur kausale und stabile digitale Filter furdie Pole |z∞k| < 1, ∀k, erfullt sein muß. Die Lage der Sperrstellen unterliegt indiesem Zusammenhang hingegen keiner Einschrankung.

Die Berechnung des Frequenzgangs mit der MATLABr-Funktion freqz() wur-de bereits auf Seite 36 vorgestellt. Fur die Berechnung von H(z) in der komplexenEbene mussen die Polynome explizit ausgewertet werden. Das kann in MATLABr

mit polyval() erfolgen. Die Funktion polyval(a,z) liefert den Wert eines Poly-noms (gegeben durch den Koeffizientenvektor a) an der Stelle z. Ein Beispiel istdie dreidimensionale Darstellung von H(z), in der Pole und Nullstellen sehrschon sichtbar sind (siehe Abb. 2.8). Mit den folgenden Befehlen konnen Sie |H(z)|in der komplexen Ebene fur ein Filter 2. Ordnung mit MATLABr als 3D-Plot dar-stellen. Die Abbildung wird automatisch um die vertikale Achse gedreht, so daßdas Objekt aus verschiedenen Blickwinkeln betrachtet werden kann.

4Dieser Zusammenhang gilt nicht nur fur z = ejθ, sondern auch fur ein allgemeines z derForm z = rejθ (r reellwertig). In diesem Fall wird H(z) als Z-Transformation der Impulsantworth(n) bezeichnet.

Page 54: MATLABr-Programmierung · 1Eingaben in MATLABr sollten keine deutschen Sonderzeichen wie ¨a, ¨o, ¨u,ß enthalten, wenn die Programme auch im nichtdeutschsprachigen Raum eingesetzt

46 2 Zeitdiskrete Systeme

% create 3D plot of |H(z)| to show transfer function poles and zeros

b = [1 -1.5 1]; % NOTE: numerator b(z) = z^2 - 1.5z + 1

a = [1 -1.5 0.8]; % denominator a(z) = z^2 - 1.5z + 0.8

[x,y] = meshgrid(-1:0.02:1, -1:0.02:1); % x,y coord. of 3D plot

z = x + j*y; % complex variable z

H = abs(polyval(b,z)) ./ abs(polyval(a,z)); % evaluate |H(z)|

i1 = find(H > 4);

H(i1) = 4; % clip poles

close all

pos = [0.01 0.2 0.6 0.7]; % figure position

hfig = figure(’name’,’Z Domain’,’Units’,’normal’,’Position’,pos);

surf(x,y,H,’FaceColor’,’interp’,’EdgeColor’,’none’,...

’FaceLighting’,’phong’);

colordef(hfig,’black’);

colormap(’jet’);

axis tight

camlight right % add lighting

grid on

view([55,30]);

xlabel(’Re\z\’); % set axis labels

ylabel(’Im\z\’);

zlabel(’|H(z)|’);

axis vis3d

for n = 55:10:415 % rotate plot

view([n,30]);

drawnow

end

axis normal

Die Lage der Pole und Nullstellen der Ubertragungsfunktion H(z) bestimmtdas Systemverhalten des digitalen Filters. Zur Analyse ist daher die Aufspaltungvon H(z) in Pole und Nullstellen vorteilhaft, da ein Reihe wichtiger Systemeigen-schaften aus der Lage der Pole und Nullstellen in der z-Ebene abgeleitet werdenkann. Fur die Faktorisierung von Zahler- und Nennerpolynom in Gl. 2.28 ist eszweckmaßig, die Polynome als Funktionen von z anzuschreiben:

H(z) = zN−M

M∑

k=0

bkzk

zN +

N−1∑

k=0

akzk

, (2.29)

mit bk = bM−k und ak = aN−k. Abgesehen vom Faktor zN−M dreht sich beidieser Darstellung im Vergleich zu Gl. 2.28 die Reihenfolge der Polynomkoeffizi-

Page 55: MATLABr-Programmierung · 1Eingaben in MATLABr sollten keine deutschen Sonderzeichen wie ¨a, ¨o, ¨u,ß enthalten, wenn die Programme auch im nichtdeutschsprachigen Raum eingesetzt

2.3 Beschreibung durch Differenzengleichung 47

−1

−0.5

0

0.5

1 −1

−0.5

0

0.5

1

0.5

1

1.5

2

2.5

3

3.5

4

|H(z)|

ℜezℑmz

Abbildung 2.8: Dreidimensionale Darstellung von |H(z)| in der komplexen z-Ebene(Pole bei z∞ = 0, 75± j 0, 4873, Nullstellen bei z0 = 0, 75± j 0, 6614)

enten um. Dieser Unterschied in der Darstellung von H(z) ist zu beachten, wennmit MATLABr Polynome ausgewertet werden, da die Funktionen filter() undfreqz() die Polynome als Funktionen in z−1 benotigen, die Funktion polyval(),poly() und roots() hingegen die Variable z voraussetzen. Durch Faktorisierungvon Zahler- und Nennerpolynom in Gl. 2.29 erhalt man die Darstellung nachPolen und Nullstellen

H(z) = k(z − z01)(z − z02) . . . (z − z0M )

(z − z∞1)(z − z∞2) . . . (z − z∞N ). (2.30)

Fur M = N ergibt sich der konstante Faktor k aus k = H(z)|z→∞ = b0. DasAuffinden der Nullstellen eines Polynoms erfolgt in MATLABr mit roots(). Um-gekehrt liefert die Funktion poly() aus den Nullstellen die Polynomkoeffizienten.Das folgende Beispiel zeigt die Anwendung dieser Funktionen.

Page 56: MATLABr-Programmierung · 1Eingaben in MATLABr sollten keine deutschen Sonderzeichen wie ¨a, ¨o, ¨u,ß enthalten, wenn die Programme auch im nichtdeutschsprachigen Raum eingesetzt

48 2 Zeitdiskrete Systeme

b = [1 -1.5 1]; % numerator of H(z): z^2 - 1.5z + 1

a = [1 -1.5 0.8]; % denominator of H(z): z^2 - 1.5z + 0.8

z0 = roots(b); % zeros of H(z)

p0 = roots(a); % poles of H(z)

zplane(z0,p0); % plot poles and zeros in complex plane

poly(z0) % compute numerator coeff. from zeros

poly(p0) % compute denominator coeff. from poles

Die Analyse der Pol/Nullstellenkonfiguration von H(z) liefert eine Reihe wich-tiger Eigenschaften zeitdiskreter Systeme:

• Bei reellwertigen Polynomkoeffizienten treten komplexe Nullstellen in kon-jugiert komplexen Paaren auf.

• Bei stabilen und kausalen Filtern liegen alle Pole im Inneren des Einheits-kreises |z| < 1 in der komplexen Ebene.

• Bei stabilen und antikausalen Filtern liegen alle Pole außerhalb des Einheits-kreises.

• FIR-Filter haben alle Pole bei z = 0. Sie sind daher immer stabil.

• Filter mit Sperrfrequenzen haben Nullstellen am Einheitskreis.

• Invertierbare Filter haben keine Nullstellen am Einheitskreis oder außerhalbdes Einheitskreises.

• Pole und Nullstellen von Allpassen (|H(ejθ)| ≡ 1) liegen paarweise gespiegeltzum Einheitskreis, d.h. z0 = 1/z∗∞ (∗ bedeutet konjugiert komplex).

• Filter mit exakt linearer Phase haben alle Pole bei z = 0 (sind also nichtre-kursiv). Die Nullstellen mussen entweder am Einheitskreis liegen oder paar-weise gespiegelt zum Einheitskreis.

• Minimalphasige Filter haben keine Nullstellen außerhalb des Einheitskreises.Streng minimalphasige Filter haben zusatzlich keine Nullstellen am Einheits-kreis. Streng minimalphasige Filter sind daher invertierbar.

Page 57: MATLABr-Programmierung · 1Eingaben in MATLABr sollten keine deutschen Sonderzeichen wie ¨a, ¨o, ¨u,ß enthalten, wenn die Programme auch im nichtdeutschsprachigen Raum eingesetzt

2.3 Beschreibung durch Differenzengleichung 49

Aufgabe 2.6

Entwickeln Sie zum Testen von Systemen eine MATLABr-Funktion[H,h,p0,z0] = eval_sys(b,a) mit der ausgehend vom gegebenenZahler- und Nennerpolynom b,a von H(z) die SystemeigenschaftenFrequenzgang H (Betrag und Phase), kausale Impulsantwort h, Po-le und Nullstellen p0,z0 berechnet und graphisch dargestellt wer-den konnen. Prufen Sie anhand der Pole und Nullstellen die vorherangegebenen Zusammenhange. Beobachten Sie auch den Einfluß derPol/Nullstellenkonstellation auf die Impulsantwort.

a) H(z) =αz2 + (1 + α)βz + 1

z2 + (1 + α)βz + αmit α = 0, 8 und β = 0, 5.

b) H(z) =2z(3z + 17)

(z − 1)(z2 − 6z + 25)

c) H(z) =1− z−6

1− z−1

d) y(n) + 2y(n− 1) + 32y(n− 2) + 1

2y(n− 3) = x(n) + x(n− 1)

Die Nullstellen eines Polynoms hangen sehr empfindlich von den Koeffizien-ten ab. Dadurch erklart sich auch ein Toleranzproblem der direkten Realisierung(Abb. 2.7) der Differenzengleichung, speziell bei eingeschrankter Rechengenauig-keit, wie z.B. bei Festkommaarithmetik. Die Darstellung der Ubertragungsfunktionals rationale Funktion bietet aber durch die Faktorisierung der Polynome zweialternative Realisierungsmoglichkeiten fur den praktischen Einsatz.

Werden beim Zahler- und Nennerpolynom von Gl. 2.28 die Linearfaktoren mitkonjugiert komplexen Nullstellen zu quadratischen Ausdrucken zusammengefaßt,dann erhalt man fur M = N und mit L =

⌊N+12

H(z) =

L∏

k=1

β0k + β1kz−1 + β2kz

−2

α0k + α1kz−1 + α2kz−2

︸ ︷︷ ︸

Hk(z)

. (2.31)

Fur ein ungerades N ist z.B. α21 = β21 = 0. Mit Gl. 2.31 ergibt sich eine Kaska-denschaltung von Filterblocken Hk(z), wie sie in Abb. 2.9 dargestellt ist (vgl. dazudie Kettenschaltung auf Seite 29).

Bei der Kaskadenform digitaler Filter ist es egal (zumindest bei Gleitkom-marechengenauigkeit), in welcher Reihenfolge die Filterblocke angeordnet sind und

Page 58: MATLABr-Programmierung · 1Eingaben in MATLABr sollten keine deutschen Sonderzeichen wie ¨a, ¨o, ¨u,ß enthalten, wenn die Programme auch im nichtdeutschsprachigen Raum eingesetzt

50 2 Zeitdiskrete Systeme

b0 β11, β21

α11, α21

β12, β22

α12, α22 α1L, α2L

β1L, β2L

Abbildung 2.9: Kaskadenform von digitalen Filtern (β0k = 1 und α0k = 1)

wie konjugiert komplexe Pole und Nullstellen paarweise zusammengefaßt werden.Normalerweise kombiniert man benachbarte Pole und Nullstellen, so daß die Si-gnalverstarkung der Pole durch die benachbarten Nullstellen moglichst gut kom-pensiert wird. Dadurch erhalt man bei der Implementierung mit Festkommasignal-prozessoren eine gute Aussteuerbarkeit der Filter.

Mit MATLABr kann die Kaskadenform mit der Funktion zp2sos aus derPol/Nullstellenkonfiguration von H(z) gewonnen werden. Dabei wird die obenerwahnte Zusammenfassung von Polen und Nullstellen durchgefuhrt und die Rei-henfolge der Filterblocke nach zunehmenden Polradien festgelegt (Pole nahe amEinheitskreis werden Blocken am Ende der Kaskade zugeordnet). Mit einem zusatz-lichen Funktionsargument von zp2sos konnen die Blocke jedoch auch nach abneh-menden Polradien gereiht werden. Die Filterkoeffizienten werden von zp2sos ineiner Matrix in folgendem Format angegeben:

C =

β01 β11 β21 α01 α11 α21

β02 β12 β22 α02 α12 α22

......

......

......

β0L β1L β2L α0L α1L α2L

. (2.32)

Mit dem nachsten MATLABr-Beispiel wird die digitale Filterung ausgehendvon der Ubertragungsfunktion in Gl. 2.29 mit der Kaskadenform ausgefuhrt, wobeiM = N vorausgesetzt wird:

% given: coefficient vectors b, a of length N, and input signal x

% Note: numerator and denominator of H(z) are functions in z, not 1/z

z0 = roots(b);

p0 = roots(a);

k = b(N)/a(N);

C = zp2sos(z0,p0,k); % compute coefficients of 2nd order sections

[Nr,Nc] = size(C);

y = filter(C(1,1:3),C(1,4:6),x); % first section

for n = 2:Nr

y = filter(C(n,1:3),C(n,4:6),y); % remaining sections

end

Page 59: MATLABr-Programmierung · 1Eingaben in MATLABr sollten keine deutschen Sonderzeichen wie ¨a, ¨o, ¨u,ß enthalten, wenn die Programme auch im nichtdeutschsprachigen Raum eingesetzt

2.3 Beschreibung durch Differenzengleichung 51

Aufgabe 2.7

In dieser Aufgabe soll die Koeffizientenempfindlichkeit der direkten Form(Abb. 2.7) mit jener der Kaskadenform verglichen werden. Die Quanti-sierung der Filterkoeffizienten C auf eine Wortlange von Nbits wird mit

scale = 2^(Nbits-1);

Cq = 1/scale*round(scale*C);

vorgenommen. Verwenden Sie diese Quantisierung bei die Programmie-rung einer MATLABr-Funktion compare_filt(Nbits), mit der die Fre-quenzgange des exakten Filters und der beiden quantisierten Filterstruk-turen dargestellt werden. Testen Sie das Systemverhalten fur Wortlangenim Bereich von 10 bis 32 Bits. Als Testfilter soll ein elliptisches Tiefpaß-filter dienen, das Sie beispielsweise mit

N = 7; % N = filter order

[z0,p0,k] = ellip(N,0.1,70,1/8); % get poles and zeros

[b,a] = ellip(N,0.1,70,1/8); % or numerator and denominator

% coefficients

entwerfen. Variieren Sie dabei die Filterordnung N. Nahere Einzelheitenzu diesem Filterentwurf werden im Kapitel 4 behandelt.

Die zweite Realisierungsmoglichkeit ergibt sich aus der Partialbruchzerlegungder Ubertragungsfunktion. Diese Zerlegung fuhrt auf die Parallelform digita-ler Filter, wobei wieder konjugiert komplexe Nullstellen zu Filterblocken zweitenGrades kombiniert werden (M = N und L =

⌊N+12

⌋):

H(z) = γ0 +

L∑

k=1

γ0k + γ1kz−1

1 + α1kz−1 + α2kz−2

︸ ︷︷ ︸

Hk(z)

. (2.33)

Fur ein ungerades N ist auch hier z.B. α21 = γ11 = 0. Die Parallelform istin Abb. 2.10 gezeigt. Bezuglich der Zusammenfassung von Polen und Nullstel-len bzw. der Anordnung der Filterblocke hat die Parallelform wesentlich wenigerFreiheitsgrade als die Kaskadenform. Eine andere Eigenschaft der Parallelform be-trifft die Sperrstellen, die bei der Parallelform dadurch zustande kommen, daß sichalle Ausgangssignale der Parallelpfade zu null erganzen. Diese Kompensation istnaturlich relativ empfindlich gegenuber den Toleranzen der Filterkoeffizienten. DieKonsequenz bei endlicher Rechengenauigkeit (Festkommasignalprozessoren) ist ei-ne erhohte Empfindlichkeit in den Sperrbereichen. In den Durchlaßbereichen ist

Page 60: MATLABr-Programmierung · 1Eingaben in MATLABr sollten keine deutschen Sonderzeichen wie ¨a, ¨o, ¨u,ß enthalten, wenn die Programme auch im nichtdeutschsprachigen Raum eingesetzt

52 2 Zeitdiskrete Systeme

γ01, γ11

α12, α22

α1L, α2L

γ0L, γ1L

γ0

α11, α21

γ02, γ12

Abbildung 2.10: Parallelform von digitalen Filtern

hingegen kaum ein Unterschied zwischen den Empfindlichkeiten von Parallel- undKaskadenform festzustellen.

Die Partialbruchzerlegung erfolgt in MATLABr mit der Funktion residuez(),die H(z) in der Form von Gl. 2.28 fur M ≥ N und einfachen Pole darstellt als

H(z) =

M∑

k=0

bkz−k

1 +

N∑

k=1

akz−k

=N∑

k=1

rk1− pkz−1

+M−N∑

k=0

ckz−k . (2.34)

Mit residuez() konnen auch mehrfache Pole verarbeitet werden. Allerdings istdas Auffinden mehrfacher Nullstellen von Polynomen ein numerisch sensibles Un-terfangen. Es ist daher anzuraten, sich auf den in der Praxis wichtigen Fall einfa-cher Pole zu beschranken.

Die Pole werden mit residuez() nicht zu Blocken maximal zweiter Ordnungzusammengefaßt. Fur die Implementierung der Parallelform ist daher noch eineNachverarbeitung notwendig. Ein Beispiel dazu soll die Anwendung der Partial-bruchzerlegung mit MATLABr zeigen. Die Koeffizienten der Parallelform werdenspaltenweise fur jeden Block in der Matrix C gespeichert. Die Spalte k enthalt dieKoeffizienten in der Reihenfolge γ0k, γ1k, 1, α1k, α2k (siehe Gl. 2.33).

Page 61: MATLABr-Programmierung · 1Eingaben in MATLABr sollten keine deutschen Sonderzeichen wie ¨a, ¨o, ¨u,ß enthalten, wenn die Programme auch im nichtdeutschsprachigen Raum eingesetzt

2.3 Beschreibung durch Differenzengleichung 53

% digital filter design and implementation using parallel form

[b,a] = ellip(5,0.1,70,1/8); % design a 5th order elliptic low pass

% filter

[r,p,c] = residuez(b,a); % coeff. r,p,c of partial fraction expansion

r = r(:).’; % force r,p to row vectors

p = p(:).’;

% process real-valued poles

ipr = find(abs(imag(p)) < 1e-11);

Nipr = length(ipr);

if Nipr

C = [real(r(ipr)) ; zeros(1,Nipr) ; ones(1,Nipr) ; ...

-real(p(ipr)) ; zeros(1,Nipr)];

else

C = []; % C = empty matrix

end

% process conjugate complex-valued poles

ipc = find(imag(p) >= 1e-11);

Nipc = length(ipc);

if Nipc

C = [C , [2*real(r(ipc)) ; -2*real(r(ipc).*conj(p(ipc))) ; ...

ones(1,Nipc) ; -2*real(p(ipc)) ; abs(p(ipc)).^2]];

end

% filtering of input signal x

[Nr,Nc] = size(C);

y = filter(c,1,x);

for n = 1:Nc

y = y + filter(C(1:2,n),C(3:5,n),x);

end

Page 62: MATLABr-Programmierung · 1Eingaben in MATLABr sollten keine deutschen Sonderzeichen wie ¨a, ¨o, ¨u,ß enthalten, wenn die Programme auch im nichtdeutschsprachigen Raum eingesetzt

54 2 Zeitdiskrete Systeme

Aufgabe 2.8

Erweitern Sie die Funktion compare_filt(Nbits) von Aufgabe 2.7 furdie Untersuchung der Koeffizientenempfindlichkeit der Parallelform digi-taler Filter. Berechnen Sie auch fur direkte Form, Kaskaden- und Paral-lelform den Fehler der Impulsantwort durch die Koeffizientenquantisie-rung. Als Fehlermaß wird dabei

ε2 =

∞∑

n=0

(h(n)− hq(n))2

∞∑

n=0

h2(n)

eingesetzt. Die obere Summengrenze muß naturlich auf einen vernunfti-gen Wert beschrankt werden. Welche der drei Filterstrukturen hat denkleinsten Fehler ε (in Abhangigkeit von Nbits)?Hinweis: Die Wurzel aus der Summe der Quadrate kann in MATLABr

mit der Funktion norm() ausgewertet werden.

2.4 Zustandsraumbeschreibung

Eine Alternative zur Darstellung linearer, zeitinvarianter, zeitdiskreter Systemedurch die Differenzengleichung 2.25 ist die Beschreibung durch Zustandsglei-chungen und Ausgangsgleichungen [4, 6, 7]. Man erhalt diese Gleichungeneinfach dadurch, daß alle Speicherelemente (Verzogerungselemente) aus dem Sy-stem “herausgezogen” werden. Das verbleibende System ist dann gedachtnislosund besteht nur mehr aus Addierern, Multiplizierern (mit Konstanten) und Ver-zweigungen (siehe Abb. 2.11).

Durch die Aufteilung des Systems in einen speicherlosen Teil und einen Blockvon Verzogerungselementen konnen durch Anwendung des Superpositionsprinzipsfur lineare Systeme die Systemgleichungen unmittelbar angeschrieben werden:

x(n+ 1) = Ax(n) +Bu(n)

y(n) = Cx(n) +Du(n) .(2.35)

Im Gegensatz zur Differenzengleichung 2.25 mit den Filterkoeffizienten ak, k =1 . . . N und bk, k = 1 . . .M treten hier die Matrizen A,B,C,D als Systemparame-ter auf. Bei der allgemeinen Zustandsraumbeschreibung sind alle Signale Vektoren,d.h. es wird auch der Fall mehrerer Ein- und Ausgangssignale miteingeschlossen.

Page 63: MATLABr-Programmierung · 1Eingaben in MATLABr sollten keine deutschen Sonderzeichen wie ¨a, ¨o, ¨u,ß enthalten, wenn die Programme auch im nichtdeutschsprachigen Raum eingesetzt

2.4 Zustandsraumbeschreibung 55

T

u(n) y(n)

x(n) x(n+ 1)

Abbildung 2.11: Systemaufteilung bei der Zustandsraumdarstellung (Eingangssi-gnalvektor u(n), Ausgangssignalvektor y(n), Zustandsvektor x(n))

Beschrankt man sich auf Systeme mit nur einem Ein- und Ausgang, dann habendie Matrizen in Gl. 2.35 folgende Dimensionen: A: N ×N Matrix, B: N × 1 Spal-tenvektor, C: 1 × N Zeilenvektor und D: 1 × 1 Skalar (N ist die Dimension desZustandsvektors x(n)).

Obwohl die Zustandsraumbeschreibung Gl. 2.35 wegen der Matrizenoperatio-nen bei einfachen Filtern keinen Implementierungsvorteil bietet, hat sie doch eineReihe anderer, sehr wichtiger Vorzuge:

• einheitliche Darstellung fur die Verarbeitung ein- und mehrdimensionalerSignale,

• ubersichtliche Trennung der Anregung durch Anfangszustand und durch Ein-gangssignale,

• Vorausberechnung der Matrizen fur die Blockverarbeitung,

• vorteilhaft bei der Blockverarbeitung von Signalen oder bei parallelen Re-cheneinheiten,

• durch lineare Transformationen der Zustandsgleichungen ergeben sich alter-native Filterrealisierungen mit gleichem Eingangs/Ausgangsverhalten,

• effiziente Realisierungen von Systemen mit Mehrfachtaktverarbeitung (un-terschiedliche Taktraten am Systemeingang und am Systemausgang),

• Analyse der Systemeigenschaften durch Matrizenoperationen,

Page 64: MATLABr-Programmierung · 1Eingaben in MATLABr sollten keine deutschen Sonderzeichen wie ¨a, ¨o, ¨u,ß enthalten, wenn die Programme auch im nichtdeutschsprachigen Raum eingesetzt

56 2 Zeitdiskrete Systeme

• systematische Optimierung von Rausch- und Aussteuerungsverhalten beiendlicher Rechengenauigkeit (Festkommazahlendarstellung),

• Anwendungen bei adaptiven Filtern (Kalman-Filter),

• fur MATLABr wegen der Effizienz von Vektor- und Matrizenoperationenbesonders gut geeignet.

Fur die ausfuhrliche Behandlung der Zustandsraumbeschreibung digitaler Sy-steme muß auf [4, 6, 7] verwiesen werden. In diesem Buch soll die Zustandsraum-darstellung zur effizienten Filterimplementierung mit MATLABr eingesetzt wer-den.

Die Aufstellung der Zustandsraumbeschreibung Gl. 2.35 soll am Beispiel einesFilterblocks N -ter Ordnung nach Abb. 2.12 gezeigt werden. Diese Filterstrukturist eine alternative Realisierung zu Abb. 2.7.

T T T

...

...

...

b0 b1 b2

−a1 −a2 −aN

u(n)

bN

y(n)

x1(n)x1(n+ 1) x2(n)

xN (n)

b3

−a3

Abbildung 2.12: Filterblock N -ter Ordnung zur Aufstellung einer Zustandsraum-darstellung

Anhand des Schaltbildes lassen sich unmittelbar folgende Gleichungen ablesen:

x1(n+ 1) = −a1x1(n)− a2x2(n)− . . .− aNxN (n) + u(n)

x2(n+ 1) = x1(n)

...

xN (n+ 1) = xN−1(n)

y(n) = b0x1(n+ 1) + b1x1(n) + . . .+ bNxN (n) .

(2.36)

Mit diesen Gleichungen konnen die Matrizen der Zustandsraumbeschreibung vonGl. 2.35 sofort angeschrieben werden:

Page 65: MATLABr-Programmierung · 1Eingaben in MATLABr sollten keine deutschen Sonderzeichen wie ¨a, ¨o, ¨u,ß enthalten, wenn die Programme auch im nichtdeutschsprachigen Raum eingesetzt

2.4 Zustandsraumbeschreibung 57

A =

−a1 −a2 . . . −aN−1 −aN1 0 . . . 0 0

0 1 . . . 0 0...

.... . .

......

0 0 . . . 1 0

B = (1, 0, 0, . . . , 0)T

C = (b1 − b0a1, b2 − b0a2, . . . , bN − b0aN )

D = b0 .

(2.37)

Mit MATLABr wird diese Zustandsraumdarstellung ausgehend von den Koeffi-zientenvektoren a und b der Differenzengleichung mit der Funktion tf2ss() ge-bildet. Ein einfaches Beispiel soll die Realisierung eines digitalen Filters mit derZustandsraumdarstellung zeigen.

u = ones(200,1); % input signal

[b,a] = ellip(5,0.1,70,1/8); % design an elliptic low pass filter

[A,B,C,D] = tf2ss(b,a); % get state-space matrices

Ns = max(length(a),length(b))-1; % state vector length

x = zeros(Ns,1); % initial state vector

y = zeros(size(u));

for n = 1:length(u) % filter operation

y(n) = C*x + D*u(n);

x = A*x;

x(1) = x(1) + B(1)*u(n);

end

Im Vergleich zur Funktion filter() hat die Zustandsraumdarstellung keinenImplementierungsvorteil, da wesentlich mehr Arithmetikoperationen benotigt wer-den. Ein Vorteil ergibt sich erst bei der Blockverarbeitung von Signalen, beider mit der Zustandsraumdarstellung das Ausgangssignal blockweise berechnetund der Zustandsvektor nur einmal pro Block aktualisiert wird [4]. Durch schritt-weises Losen der Zustandsgleichungen 2.35 ergibt sich ausgehend von der Losungzum Zeitpunkt n und fur ein eindimensionales Eingangssignal u(n)

x(n+ 1) = Ax(n) +Bu(n)

x(n+ 2) = A2x(n) +ABu(n) +Bu(n+ 1)

...

x(n+M) = AMx(n) +

M−1∑

k=0

AM−1−kBu(n+ k) .

(2.38)

Page 66: MATLABr-Programmierung · 1Eingaben in MATLABr sollten keine deutschen Sonderzeichen wie ¨a, ¨o, ¨u,ß enthalten, wenn die Programme auch im nichtdeutschsprachigen Raum eingesetzt

58 2 Zeitdiskrete Systeme

Faßt man die M Eingangssignalwerte eines Blocks zum Vektor

u(n) = (u(n), u(n+ 1), . . . , u(n+M − 1))T (2.39)

zusammen, dann erhalt man fur die Zustandsgleichung bei Blockverarbeitung

x(n+M) = AMx(n) +BMu(n) , (2.40)

mit der N ×N MatrixAM = AM

und der N ×M Matrix

BM = (AM−1B,AM−2B, . . . ,AB,B) .

Vollig analog verlauft die schrittweise Berechnung des Ausgangssignals:

y(n) = Cx(n) +Du(n)

y(n+ 1) = CAx(n) +CBu(n) +Du(n+ 1)

. . .

y(n+M) = CAMx(n) +M−1∑

k=0

CAM−1−kBu(n+ k) +Du(n+M) .

(2.41)

Fuhrt man auch hier einen Vektor mit M Ausgangssignalwerten

y(n) = (y(n), y(n+ 1), . . . , y(n+M − 1))T (2.42)

ein, dann ergibt sich die Ausgangsgleichung bei Blockverarbeitung

y(n) = CMx(n) +DMu(n) , (2.43)

mit der M ×N Matrix

CM =

C

CA...

CAM−1

und der M ×M unteren Dreiecksmatrix

DM =

D 0 0 . . . 0

CB D 0 . . . 0

CAB CB D . . . 0...

......

. . ....

CAM−2B CAM−3B CAM−4B . . . D

,

Page 67: MATLABr-Programmierung · 1Eingaben in MATLABr sollten keine deutschen Sonderzeichen wie ¨a, ¨o, ¨u,ß enthalten, wenn die Programme auch im nichtdeutschsprachigen Raum eingesetzt

2.4 Zustandsraumbeschreibung 59

die gleichzeitig auch eine Toplitzmatrix ist. Die beiden Gleichungen 2.40 und2.43 werden als Blockzustandsraumdarstellung bezeichnet und ermoglichenneben der Funktion filter() eine weitere effiziente Filterimplementierung inMATLABr.

Aufgabe 2.9

Die Aufstellung der Matrizen fur die Zustandsraumdarstellung bei Block-verarbeitung ist eine besonders empfehlenswerte Ubung fur die Matri-zenverarbeitung mit MATLABr. Entwickeln Sie daher eine MATLABr-Funktion tf2blockss() zur Berechnung der Matrizen AM , BM vonGl. 2.40 bzw. CM und DM von Gl. 2.43. Als Funktionsparameter wer-den die Koeffizientenvektoren a und b der Differenzengleichung und dieBlocklange M verwendet.

Zum Testen kann die folgende blockweise Signalverarbeitung mit MATLABr

eingesetzt werden:

M = 40; % block length

Nu = 5*M; % signal length is a multiple of M

u = ones(Nu,1); % input signal

[b,a] = ellip(5,0.1,70,1/8); % design an elliptic low pass filter

[Am,Bm,Cm,Dm] = tf2blockss(b,a,M); % block state-space matrices

Ns = max(length(a),length(b))-1; % state vector length

x = zeros(Ns,1); % initial state vector

y = zeros(size(u));

for n = 1:M:Nu % block filter operation

nb = n:n+M-1; % block time indices

y(nb) = Cm*x + Dm*u(nb);

x = Am*x + Bm*u(nb);

end

Mit der Blockverarbeitung ist zwar durch die Vektorisierung (Verkurzung derFOR-Schleife) eine effizientere Verarbeitung in MATLABr moglich, der Rechen-aufwand ist immer noch großer als bei der direkten Implementierung der Diffe-renzengleichung. Eine wesentliche Aufwandsreduktion gelingt jedoch durch eineDiagonalisierung der Zustandsmatrix A mit der Eigenwertzerlegung [2]:

A = VΛV−1. (2.44)

Die N × N Diagonalmatrix Λ enthalt die N Eigenwerte λi von A. Die entspre-chenden Eigenvektoren sind die N Spaltenvektoren der Matrix V. In MATLABr

Page 68: MATLABr-Programmierung · 1Eingaben in MATLABr sollten keine deutschen Sonderzeichen wie ¨a, ¨o, ¨u,ß enthalten, wenn die Programme auch im nichtdeutschsprachigen Raum eingesetzt

60 2 Zeitdiskrete Systeme

erhalt man die Eigenwertzerlegung mit [V,L] = eig(A). Ein weiterer Vorteil derEigenwertzerlegung ist die Vereinfachung der Bildung von Ap:

A = VΛV−1

A2 = VΛV−1VΛV−1 = VΛ2V−1

...

Ap = VΛpV−1 .

(2.45)

Damit reduziert sich das Potenzieren der Matrix A bei der Blockzustandsraum-darstellung auf die Bildung von Potenzen der N Eigenwerte.

Um die Diagonalisierung der A-Matrix auf die Zustandsraumdarstellung an-zuwenden, wird der Zustandsvektor der linearen Transformation x(n) = V−1x(n)unterworfen, so daß sich mit Gl. 2.40 und Gl. 2.43 die folgenden Beziehungenergeben:

x(n+M) = V−1AMVx(n) +V−1BMu(n)

= ΛM x(n) +V−1BMu(n)

y(n) = CMVx(n) +DMu(n) .

(2.46)

Diese transformierte Zustandsraumdarstellung besitzt jetzt pro Abtastintervalleinen Rechenaufwand (Anzahl der Arithmetikoperationen) von

NR(N,M) = N/M︸ ︷︷ ︸

Matrix ΛM

+ 2N︸︷︷︸

Matrizen BM ,CM

+ (M + 1)/2︸ ︷︷ ︸

Matrix DM

. (2.47)

Die Anzahl der Arithmetikoperationen kann bzgl. der BlocklangeM optimiert wer-den, wennM formal als kontinuierliche Variable betrachtet wird und die Ableitungvon NR(M) nach M null gesetzt wird. Es ergibt sich als optimale Blocklange

Mopt = round(√

2N)

. (2.48)

Beim Entwurf rekursiver Filter ist aus numerischen Grunden die Filterordnung(und damit die Dimension N des Zustandsraums) auf etwa 20 beschrankt. Filterhoherer Ordnung sind außerdem zur Approximation auch sehr steiler Dampfungs-verlaufe kaum erforderlich. Die optimale Blocklange bewegt sich demnach fur denpraktischen Einsatz im Bereich M = 3 . . . 6.

Mit dem folgenden MATLABr-Beispiel werden alle bisherigen Uberlegungenzur Blockverarbeitung fur die Berechnung der Blockzustandsraummatrizen AM ,BM , CM und DM verwendet. Der Ausgangspunkt ist der Entwurf eines ellipti-schen Filters und die Bestimmung der gewohnlichen Zustandsraummatrizen. Da-nach erfolgt die Diagonalisierung der A-Matrix mit der Eigenwertzerlegung. ImAnschluß werden mit den transformierten Matrizen die Blockzustandsraummatri-zen berechnet.

Page 69: MATLABr-Programmierung · 1Eingaben in MATLABr sollten keine deutschen Sonderzeichen wie ¨a, ¨o, ¨u,ß enthalten, wenn die Programme auch im nichtdeutschsprachigen Raum eingesetzt

2.4 Zustandsraumbeschreibung 61

[b,a] = ellip(7,0.1,100,1/8); % elliptic filter design

[A1,B1,C1,D1] = tf2ss(b,a); % compute state-space decomposition

[V,L] = eig(A1); % compute eigenvalue decomposition

A1 = diag(L); % A1 = vector of diagonal elements of L

B1 = inv(V)*B1;

C1 = C1*V;

% compute block state-space matrices Am, Bm, Cm, Dm

N = length(A1); % state-space dimension

M = round(sqrt(2*N)); % optimum block length

Bm = zeros(N,M);

Cm = zeros(M,N);

Am = 1;

for n = M-1:-1:1

Am = Am .* A1;

Bm(:,n) = Am .* B1;

Cm(M-n+1,:) = C1 .* (Am.’);

end

Am = Am .* A1;

Bm(:,M) = B1;

Cm(1,:) = C1;

Dm = toeplitz([D1 ; real(Cm(1:M-1,:)*B1)],[D1 zeros(1,M-1)]);

Aufgabe 2.10

Verwenden Sie diese MATLABr-Anweisungen zur Entwicklung einerFunktion y = blockss_filt(b,a,x) zur Signalfilterung mit der Block-zustandsraumdarstellung. Beachten Sie, daß durch die Eigenwertzerle-gung die Matrizen komplexwertig sind. Dabei kann durch Vermeidungdes Rechnens mit konjugiert komplexen Elementen der Rechenaufwandreduziert werden. Vergleichen Sie die Arithmetikoperationen pro Abtast-intervall mit jenen der Kaskaden- und Parallelform.

Page 70: MATLABr-Programmierung · 1Eingaben in MATLABr sollten keine deutschen Sonderzeichen wie ¨a, ¨o, ¨u,ß enthalten, wenn die Programme auch im nichtdeutschsprachigen Raum eingesetzt

62 2 Zeitdiskrete Systeme

Page 71: MATLABr-Programmierung · 1Eingaben in MATLABr sollten keine deutschen Sonderzeichen wie ¨a, ¨o, ¨u,ß enthalten, wenn die Programme auch im nichtdeutschsprachigen Raum eingesetzt

3

Diskrete Fouriertransformation

Die Fouriertransformation fur zeitdiskrete Signale wurde bereits bei der Beschrei-bung zeitdiskreter Systeme im Frequenzbereich im Abschnitt 2.2 abgeleitet.1 DieseTransformation ordnet einem zeitdiskreten Signal x(n) eine frequenzkontinuierli-che Funktion

X(ejθ)=

∞∑

k=−∞

x(k)e−jθk (3.1)

zu, die 2π-periodisch in der Frequenz θ ist. Ist das zeitdiskrete Signal periodischmit der Periode N , dann besitzt es ein Linienspektrum, d.h. es weist nur Frequenz-komponenten bei Vielfachen der Grundfrequenz 2π

N auf und kann als Fourierreihe

x(n) = x(n+N) =1

N

N−1∑

k=0

ckej 2π

Nnk (3.2)

dargestellt werden. Die Basissignale dieser Reihenentwicklung haben die grundle-gende Eigenschaft

N−1∑

k=0

ej2πN

kn =

N n = lN, l = 0,±1,±2, . . .0 sonst

, (3.3)

die man durch Anwendung der Summenformel einer endlichen, geometrischen Rei-

he erhalt (∑N−1

k=0 xk = 1−xN

1−x ). Mit Gl. 3.3 konnen aus Gl. 3.2 die Reihenkoeffi-

zienten ck bestimmt werden, indem beide Seiten dieser Gleichung mit e−j 2πN

nk

1Die Fouriertransformation fur zeitdiskrete Signale ist nicht gleichbedeutend mit der diskretenFouriertransformation, die in diesem Kapitel behandelt wird!

Page 72: MATLABr-Programmierung · 1Eingaben in MATLABr sollten keine deutschen Sonderzeichen wie ¨a, ¨o, ¨u,ß enthalten, wenn die Programme auch im nichtdeutschsprachigen Raum eingesetzt

64 3 Diskrete Fouriertransformation

multipliziert werden und diese Terme dann uber n = 0, . . . , N − 1 aufsummiertwerden:

N−1∑

n=0

x(n)e−j 2πN

nk =N−1∑

n=0

e−j 2πN

nk 1

N

N−1∑

k′=0

ck′ej2πN

nk′

=1

N

N−1∑

k′=0

ck′

N−1∑

n=0

ej2πN

n(k′−k)

︸ ︷︷ ︸

N fur k′=k0 sonst

= ck.

(3.4)

Die Reihenkoeffizienten ck stellen das Linienspektrum des periodischen, zeitdis-kreten Signals bei den harmonischen Frequenzen 2π

N k dar. Da es im zeitdiskretenFall nur N verschiedene Harmonische gibt, genugen N Reihenkoeffizienten. Wer-den weniger als N Koeffizienten verwendet, dann wird bei der Approximation derFunktion durch die Reihenentwicklung ein Fehler gemacht, dessen EigenschaftenSie im nachsten Beispiel mit MATLABr untersuchen konnen.

Aufgabe 3.1

Das periodische Signal x(n) mit der Periodendauer N soll durch eineFourierreihe angenahert werden, die weniger als N Koeffizienten hat:

xM (n) =1

N

M−1∑

k=0

ckej 2π

Nnk,

mit M ≤ N . Berechnen Sie den Fehler

ε(M) =N−1∑

k=0

|x(n)− xM (n)|2

in Abhangigkeit von M fur verschiedene periodische Signale mit derPeriode N . Uberprufen Sie außerdem die Parsevalsche Gleichung

NN−1∑

n=0

|x(n)|2 =N−1∑

k=0

|ck|2.

Hinweis: In MATLABr konnen Sie die Fourierreihenkoeffizienten ameinfachsten mit c = fft(x,M) berechnen. Fur die Summe der Quadratekann wieder die Funktion norm() eingesetzt werden.

Page 73: MATLABr-Programmierung · 1Eingaben in MATLABr sollten keine deutschen Sonderzeichen wie ¨a, ¨o, ¨u,ß enthalten, wenn die Programme auch im nichtdeutschsprachigen Raum eingesetzt

65

Von der Fourierreihendarstellung fur zeitdiskrete Signale ist es nur mehr einkleiner Schritt zur diskreten Fouriertransformation. Zwischen den Fourierreihenko-effizienten ck eines mit N periodischen Signals x(n) und der Fouriertransformationeines zeitbegrenzten Signals x(n) (mit x(n) = 0 fur n < 0 und n ≥ N) besteht derZusammenhang

ck =N−1∑

n=0

x(n)e−j 2πN

nk =N−1∑

n=0

x(n)e−jθn∣∣∣θ= 2π

Nk

= X(ejθ)∣∣∣θ= 2π

Nk= X(k).

(3.5)

Die Fourierreihenkoeffizienten entsprechen den Werten des Spektrums an diskretenFrequenzen. Dieser Zusammenhang ist in Abb. 3.1 anschaulich dargestellt.

x(n)

n

(a)

4035302520151050

|X(ejθ)|

θ

(b)

2ππ0−π−2π

|X(k)|

k

(c)

20151050-5-10-15-20

x(n) = x(n⊕N)

n

(d)

4035302520151050

Abbildung 3.1: Zeitbegrenztes Signal der Lange N = 20 (a), zugehoriges Spektrum(b), Abtastung im Frequenzbereich (c), periodische Fortsetzung im Zeitbereich (d)

Page 74: MATLABr-Programmierung · 1Eingaben in MATLABr sollten keine deutschen Sonderzeichen wie ¨a, ¨o, ¨u,ß enthalten, wenn die Programme auch im nichtdeutschsprachigen Raum eingesetzt

66 3 Diskrete Fouriertransformation

Bei der diskreten Fouriertransformation (DFT) werden nun N-PunkteSignale betrachtet, die nur fur N Zeitindizes (vorzugsweise n = 0, . . . , N − 1)gegeben sind. Mit diesen N Zeitwerten x(n) werden N Frequenzwerte X(k) undumgekehrt berechnet [1]:

X(k) =N−1∑

n=0

x(n)e−j 2πN

nk k = 0 . . . N − 1 (3.6)

x(n) =1

N

N−1∑

k=0

X(k)ej2πN

nk n = 0 . . . N − 1. (3.7)

Die Implementierung der DFT mit MATLABr gestaltet sich sehr einfach. ZurVermeidung der redundanten Berechnung von Exponentialfunktionen, konnen die-se in einer Tabelle mit N Eintragen vorausberechnet werden. Die Adressierungdieser Tabelle erfolgt mit nk, wobei durch die Modulooperation Vielfache von Neliminiert werden. Das folgende MATLABr-Programm zeigt die Berechnung derDFT mit einer Tabelle fur die Grundschwingung.

x = x(:); % signal stored as column vector

N = length(x);

n = 0:N-1;

W = exp(-j*2*pi/N*n); % vector of exponentials

X = zeros(N,1);

for k = 0:N-1

X(k+1) = W(rem(n*k,N)+1)*x; % modulo-N operation removes multiples of N

end

Wesentlich effizienter ist die Funktion X = fft(x,N) bzw. x = ifft(X,N), die beiMATLABr dann am schnellsten ist, wenn N eine Zweierpotenz ist. Aber auch furandere Langen N werden schnelle Algorithmen eingesetzt.

Aufgabe 3.2

In dieser Aufgabe konnen Sie Ausfuhrzeit und Genauigkeit der direktenImplementierung der DFT mit den Werten bei der FFT vergleichen. Ent-werfen Sie dazu eine Funktion dft_compare(N) die sinusformige Testsi-gnale x = sin(2*pi/N*M*[0:N-1]) und Zufallssignale x = randn(N,1)

verwendet und damit die DFT und IDFT berechnet. Als Fehler dient da-bei die maximale Betragsabweichung zwischen Eingangssignal und demErgebnis der kombinierten Anwendung DFT + IDFT.Hinweis: Fur die Zeitmessung kann die Funktion etime() eingesetztwerden, uber die Sie mit help etime mehr erfahren.

Page 75: MATLABr-Programmierung · 1Eingaben in MATLABr sollten keine deutschen Sonderzeichen wie ¨a, ¨o, ¨u,ß enthalten, wenn die Programme auch im nichtdeutschsprachigen Raum eingesetzt

3.1 Interpolation im Frequenzbereich 67

MATLABr stellt mit den Funktionen fft() und ifft() sehr leistungsfahigeRoutinen fur die DFT/IDFT zur Verfugung. Speziell ab MATLABr-Version 6.0kommen die derzeit schnellsten FFT-Programme zum Einsatz. In diesem Buchwerden daher keine FFT-Algorithmen vorgestellt, sondern einige fur den prakti-schen Einsatz wichtige DFT-Eigenschaften und Anwendungen behandelt:

• Unterschiedliche Anzahl von Zeit- und Frequenzpunkten (Interpolation undDezimation im Frequenzbereich),

• Fenstereffekt bei der DFT, Leakage-Effect bei Spektralkomponenten mit be-nachbarten Frequenzen,

• Zyklische Faltung, Overlap-Add und Overlap-Save Methode zur schnellenFIR-Filterung,

• Chirp-DFT.

3.1 Interpolation im Frequenzbereich

Wie bereits in Abb. 3.1 anschaulich dargestellt, genugt bei einem N -Punkte Signaldie Angabe der Fouriertransformation an N aquidistanten Frequenzpunkten. AlleZwischenwerte konnen durch Interpolation gewonnen werden:

X(ejθ)=

N−1∑

n=0

x(n)e−jθn =

N−1∑

n=0

1

N

N−1∑

k=0

X(k)ej2πN

nk

︸ ︷︷ ︸

x(n)

e−jθn

=

N−1∑

k=0

X(k)1

N

N−1∑

n=0

e−j(θ− 2πN

k)n

︸ ︷︷ ︸

GN

(

ej(θ− 2π

Nk))

=

N−1∑

k=0

X(k)GN

(

ej(θ−2πN

k))

.

(3.8)

Die Interpolationsfunktion GN

(ejθ)erhalt man als Summe einer endlichen, geo-

metrischen Reihe

GN

(ejθ)=

1

N

1− e−jθN

1− e−jθ=

1

N

sin θN2

sin θ2

e−jθN−12 . (3.9)

Sollen bei der DFT-Berechnung mehr Frequenzpunkte als Zeitpunkte (L > N)vorhanden sein, dann genugt die Bestimmung derN -Punkte DFT. Die zusatzlichenWerte konnen mit Gl. 3.8 und 3.9 fur θ = 2π

L k, k = 0, . . . , L− 1 ermittelt werden.Anwendung findet die Interpolation bei der Spektralanalyse und beim Entwurfvon FIR-Filtern mit der Frequenzabtastungsmethode (Abschnitt 4.1.1).

Page 76: MATLABr-Programmierung · 1Eingaben in MATLABr sollten keine deutschen Sonderzeichen wie ¨a, ¨o, ¨u,ß enthalten, wenn die Programme auch im nichtdeutschsprachigen Raum eingesetzt

68 3 Diskrete Fouriertransformation

Viel einfacher und schneller als mit Gl. 3.8 erhalt man dasselbe Ergebnis durchAnfugen von L − N Nullen zum Signal und anschließender Ausfuhrung einer L-Punkte DFT. Wird namlich die Fouriertransformation X

(ejθ)des N -Punkte Si-

gnals x(n) an L Frequenzen θk = 2πL k, k = 0, . . . , L − 1 abgetastet, dann ergibt

sich

X(k) = X(

ej2πL

k)

=N−1∑

n=0

x(n)e−j 2πL

nk. (3.10)

Andererseits erhalt man aus dem (mit L−N Nullen) erweiterten Signal

x(n) =

x(n) 0 ≤ n ≤ N − 1

0 N ≤ n ≤ L− 1(3.11)

die DFT der Lange L

X(k) =L−1∑

n=0

x(n)e−j 2πL

nk =N−1∑

n=0

x(n)e−j 2πL

nk. (3.12)

Der Vergleich von Gl. 3.10 mit Gl. 3.12 liefert schließlich

X(k) = X(

ej2πL

k)

= X(k). (3.13)

Das Anfugen von Nullen ist somit die einfachste Methode zur Interpolation imFrequenzbereich. Eine haufige Fehlinterpretation der Interpolation ist die “Ver-besserung der Frequenzauflosung” durch Nullenanfugen. Das ist damit naturlichnicht erreichbar, da die Interpolation nur passende Zwischenwerte liefert. Einehohere Frequenzauflosung im Sinne von mehr Details im Frequenzbereich ist nurdurch eine langere Messung des Signals (und nicht durch kunstliche Verlangerung)erreichbar.

Aufgabe 3.3

Stellen Sie die Interpolationsfunktion GN

(ejθ)fur verschiedene Werte

von N nach Betrag und Phase graphisch mit MATLABr dar. WelchesZeitsignal gN (n) gehort als inverse Fouriertransformation zu GN

(ejθ)?

Bestimmen Sie die DFTs der Lange L = 32 von den folgenden Signalender Lange N = 10, einmal mit der Interpolationsformel Gl. 3.8 und zumVergleich durch Anfugen von Nullen.

a) x(n) = δ(n), n = 0, 1, . . . , 9

b) x(n) = δ(n− 1), n = 0, 1, . . . , 9

c) x(n) = e−0,1n2

, n = 0, 1, . . . , 9

Page 77: MATLABr-Programmierung · 1Eingaben in MATLABr sollten keine deutschen Sonderzeichen wie ¨a, ¨o, ¨u,ß enthalten, wenn die Programme auch im nichtdeutschsprachigen Raum eingesetzt

3.2 Dezimation im Frequenzbereich 69

3.2 Dezimation im Frequenzbereich

In diesem Fall ist die Anzahl der Frequenzpunkte L kleiner als die Anzahl der Si-gnalwerte N . Zur Vereinfachung soll zwischen N und L ein ganzzahliges Verhaltnisbestehen, d. h. N = ML (M ganzzahlig). Es wird demnach nur jeder M -te Fre-quenzpunkt benotigt

X(k) = X(kM) k = 0 . . . L− 1. (3.14)

Die naheliegende Methode zur Berechnung von X(k) ist die Anwendung einer DFTder Lange N , von der dann nur jeder M -te Wert verwendet wird. Es gibt aller-dings eine besseres Verfahren, das die Berechnung uberflussiger Frequenzpunktevermeidet und folgendermaßen abgeleitet werden kann:

Das zur reduzierten (L-Punkte) DFT X(k) gehorende Zeitsignal x(n) ist

x(n) =1

L

L−1∑

k=0

X(kM)ej2πL

nk =1

L

N−1∑

k=0(k=lM)

X(k)ej2πML

nk

=1

L

N−1∑

l=0

X(l)L−1∑

m=0

δ(l −mM)

︸ ︷︷ ︸

p(l)

ej2πN

nl.(3.15)

Die “Austastfunktion” p(l) selektiert nur jeden M -ten Wert der Summe uberl und besitzt als periodisches Signal der Periode M die Fourierreihendarstellung

p(l) =L−1∑

m=0

δ(l −mM) =1

M

M−1∑

m=0

ej2πM

lm. (3.16)

Wird Gl. 3.16 in Gl. 3.15 eingesetzt, dann ergibt sich nach kurzer Zwischenrech-nung

x(n) =M−1∑

m=0

1

N

N−1∑

l=0

X(l)ej2πN

(n+mL)l

︸ ︷︷ ︸

x(n+mL)

. (3.17)

Der Zusammenhang zwischen dem zur dezimierten DFT gehorenden Zeitsignalx(n) und dem ursprunglichen Zeitsignal x(n) ist somit

x(n) =

M−1∑

m=0

x(n+mL) n = 0 . . . L− 1. (3.18)

Page 78: MATLABr-Programmierung · 1Eingaben in MATLABr sollten keine deutschen Sonderzeichen wie ¨a, ¨o, ¨u,ß enthalten, wenn die Programme auch im nichtdeutschsprachigen Raum eingesetzt

70 3 Diskrete Fouriertransformation

Werden daher weniger Frequenzpunkte (L) als Zeitpunkte benotigt, dann bildetman zunachst in einer Vorverarbeitung nach Gl. 3.18 das Signal x(n) der Lange L.Bei dieser Vorverarbeitung erfolgt die Datenreduktion durch Ubereinanderlegenund Addieren von Signalblocken der Lange L. Dafur werden LM = N Additionenbenotigt. Auf dieses Signal wird dann eine L-Punkte DFT angewendet, um die LDFT-Werte X(kM) von Gl. 3.14 zu erhalten. Ein Aufwandsvergleich zeigt, daßohne Vorverarbeitung zur Signallangenreduktion O(N log2N) Arithmetikopera-tionen fur die N -Punkte FFT erforderlich sind.2 Mit der Vorverarbeitung nachGl. 3.18 ist die Komplexitat jedoch nur O(N + L log2 L). Beispielsweise ist furN = 29 = 512 und L = 26 = 64 der Aufwand im ersten Fall N log2N = 4608, imzweiten Fall dagegen nur N + L log2 L = 896.

Mit MATLABr kann eine dezimierte DFT z.B. in folgender Weise realisiertwerden:

x = x(:); % signal stored as column vector

Nx = length(x);

M = ceil(Nx/L); % L = number of frequency points

N = M*L; % number of time points N is a multiple of L

x = [x ; zeros(N-Nx,1)]; % append zeros, if necessary

Xb = zeros(L,M); % matrix for storage of M signal blocks

% of length L

Xb(:) = x; % columns of Xb are subsequent signal

% blocks of length L

xb = sum(Xb.’); % compute row sums of Xb

X = fft(xb); % decimated FFT of length L

Anwendung findet die Dezimation im Frequenzbereich hauptsachlich zur Da-tenreduktion bei der Spektralanalyse, wenn z.B. bei Sprachsignalen nur eine grobeDarstellung des Spektrums benotigt wird. Ein weiteres Einsatzgebiet sind Multi-raten-DFT-Filterbanke.

Aufgabe 3.4

Untersuchen Sie anhand verschiedener Signale (z.B. kurze Sequenzenabgetasteter Sprachsignale) wie die Dezimation im Frequenzbereich dasErscheinungsbild des Signalspektrums beeinflußt.Hinweis: Ein Audiosignal, als Datei im WAV-Format (z.B. voice.wav)gespeichert, kann mit x = wavread(’voice.wav’) als Vektor x in dieArbeitsumgebung von MATLABr geladen werden. Im Falle eines Ste-reosignals ist x eine Nx × 2 Matrix.

2Der angegebene Aufwand bezieht sich auf einen FFT-Algorithmus bei dem N eine Zweier-potenz ist.

Page 79: MATLABr-Programmierung · 1Eingaben in MATLABr sollten keine deutschen Sonderzeichen wie ¨a, ¨o, ¨u,ß enthalten, wenn die Programme auch im nichtdeutschsprachigen Raum eingesetzt

3.3 Fenstereffekt bei der DFT 71

3.3 Fenstereffekt bei der DFT

Die Verarbeitung von Signalen mit der DFT ist nur dann exakt moglich, wenndas Signal zeitbegrenzt ist. Im Fall nichtzeitbegrenzter Signale konnen nur peri-odische Signale ohne Fehler mit der DFT analysiert werden, wenn die DFT-Langegleich (oder ein ganzzahliges Vielfaches) der Periodendauer ist. In allen anderenFallen treten in den Spektren Abweichungen auf, die als Fenstereffekte, Win-dow Effects bezeichnet werden und das erwartete Spektrum stark verfalschenkonnen [8, 9]. Damit verbunden ist auch das sogenannte Leakage der DFT, dasbesonders gut bei Signalen beobachtet werden kann, die aus Sinuskomponentenmit nichtharmonischen, eng benachbarten Frequenzen bestehen. Die Effekte durchdie Zeitbegrenzung, die ein “Uberfließen von Spektrallinien” bewirken, lassen sicham einfachen Beispiel einer komplexen Exponentialschwingung illustrieren. Furx(n) = ej

2πM

n als Prototyp eines periodischen Signals (Periode M) ergibt sich mitGl. 3.6 fur die DFT

X(k) =N−1∑

n=0

e−j 2πN

nk ej2πM

n =1− ej2π( N

M−k)

1− ej2π( 1M

− kN )

. (3.19)

Fur M = N erhalt man aus Gl. 3.19 fur k ∈ [0, N) eine Spektrallinie X(k) =Nδ(k− 1), da die Frequenz der Exponentialschwingung auf einem Frequenzpunktder DFT liegt. Sind im Gegensatz dazu M und N teilerfremd, dann ergeben sichmehrere von null verschiedene Spektrallinien (siehe Abb. 3.2).

k

|X(k)|

6050403020100

60

40

20

0

Abbildung 3.2: Betrag der N -Punkte DFT einer komplexen Exponentialschwin-gung x(n) = ej

2πM

n mit N = 64 und M = 3

Die Zeitbegrenzungseffekte konnen durch Multiplikation des Signals mit einerFensterfunktion w(n) beeinflußt werden, und zwar bei sinusformigen Signalen die

Page 80: MATLABr-Programmierung · 1Eingaben in MATLABr sollten keine deutschen Sonderzeichen wie ¨a, ¨o, ¨u,ß enthalten, wenn die Programme auch im nichtdeutschsprachigen Raum eingesetzt

72 3 Diskrete Fouriertransformation

Breite des spektralen Hauptbeitrages (Main Lobe) und die Hohe der Nebenbeitrage(Side Lobes). Die Fensterfunktion hat einen symmetrischen, glockenformigen Ver-lauf, der die Randwerte des Signals abschwacht. MATLABr stellt mit den Funktio-nen bartlett(), blackman(), chebwin(), hamming(), hanning() und kaiser()

die gebrauchlichsten Fensterfunktionen fur die Spektralanalyse zur Verfugung.

Aufgabe 3.5

Es ist das Spektrum eines Signals zu untersuchen, das aus der Uberla-gerung zweier Sinusschwingungen besteht:

x(n) = sin θ1n+ sin θ2n.

Beobachten Sie das Spektrum von xw(n) = w(n)x(n) in Abhangigkeitvon der Differenzfrequenz ∆θ = θ2− θ1 fur verschiedene Fensterfunktio-nen w(n). Achten Sie insbesondere auf die Beeinflussung der Große undForm des spektralen Hauptbeitrags durch die Nebenbeitrage der anderenFrequenzkomponente (Leakage). Welche Fensterfunktion liefert die besteTrennung der Spektralkomponenten? Welche ist am besten zur Messungder spektralen Amplituden geeignet?

3.4 Zyklische Faltung

Die Verknupfung von Signalen mit der Faltungsoperation wurde bereits im Ab-schnitt 1.3 vorgestellt. Ferner wurde im Abschnitt 2.2 gezeigt, daß das Eingangs/-Ausgangsverhalten linearer, zeitinvarianter Systeme im Zeitbereich durch eine Fal-tungsoperation und im Frequenzbereich durch die Multiplikation der Spektrencharakterisiert wird (siehe auch Gl. 2.23):

y(n) =∞∑

k=−∞

x(k)h(n− k) FT←→ Y(ejθ)= H

(ejθ)X(ejθ). (3.20)

Eine entsprechende Beziehung ist auch bei der DFT zu erwarten, wobei jedochzu beachten ist, daß bei der DFT N -Punkte-Signale transformiert werden. BeiZeitverschiebungen kommt daher die periodische Fortsetzung des Signals zur An-wendung, d.h. Zeitindizes sind mit der Modulooperation zu verknupfen. Diese zy-klische Zeitverschiebung ist in Abb. 3.3 dargestellt. Im Gegensatz zur normalenZeitverschiebung, wo Signale endlicher Dauer außerhalb des gegebenen Zeitinter-valls null sind, werden N -Punkte-Signale bei der DFT zyklisch zeitverschoben, da

Page 81: MATLABr-Programmierung · 1Eingaben in MATLABr sollten keine deutschen Sonderzeichen wie ¨a, ¨o, ¨u,ß enthalten, wenn die Programme auch im nichtdeutschsprachigen Raum eingesetzt

3.4 Zyklische Faltung 73

x(n) x((n− 4)⊕N)

n n0 1 N − 1 0 4 N − 1

Abbildung 3.3: Zyklische Zeitverschiebung bei N -Punkte-Signalen

die DFT und IDFT wegen der Faktoren ej2πN

nk invariant bezuglich Verschiebungenn± lN, l = 0, 1, 2, . . . ist (siehe Gl. 3.6).

Mit der DFT erhalt man bei N -Punkte-Signalen eine zu Gl. 3.20 aquivalenteBeziehung

y(n) =N−1∑

m=0

x(m)h((n−m)⊕N)DFT←→ Y (k) = H(k)X(k) n = 0, . . . , N−1 (3.21)

(⊕ ist die Modulooperation). Bei der Ableitung dieses fur die praktische Anwen-dung außerst wichtigen Zusammenhangs wird von den DFTs

X(k) =N−1∑

n=0

x(n)e−j 2πN

nk und H(k) =N−1∑

n=0

h(n)e−j 2πN

nk

der Signale x(n) und h(n) ausgegangen. Bildet man damit

X(k)H(k) =N−1∑

m=0

N−1∑

l=0

x(m)h(l)e−j 2πN

(m+l)k,

dann gehort zu diesem Produkt der DFTs das Zeitsignal

y(n) =1

N

N−1∑

k=0

X(k)H(k)ej2πN

nk

=

N−1∑

m=0

x(m)

N−1∑

l=0

h(l)1

N

N−1∑

k=0

e−j 2πN

(n−m−l)

︸ ︷︷ ︸

1 fur l=n−m+iN0 sonst

=

N−1∑

m=0

x(m)h((n−m)⊕N) n = 0, . . . , N − 1.

(3.22)

Page 82: MATLABr-Programmierung · 1Eingaben in MATLABr sollten keine deutschen Sonderzeichen wie ¨a, ¨o, ¨u,ß enthalten, wenn die Programme auch im nichtdeutschsprachigen Raum eingesetzt

74 3 Diskrete Fouriertransformation

Der Zusammenhang zwischen y(n) und x(n), h(n) in Gl. 3.22 wird als zyklischeFaltung bezeichnet und wurde bereits auf Seite 20 vorgestellt. Bedingt durchdie Modulooperation in der Faltungssumme wird hier h(n) zyklisch verschoben.Man kann sich daher beide Signale auf je einem Zylinder abgebildet denken (h(n)zeitinvers). Die zyklische Verschiebung in Gl. 3.22 ergibt sich dann durch eineentsprechende Verdrehung eines der beiden Zylinder.

Der Rechenaufwand fur die Auswertung der Faltungssumme ist von einer Kom-plexitat O(N2). Wird die zyklische Faltung uber die FFT durch Multiplikation derSpektren und anschließender IFFT ausgefuhrt, dann steigt der Aufwand nur mitN(1+log2N). Mit MATLABr kann die zyklische Faltung zweier Signale der LangeN sehr kompakt und effizient ausgefuhrt werden:

x = x(:); % force x, h to column vectors

h = h(:);

y = ifft(fft(x,N) .* fft(h,N)); % cyclic convolution

if ~any(imag(x)) & ~any(imag(h)) % real-valued signals x, h ?

y = real(y); % avoid tiny imaginary parts

end

Mit der if-Anweisung wird verhindert, daß bei reellen Signalen das Faltungser-gebnis durch minimale Rechenfehler der FFT und IFFT einen kleinen Imaginarteil(typisch im Bereich 10−13 . . . 10−15) aufweist.

Im Gegensatz zur normalen (linearen) Faltung, deren Ergebnis im Fall zweierSignale der Lange N die Lange 2N − 1 besitzt, also etwa doppelt so lang ist,hat y(n) in Gl. 3.22 die gleiche Lange N , wie die beiden Signale x(n) und h(n).Soll daher die normale Faltung mit Hilfe der zyklischen realisiert werden, dannmussen beide Signale durch Anfugen von Nullen auf die Lange des Ergebnissignalsgebracht werden. Mit MATLABr ist die Implementierung der linearen Faltungzweier Signale der Langen Nx und Nh mit Hilfe der FFT/IFFT wieder ein kurzesProgramm:

x = x(:); % force x, h to column vectors

h = h(:);

Nx = length(x);

Nh = length(h);

% linear convolution by cyclic convolution

y = ifft(fft([x ; zeros(Nh-1,1)]) .* fft([h ; zeros(Nx-1,1)]));

if ~any(imag(x)) & ~any(imag(h)) % real-valued signals x, h ?

y = real(y); % avoid tiny imaginary parts

end

Page 83: MATLABr-Programmierung · 1Eingaben in MATLABr sollten keine deutschen Sonderzeichen wie ¨a, ¨o, ¨u,ß enthalten, wenn die Programme auch im nichtdeutschsprachigen Raum eingesetzt

3.5 Overlap-Add und Overlap-Save Methode 75

Aufgabe 3.6

Entwerfen Sie eine MATLABr-Funktion [yl,yc] = convolve(x,h) zurBerechnung der normalen (linearen) und der zyklischen Faltung mit derDFT/IDFT fur Signale unterschiedlicher Langen. Testen und vergleichenSie die Ergebnisse beider Faltungsoperationen mit folgenden Signalen:

a)x(n) = 1, n = 0, . . . , 9 h(n) = 1, n = 0, . . . , 24

b)

x(n) =

1 0 ≤ n ≤ 9

0 10 ≤ n ≤ 15h(n) =

1 0 ≤ n ≤ 24

0 25 ≤ n ≤ 31

c)

x(n) =

1 0 ≤ n ≤ 9

0 10 ≤ n ≤ 15h(n) = δ(n)− δ(n− 10), 0 ≤ n ≤ 15

Versuchen Sie in allen Fallen die Unterschiede zwischen normaler undzyklischer Faltung zu erklaren.

3.5 Overlap-Add und Overlap-Save Methode

Bei der FIR-Filterung von Signalen mit der FFT tritt das Problem auf, daß dasEingangssignal x(n) beliebig lang sein kann, die Filterimpulsantwort h(n) jedocheine vergleichsweise kurze Dauer Nh aufweist. Um in diesem Fall die zyklischeFaltung anzuwenden, muß das Eingangssignal in Blocke zerlegt und jeder Blockeinzeln verarbeitet werden. Bedingt durch die Faltungsoperation verlangern sichdie Blocke, so daß bei der Bildung des gesamten Ausgangssignals y(n) die be-rechneten Blocke uberlappend zusammengesetzt werden mussen. Dabei gibt eszwei grundsatzliche Methoden [1]: Bei der Overlap-Add Methode wird dasEingangssignal in aufeinanderfolgende, nichtuberlappende Blocke xk der Lange Lunterteilt und jeder Block mit einer FFT der Lange Nf = L+Nh− 1 verarbeitet.Dadurch sind die Ausgangssignalblocke um Nh−1 Werte langer. Sie mussen daheruberlappend aneinandergefugt und in den Uberlappungsbereichen addiert werden.In Abb. 3.4 ist diese Blockverarbeitung fur den Fall Nx = 3L skizziert.3

3Der durchgestrichene Teilblock (Ausschwingvorgang) wird bei Blockverarbeitung nicht ver-wendet, damit das Ausgangssignal die gleiche Dauer wie das Eingangssignal hat.

Page 84: MATLABr-Programmierung · 1Eingaben in MATLABr sollten keine deutschen Sonderzeichen wie ¨a, ¨o, ¨u,ß enthalten, wenn die Programme auch im nichtdeutschsprachigen Raum eingesetzt

76 3 Diskrete Fouriertransformation

h

x2 ∗ h

x3 ∗ h

h(n)

x(n)

0 Nh − 1

0 L 2L 3L− 1

x1 ∗ h

0

y(n)2LL 3L− 1

y1 y2 y3

x1 x2 x3

Abbildung 3.4: Schematische Darstellung der Blockverarbeitung bei der Overlap-Add Methode mit Nx = 3L und Nf = L+Nh − 1

Die zweite Methode ist die Overlap-Save Methode, die eine FFT-Langegleich der Blocklange (Nf = L) verwendet. Das Ergebnis der zyklischen Faltungwird daher nicht mit jenem der benotigten normalen Faltung ubereinstimmen. Eslaßt sich leicht zeigen (am besten graphisch anhand eines einfachen Signals), daßim vorliegenden Fall nur die ersten Nh − 1 Werte nicht ubereinstimmen. Bei derblockweisen Faltung werden daher die ersten Nh − 1 Werte nicht verwendet, son-dern vom vorhergehenden Block ubernommen. Die Overlap-Save Methode benotigtdemnach keine Additionen in den Uberlappungsbereichen.

In Abb. 3.5 ist die Blockverarbeitung der Overlap-Save Methode schematischdargestellt. Die Eingangssignalblocke der Lange L werden jetzt uberlappend imAbstand M < L dem Signal x(n) entnommen. Durch die Uberlappung konnendie ungultigen Werte der Faltungsergebnisse unberucksichtigt bleiben, da der je-weils vorhergehende Block bereits die richtigen Werte enthalt. Um bei beidenMethoden die gleiche FFT-Lange Nf und damit einen vergleichbaren Rechen-aufwand zu erhalten, wird man den Parameter M der Overlap-Save Methodegleich der Blocklange L der Overlap-Add Methode wahlen (vergleiche Abb. 3.4und Abb. 3.5).

Das nachste MATLABr-Beispiel zeigt die Implementierung der Overlap-SaveMethode.

x = x(:);

h = h(:);

Nx = length(x);

Nh = length(h);

Page 85: MATLABr-Programmierung · 1Eingaben in MATLABr sollten keine deutschen Sonderzeichen wie ¨a, ¨o, ¨u,ß enthalten, wenn die Programme auch im nichtdeutschsprachigen Raum eingesetzt

3.5 Overlap-Add und Overlap-Save Methode 77

h

x2 ∗ h

x3 ∗ h

h(n)0 Nh − 1

0

x1 ∗ h

M L

2M0 3M − 1

y(n)M

0

Nx+Nh − 2

y1 y2 y3

x(n)

Abbildung 3.5: Schematische Darstellung der Blockverarbeitung bei der Overlap-Save Methode mit Nx = 3M und Nf = L (M = L−Nh + 1)

M = L - Nh + 1; % block shift (L = FFT length)

Nx1 = M*ceil(Nx/M); % make length of x a multiple of M

x = [x ; zeros(Nx1-Nx,1)]; % pad with zeros

H = fft(h,L); % filter transfer function

x = [zeros(Nh-1,1) ; x]; % add leading zeros to input signal

Nx1 = Nx + Nh - 1; % new input signal length

y = zeros(Nx1,1); % init. output signal vector

for n = 1:M:Nx1-L+1 % block processing loop

y1 = ifft(fft(x(n:n+L-1),L).*H); % FFT - multiply by H - IFFT

y(n:n+M-1) = y1(Nh:L); % discard first Nh samples

end

y = y(1:Nx);

if ~any(imag(x)) & ~any(imag(h)) % real-valued signals x, h ?

y = real(y); % avoid tiny imaginary parts

end

Die Impulsantwort ist im Vektor h der Lange Nh gespeichert. Die Blocklange L

ist wie in Abb. 3.5 gleich der FFT-Lange, die großer als die Impulsantwortlangesein muß, damit der Blockabstand M = L - Nh + 1 positiv ist. Je großer L, destoweniger Blocke mussen verarbeitet werden. Allerdings steigt dann der Aufwandfur die FFT.

Page 86: MATLABr-Programmierung · 1Eingaben in MATLABr sollten keine deutschen Sonderzeichen wie ¨a, ¨o, ¨u,ß enthalten, wenn die Programme auch im nichtdeutschsprachigen Raum eingesetzt

78 3 Diskrete Fouriertransformation

Aufgabe 3.7

Entwickeln Sie aufbauend auf dem Musterbeispiel fur die Overlap-SaveMethode ein MATLABr-Programm y = ovadd(h,x) fur die Overlap-Add Methode. Die Filterimpulsantwort h eines FIR-Tiefpaßfilters derLange Nh = 64 konnen Sie z.B. mit h = fir1(64,1/8) entwerfen.Naheres zu diesem Filterdesign erfahren Sie im Kapitel 4. Vergleichen Siefur verschiedene Eingangssignale das Ausgangssignal Ihres Programmsmit jenem der Filterfunktion y = filter(h,1,x). Messen Sie die Re-chenzeit des Overlap-Add Programms mit etime() fur verschiedeneFFT-Langen L.

3.6 Chirp-DFT

Bei der DFT wird der gesamte Frequenzbereich von θ = 0 bis θ = 2π in aquidi-stante Intervalle unterteilt. Ist nur ein kleiner Ausschnitt der Frequenzskala vonInteresse (z.B. zur Spektralanalyse schmalbandiger Signale), dann muß eine großeAnzahl von Frequenzpunkten und damit eine FFT großer Lange gewahlt werden.Viel zweckmaßiger ware eine “Frequenzlupe”, die den relevanten Frequenzbereichbeliebig vergroßern kann. Außerdem ist es wunschenswert, die Anzahl der Fre-quenzpunkte nicht immer starr an die Anzahl der Zeitpunkte zu koppeln unddiese Anzahl nicht nur auf Zweierpotenzen zu beschranken.

Die einfachste Realisierungsmoglichkeit einer Frequenzlupe ist die Anwendungder Fouriertransformation auf das zeitbegrenzte Signal x(n), n = 0 . . . N − 1:

X(ejθk

)=

N−1∑

n=0

x(n) e−jθkn, mit θk ∈ [ϑ1, ϑ2]. (3.23)

Die Frequenzen θk konnen dabei beliebig zwischen der Startfrequenz ϑ1 und derStopfrequenz ϑ2 gewahlt werden und mussen auch nicht aquidistant verteilt sein.

Die direkte Anwendung der Fouriertransformation ist dann vorzuziehen, wenndas Spektrum nur an einigen wenigen Frequenzpunkten zu berechnen ist. Fur einegroßere Anzahl von Frequenzpunkten kann ein Algorithmus eingesetzt werden, derauf der Chirp-Z Transformation beruht und bei dem trotz beliebiger Wahl derStart- und Stopfrequenzen die FFT verwendet werden kann [10].

Zunachst wird innerhalb des betrachteten Frequenzintervalls [ϑ1, ϑ2] eine Fre-quenzunterteilung gemaß

θk = ϑ1 + k∆θ mit k = 0, 1, . . . L− 1 (3.24)

Page 87: MATLABr-Programmierung · 1Eingaben in MATLABr sollten keine deutschen Sonderzeichen wie ¨a, ¨o, ¨u,ß enthalten, wenn die Programme auch im nichtdeutschsprachigen Raum eingesetzt

3.6 Chirp-DFT 79

gewahlt, wobei

∆θ =ϑ2 − ϑ1L− 1

(3.25)

die gewunschte Frequenzauflosung ist. Damit folgt aus Gl. 3.23

X(k, ϑ1,∆θ) =

N−1∑

n=0

x(n)e−jϑ1n e−j∆θnk k = 0, 1, . . . L− 1. (3.26)

Statt X(k, ϑ1,∆θ) wird in der Folge die Kurzform X(k) verwendet. Der nachsteSchritt ist die Substitution

nk =1

2

(

n2 − (n− k)2 + k2)

, (3.27)

die in Gl. 3.26 eingesetzt

X(k) = e−j ∆θ2 k2

N−1∑

n=0

x(n)e−jϑ1ne−j ∆θ2 n2

︸ ︷︷ ︸

x(n)

ej∆θ2 (k−n)2

︸ ︷︷ ︸

h(k − n)

k = 0, 1, . . . L− 1 (3.28)

liefert. Damit kann X(k) mit Chirp-Signalen zur Modulation und als Impulsant-wort zur Filterung berechnet werden:

X(k) = e−j ∆θ2 k2

N−1∑

n=0

x(n)h(k − n)︸ ︷︷ ︸

(x ∗ h)(k)

k = 0, 1, . . . L− 1 (3.29)

mitx(k) = x(k)e−jϑ1ke−j ∆θ

2 k2

k = 0, 1, . . . N − 1 (3.30)

undh(k) = ej

∆θ2 k2

k = −N + 1, . . . L− 1. (3.31)

Wegen der Verwendung von Chirp-Signalen kann man die FouriertransformationGl. 3.29 auch als Chirp-DFT bezeichnen. Die Realisierung der Chirp-DFT alsSystem ist in Abb. 3.6 gezeigt.

Der Wertebereich von k fur die Impulsantwort in Gl. 3.31 ergibt sich an Handder Faltung in Gl. 3.29. Die Faltungssumme kann mit der zyklischen Faltung un-ter Verwendung der FFT implementiert werden, wobei das Signal x(k) durchAnhangen von Nullen auf M ≥ N + L − 1 Zeitpunkte verlangert wird. DiesesNullenanfugen ist notwendig, um die lineare Faltung mit der zyklischen Faltungzu berechnen. Durch die Verlangerung von x(k) hat das Faltungsergebnis vonGl. 3.29 und damit X(k) ebenfalls die Lange N + L − 1. Da X(k) jedoch nur L

Page 88: MATLABr-Programmierung · 1Eingaben in MATLABr sollten keine deutschen Sonderzeichen wie ¨a, ¨o, ¨u,ß enthalten, wenn die Programme auch im nichtdeutschsprachigen Raum eingesetzt

80 3 Diskrete Fouriertransformation

x(n) x(n) X(n)

n = 0, 1, . . . , N − 1

e−j∆Θ2

n2

n = 0, 1, . . . , L− 1

e−j(ϑ1n+∆Θ2

n2)

(x ∗ h)(n)h(n) = ej

∆Θ2

n2

Abbildung 3.6: Blockschaltbild zur Implementierung der Chirp-DFT (Startfre-quenz ϑ1, Frequenzauflosung ∆θ, Anzahl der Zeitpunkte N , Anzahl der Frequenz-punkte L)

Frequenzpunkte umfaßt, sind die ersten N − 1 Punkte der zyklischen Faltung zustreichen.

Der Implementierungsvorteil bei der Anwendung der Chirp-DFT ergibt sichdann, wenn die Lange der zyklischen Faltung eine Zweierpotenz ist (einfache FFT),was durch das Nullenanfugen jederzeit moglich ist. Damit konnen bei der Chirp-DFT Signale beliebiger Lange mit einem effizienten FFT-Algorithmus verarbeitetwerden.

Im folgenden MATLABr-Programm wird das Signalspektrum im Frequenz-intervall zwischen fstart und fstop (beide Frequenzen sind normiert auf dieAbtastfrequenz) mit der Chirp-DFT bestimmt. Im ersten Teil werden die Chirp-Signale und die Impulsantwort des Chirp-Filters berechnet. Der eigentliche Chirp-DFT-Algorithmus nach Abb. 3.6 wird mit den beiden letzten MATLABr-Befehlenrealisiert.

w0 = 2*pi*fstart;

fmax = (L-1+fstart)/L; % maximum possible stop frequency

fstop = min(fmax,fstop);

deltaw = pi/(L-1)*(fstop-fstart); % (half of) frequency resolution

n = [0:N-1]’;

k1 = [-N+1:-1]’;

k2 = [0:L-1]’;

p_in = exp(-j*(w0*n + deltaw*n.^2)); % input modulation signal

p_out = exp(-j*deltaw*k2.^2); % output modulation signal

h = [exp(j*deltaw*k1.^2) ; conj(p_out)]; % chirp filter impulse response

M = N+L-1; % length of convolution result

% (chirp filtering)

Mf = 2^(ceil(log2(M))); % find nearest power of 2 for FFT

H = fft(h,Mf); % FFT of chirp filter impulse response

Page 89: MATLABr-Programmierung · 1Eingaben in MATLABr sollten keine deutschen Sonderzeichen wie ¨a, ¨o, ¨u,ß enthalten, wenn die Programme auch im nichtdeutschsprachigen Raum eingesetzt

3.6 Chirp-DFT 81

X = ifft(fft(x(:).*p_in,Mf) .* H); % output of chirp filter

% computed via FFT (use FFT length

% Mf, so cyclic convolution result

% is equal to linear convolution

% result)

X = X(N:M) .* p_out; % perform modulation of output

% to complete computation of DFT

% (omitting first N-1 samples)

Aufgabe 3.8

Vergleichen Sie mit MATLABr die Ausfuhrzeiten τA der Chirp-DFTmit jenen der FFT, wenn beide fur die Spektralanalyse in den folgendenFrequenzintervallen [f1, f2] und mit Frequenzauflosungen ∆f eingesetztwerden sollen (die Abtastfrequenz ist in allen Fallen 16 kHz):

f1 f2 ∆f τA τA

(Hz) (Hz) (Hz) Chirp-DFT FFT

0 8000 100

0 8000 10

0 8000 1

1000 2000 100

1000 2000 10

1000 2000 1

Page 90: MATLABr-Programmierung · 1Eingaben in MATLABr sollten keine deutschen Sonderzeichen wie ¨a, ¨o, ¨u,ß enthalten, wenn die Programme auch im nichtdeutschsprachigen Raum eingesetzt

82 3 Diskrete Fouriertransformation

Page 91: MATLABr-Programmierung · 1Eingaben in MATLABr sollten keine deutschen Sonderzeichen wie ¨a, ¨o, ¨u,ß enthalten, wenn die Programme auch im nichtdeutschsprachigen Raum eingesetzt

4

Entwurf digitaler Filter

Beim Entwurf digitaler Filter wird in der Mehrzahl der Anwendungen von Spe-zifikationen im Frequenzbereich ausgegangen, die dann durch eine realisierbareUbertragungsfunktion H(z) approximiert werden [11, 12]. Ist H(z) eine rationaleFunktion in z oder z−1 (IIR-Filter), dann konnen damit steilflankige oder schmal-bandige Dampfungsverlaufe sehr gut approximiert werden. Diese Filter besitzenin der Regel eine minimale Phase. Wird mit H(z) ein Polynom in z (bzw. z−1)zur Approximation verwendet, dann lassen sich damit vorzugsweise FIR-Filtermit exakt linearer Phase bzw. mit nahezu beliebigem Frequenzgang entwerfen.Fur scharfe Ubergange zwischen Durchlaß- und Sperrbereichen sind diese Filterim Vergleich zu den IIR-Filtern nicht sehr effizient.

Wahrend beim Entwurf von IIR-Filtern zum uberwiegenden Teil klassischeEntwurfsmethoden zum Einsatz kommen, die auf Verfahren des Analogfilterent-wurfs zuruckgreifen, wird das Design von FIR-Filtern bevorzugt mit numerischenOptimierungsverfahren durchgefuhrt. Fur beide Falle bietet MATLABr ausgereif-te Programme, deren Einsatz normalerweise unproblematisch ist. Trotzdem sindeinige Besonderheiten zu beachten, die beim praktischen Einsatz zum Tragen kom-men konnen.

4.1 FIR-Filterentwurf

FIR-Filter zeichnen sich durch eine Reihe von Vorteilen aus, so daß sie in vie-len Fallen den IIR-Filtern vorgezogen werden. Als Hauptvorteile sind vor allemdie Stabilitat fur beliebige Werte der Filterkoeffizienten und die Moglichkeit ei-ner exakt linearen Phase zu nennen. Außerdem stehen fur die Implementierungeine Reihe von Moglichkeiten zur Verfugung, u.a. die in Abschnitt 3.4 vorgestell-

Page 92: MATLABr-Programmierung · 1Eingaben in MATLABr sollten keine deutschen Sonderzeichen wie ¨a, ¨o, ¨u,ß enthalten, wenn die Programme auch im nichtdeutschsprachigen Raum eingesetzt

84 4 Entwurf digitaler Filter

te Faltungsoperation mit der FFT. Die am haufigsten verwendete Struktur furFIR-Filter ist jedoch ein digitales Transversalfilter, das sich fur ak = 0, ∀k,unmittelbar aus der Differenzengleichung (Gl. 2.25) ergibt:

y(n) =

N−1∑

k=0

bkx(n− k) =N−1∑

k=0

h(k)x(n− k) . (4.1)

Der rechte Ausdruck in Gl. 4.1 ist die Faltungssumme mit der Impulsantwort h(n)der Lange N .1 Die Filterkoeffizienten bk dieses Filters sind daher direkt durch dieWerte der Impulsantwort festgelegt.

T T T T

y(n)

x(n− 1) x(n− 2)

b0 b1 b2 bN−2 bN−1

x(n) x(n−N + 1)

Abbildung 4.1: FIR-Filter als transversales, digitales Filter

Fur die Ubertragungsfunktion des FIR-Filters folgt aus Gl. 2.28 mit ak = 0und bk = h(k)

H(z) =

N−1∑

k=0

h(k)z−k =1

zN−1

N−1∑

k=0

h(k)zN−1−k. (4.2)

Die Pole eines FIR-Filters liegen demnach alle bei z = 0. Diese Filter sind daherimmer stabil (was auch wegen der endlich langen Impulsantwort zu erwarten ist).Die Approximation von Frequenzgangen erfolgt nur durch Verandern der Nullstel-lenlagen. Mit FIR-Filtern werden daher Frequenzgange durch Polynome approxi-miert, so daß bei steilen (scharfkantigen) Filtern die Filterordnung im Vergleich zurekursiven Filtern, die rationale Funktionen zur Filterapproximation verwenden,wesentlich hoher ist (typisch um einen Faktor 10 . . . 20).

Bei linearphasigen FIR-Filtern lassen sich je nach FilterlangeN und Symmetrieder Impulsantwort h(n) vier Falle unterscheiden [10]:

I N gerade, h(n) gerade symmetrisch, d.h. h(n) = h(N − 1− n),

II N ungerade, h(n) gerade symmetrisch,

1Hier wird N − 1 anstelle von M als obere Summengrenze verwendet.

Page 93: MATLABr-Programmierung · 1Eingaben in MATLABr sollten keine deutschen Sonderzeichen wie ¨a, ¨o, ¨u,ß enthalten, wenn die Programme auch im nichtdeutschsprachigen Raum eingesetzt

4.1 FIR-Filterentwurf 85

III N gerade, h(n) ungerade symmetrisch, d.h. h(n) = −h(N − 1− n),

IV N ungerade, h(n) ungerade symmetrisch.

Fur den Fall I erhalt man durch Einsetzen der Symmetriebedingung von h(n)in Gl. 4.2 mit z = ejθ und M = (N − 1)/2 (N gerade)

H(ejθ) = e−jθM

N2 −1∑

n=0

2h(n) cos θ(n−M)

︸ ︷︷ ︸

A(θ)

(4.3)

Entsprechend ergibt sich fur Fall II (N ungerade)

H(ejθ) = e−jθM

(

h(M) +M−1∑

n=0

2h(n) cos θ(n−M)

)

︸ ︷︷ ︸

A(θ)

. (4.4)

Da die Nullphasenkomponente A(θ) eine reellwertige Funktion ist, besitzendiese beiden Filtertypen einen linearen Phasengang. Nur dort, wo A(θ) das Vor-zeichen wechselt (ublicherweise in den Sperrbereichen der Filter), treten 180o-Phasensprunge auf. Zu beachten ist, daß M im ersten Fall halbzahlig ist, hingegenim zweiten Fall ganzzahlige Werte annimmt.

Fur FIR-Filter mit ungerade symmetrischen Impulsantworten erhalt man furFall III (N gerade)

H(ejθ) = e−jθMe−j π2

N2 −1∑

n=0

2h(n) sin θ(n−M)

︸ ︷︷ ︸

A(θ)

(4.5)

und fur Fall IV (N ungerade)

H(ejθ) = e−jθMe−j π2

M−1∑

n=0

2h(n) sin θ(n−M)

︸ ︷︷ ︸

A(θ)

. (4.6)

Diese Beziehungen fur die Frequenzgange werden spater beim Filterentwurfverwendet. Zur Veranschaulichung der Symmetrieeigenschaften bei FIR-Filternsoll als einfaches MATLABr-Beispiel eine abgetastete und zeitbegrenzte sin x/x-Funktion zur Konstruktion der jeweiligen Impulsantwort betrachtet werden:

Page 94: MATLABr-Programmierung · 1Eingaben in MATLABr sollten keine deutschen Sonderzeichen wie ¨a, ¨o, ¨u,ß enthalten, wenn die Programme auch im nichtdeutschsprachigen Raum eingesetzt

86 4 Entwurf digitaler Filter

N1 = 40; % filter length minus 1

n = 1:N1/2;

fc = 1/10; % cutoff frequency normalized to Fs/2

h = sin(pi*fc*n)./(pi*n); % one-sided discrete-time sinc-function

h = [h(N1/2:-1:1), fc, h]; % include symmetric part and midpoint

plot(abs(fft(h)));

zplane(h,1); % plot poles and zeros

Aufgabe 4.1

Modifizieren Sie die obigen MATLABr-Befehle, um alle vier Falle vonFIR-Filtern graphisch zu veranschaulichen. Achten Sie insbesondere aufdie Unterschiede zwischen gerader und ungerader Filterlange. Stimmendie Frequenzgange und die Lage der Pole und Nullstellen mit Ihren Vor-stellungen uberein? Um die Untersuchung flexibel zu gestalten, schreibenSie am besten eine M-Funktion der Art h = firsym(N,fc,even_odd),wobei N die Filterlange, fc die Grenzfrequenz normiert auf die halbeAbtastfrequenz ist und even_odd zur Unterscheidung zwischen gerader(z.B. even_odd = ’e’ ) und ungerader Symmetrie von h(n) dient. DerPrototyp der M-Funktion konnte dann so aussehen:

function h = firsym(N,fc,even_odd)

N2 = fix(N/2);

n = 1:N2;

if rem(N,2) == 1

h = sin(pi*fc*n)./(pi*n);

if strcmp(upper(even_odd),’E’)

h = ...

else

h = ...

end

else

...

end

In den folgenden Abschnitten werden die wichtigsten Methoden zum Entwurfvon FIR-Filtern mit MATLABr vorgestellt. Fur die ersten drei Verfahren sol-len Sie selbst MATLABr-Programme schreiben. Der optimale Entwurf mit demRemez-Algorithmus ([10, 11, 12]) ist in MATLABr (SIGNAL PROCESSINGTOOLBOX) enthalten. Neben der Entwicklung der M-Files ist der Vergleich dereinzelnen Verfahren ein wesentlicher Teil der vorgeschlagenen Aufgaben.

Page 95: MATLABr-Programmierung · 1Eingaben in MATLABr sollten keine deutschen Sonderzeichen wie ¨a, ¨o, ¨u,ß enthalten, wenn die Programme auch im nichtdeutschsprachigen Raum eingesetzt

4.1 FIR-Filterentwurf 87

4.1.1 Frequenzabtastungsmethode

Bei dieser Entwurfsmethode wird der gewunschte Frequenzgang an aquidistantenFrequenzpunkten im Frequenzintervall von null bis zur Abtastfrequenz vorgege-ben. Die Impulsantwort bzw. die Filterkoeffizienten des FIR-Filters erhalt mandurch die inverse, diskrete Fouriertransformation (IDFT) des gegebenen Frequenz-gangs. Der Vorteil dieser Methode ist neben ihrer Einfachheit auch die praktischeRelevanz, z.B. wenn ein gemessener Frequenzgang mit einem FIR-System nach-gebildet werden soll. Das Verfahren liefert gute Resultate, wenn hinreichend vieleFrequenzpunkte gewahlt werden und im Amplitudenfrequenzgang keine allzu stei-len Ubergange auftreten. Fur idealisierte Frequenzgange in Form rechteckformigerVerlaufe ergeben sich relativ bescheidene Ergebnisse. Dieses Verhalten ist aus denInterpolationseigenschaften der DFT verstandlich (siehe Abschnitt 3.1).

Zunachst werden linearphasige FIR-Filter behandelt, bei denen nur der Be-tragsverlauf des Frequenzgangs angegeben werden muß. Bei der Festlegung desgewunschten Frequenzgangs mussen die Symmetrieeigenschaften der DFT beruck-sichtigt werden, um reellwertige Impulsantworten zu erhalten. Mit dem folgendenMATLABr-Programm, das auch als Muster zur Losung der Aufgabenstellungendieses Abschnitts dienen soll, wird ein idealisiertes Tiefpaßfilter mit der Frequenz-abtastungsmethode approximiert.

function [h,Hid] = firfs(N,fc)

N2 = fix((N-1)/2);

Np = fix(fc*N/2);

Hmag = zeros(1,N);

Hmag(1:Np+1) = ones(1,Np+1); % magnitude response from 0 to pi

% (ideal low pass filter)

Hmag(N-N2+1:N) = Hmag(N2+1:-1:2); % magnitude response from pi to 2*pi,

% using (even) symmetry property

% create linear phase response

phi = zeros(1,N);

phi(1:N2+1) = -pi*(N-1)*(0:N2)/N; % phase response from 0 to pi

phi(N-N2+1:N) = -phi(N2+1:-1:2); % phase response from pi to 2*pi,

% using (odd) symmetry property

% compute ideal frequency response and FIR filter impulse response

Hid = Hmag .* exp(j*phi);

h = real(ifft(Hid)); % real() avoids a very small imaginary

% part caused by rounding errors

Page 96: MATLABr-Programmierung · 1Eingaben in MATLABr sollten keine deutschen Sonderzeichen wie ¨a, ¨o, ¨u,ß enthalten, wenn die Programme auch im nichtdeutschsprachigen Raum eingesetzt

88 4 Entwurf digitaler Filter

Aufgabe 4.2

Die Approximation steiler Frequenzgange ist nicht optimal mit der Fre-quenzabtastungsmethode zu erreichen. Mit firfs() werden Sie feststel-len, daß die Approximation des Rechtecktiefpaßfilters nur eine geringeSperrdampfung ergibt. Eine Idee zur Verbesserung liegt nun darin, daßim Referenzbetragsverlauf eine Ubergangszone zwischen Durchlaß- undSperrbereich vorgesehen wird. Dadurch entsteht ein rampenformiger Be-tragsverlauf, der besser approximiert werden kann.Modifizieren Sie firfs(), so daß im gewunschten Betragsverlauf ein bisdrei Frequenzpunkte fur den Ubergangsbereich vorsehen werden, wo derBetragsverlauf Werte zwischen 0 und 1 annimmt. Optimieren Sie experi-mentell diese Zwischenwerte in bezug auf eine maximale Sperrdampfung.

Die bisher untersuchten FIR-Filter haben einen linearen Phasenverlauf. In dernachsten Aufgabe wird eine einfache Methode angewendet, um aus linearphasigenFiltern minimalphasige Filter zu erzeugen. Der Trick dabei ist die Inversion jenerNullstellen z0i, die außerhalb des Einheitskreises in der komplexen z-Ebene liegen,d.h. es wird z0i durch 1/z0

∗i ersetzt.

Aufgabe 4.3

Schreiben Sie eine MATLABr-Funktion h_min = lin2min(h_lin), dieausgehend von der Impulsantwort h_lin eines linearphasigen Filterszunachst mit roots() die Nullstellen der Ubertragungsfunktion berech-net, dann die außerhalb des Einheitskreises liegenden Nullstellen mitfind() findet und diese durch die invertierten Nullstellen ersetzt. Ab-schließend wird mit poly() die Ubertragungsfunktion des neuen (mini-malphasigen) Filters gebildet und die Filterkoeffizienten bestimmt. Kor-rigieren Sie auch die Anderung der Filterverstarkung bedingt durch dieNullstelleninversion.Vergleichen Sie graphisch die Frequenzgange des so gewonnenen mini-malphasigen FIR-Filters mit dem ursprunglichen Filter. Gibt es Unter-schiede im Betragsverlauf? Beobachten Sie die Anderung der Impulsant-wort. Bis zu welcher Filterlange funktioniert diese Methode?

Page 97: MATLABr-Programmierung · 1Eingaben in MATLABr sollten keine deutschen Sonderzeichen wie ¨a, ¨o, ¨u,ß enthalten, wenn die Programme auch im nichtdeutschsprachigen Raum eingesetzt

4.1 FIR-Filterentwurf 89

4.1.2 Methode der kleinsten Quadrate

Ist der gewunschte Frequenzgang des FIR-Filters an nichtaquidistanten Frequenz-punkten gegeben oder liegen nur wenige Frequenzpunkte vor, so ist das Frequenz-abtastungsverfahren nicht besonders gut geeignet. Man konnte bestenfalls einensehr dichten Frequenzraster wahlen, um alle gegebenen Frequenzpunkte zu um-fassen. Allerdings wird dann die Filterlange sehr groß. Besser sind Verfahren, diedie vorgegebenen Filterspezifikationen durch Losung eines linearen Gleichungssy-stems zu erfullen versuchen. Um die Idee dieser Methode zu vermitteln, wird einlinearphasiges Filter mit ungerader Filterlange N und gerade symmetrischer Im-pulsantwort h(n) betrachtet (Fall II von Seite 85). Mit Gl. 4.4 erhalt man fur denAmplitudenfrequenzgang an den gegebenen Frequenzpunkten θk:

A(θk) = h(M) +

M−1∑

n=0

2h(n) cos θk(M − n), k = 0, 1, 2 . . .M, (4.7)

mit M = (N − 1)/2. Dabei wird zunachst vorausgesetzt, daß genausoviele Fre-quenzpunkte L wie unbekannte Variable h(n) gegeben sind (L = M + 1). Stelltman Gl. 4.7 in Matrizenform dar, dann ergibt sich das folgende lineare Gleichungs-system fur die gesuchte Impulsantwort h(n):

Sh = A, (4.8)

mit h = [h(0)h(1) . . . h(M)]T ,A = [A(θ0)A(θ1) . . . A(θM )]T und der Systemmatrix

S =

2 cos θ0M 2 cos θ0(M − 1) · · · 2 cos θ0 1

2 cos θ1M 2 cos θ1(M − 1) · · · 2 cos θ1 1...

.... . .

......

2 cos θMM 2 cos θM (M − 1) · · · 2 cos θM 1

. (4.9)

MATLABr verwendet exzellente Algorithmen zur effizienten und numerisch robu-sten Losung linearer Gleichungssysteme. Dabei ist auch automatisch der Fall unter-und uberbestimmter Gleichungssysteme miteingeschlossen, d.h. Gleichungssyste-me mit weniger oder mehr Frequenzpunkte als unbekannte Impulsantwortwerte.Sind mehr Gleichungen als Unbekannte vorhanden, dann ist Gl. 4.8 nur naherungs-weise losbar:

Sh−A = ǫ. (4.10)

S ist jetzt eine L × (M + 1) Matrix mit L > M + 1, da die Anzahl L der Fre-quenzpunkte großer als die Anzahl M + 1 der Unbekannten ist. Die Losung hopt

von Gl. 4.10 wird so bestimmt, daß die Lange (Norm) des unbekannten Fehler-vektors ǫ minimiert wird [2]. Dazu setzt man die Ableitungen des Fehlervektors

Page 98: MATLABr-Programmierung · 1Eingaben in MATLABr sollten keine deutschen Sonderzeichen wie ¨a, ¨o, ¨u,ß enthalten, wenn die Programme auch im nichtdeutschsprachigen Raum eingesetzt

90 4 Entwurf digitaler Filter

(bzw. dessen Komponenten) nach den Komponenten von h null und erhalt darausfolgendes Gleichungssystem:

STShopt = STA. (4.11)

In Gl. 4.11 hat die Systemmatrix STS die Dimension (M + 1)× (M + 1), so daßdieses Gleichungssystem bzgl. hopt wie ublich gelost wird. Da die optimale Losungdie Summe der Fehlerquadrate (Quadrat der Norm von ǫ) minimiert, wird dieLosung hopt als Least Squares Solution bezeichnet.

Das nachste MATLABr-Beispiel zeigt den FIR-Filterentwurf mit der Methodeder kleinsten Quadrate. Der gewunschte Amplitudenfrequenzgang ist in den Vekto-ren f (Frequenzpunkte) und m (dazugehorende Amplitudenwerte) gespeichert. Furreellwertige FIR-Filter genugt die Angabe der Spezifikation im Frequenzintervallvon null bis zur halben Abtastfrequenz.

L = length(f); % number of frequency points

if rem(N,2) == 0 % even filter length N ?

M = N/2;

S = 2*cos(pi*f(:)*(M - 0.5 - [0:M-1])); % system matrix

else

M = (N-1)/2;

S = [2*cos(pi*f(:)*(M - [0:M-1])) , ones(L,1)];

end

h = S \ m(:); % solve LS-problem

h = [h ; h(M:-1:1)]; % append symmetric part

Aufgabe 4.4

Modifizieren Sie das MATLABr-Beispiel zum LS-Entwurf von FIR-Filtern mit ungerader symmetrischer Impulsantwort. Entwerfen Sie da-nach einen sogenannten Hilberttransformator mit dem gewunschten Fre-quenzgang

H(ejθ)= e−jθN−1

2 e−j π2 sign θ

(signx ist die Vorzeichenfunktion).Welche Abweichungen vom idealen Betragsverlauf sind zu beobachten?Ist der Hilberttransformator gerader oder ungerader Lange besser? Wiesieht die Lage der Pole und Nullstellen in der komplexen z-Ebene aus?Konnen Sie einen minimalphasigen Hilberttransformator entwerfen?

Page 99: MATLABr-Programmierung · 1Eingaben in MATLABr sollten keine deutschen Sonderzeichen wie ¨a, ¨o, ¨u,ß enthalten, wenn die Programme auch im nichtdeutschsprachigen Raum eingesetzt

4.1 FIR-Filterentwurf 91

Aufgabe 4.5

Verwenden Sie die vorgestellte LS-Methode zum Entwurf

a) eines FIR-Filters mit gaußformigem Betragsfrequenzgang,

b) eines “Differenzierers” (Betragsverlauf proportional zur Frequenz),

c) eines FIR-Filters zur Formung von weißem Rauschen zu 1/f -Rauschen (Leistungsdichtespektrum verkehrt proportional zur Fre-quenz) mit einer vorgegebenen unteren Grenzfrequenz fc,

d) eines FIR-Filters zur Approximation des Frequenzgangs der mitt-leren Horschwelle des menschlichen Gehors, deren Betragsverlaufin Dezibel durch die Funktion

Tq(f) = 3.64

(f

1000

)−0.8

− 6.5 e−0.6( f1000−3.3)2 + 0.001

(f

1000

)4

angenahert werden kann (Frequenz f in Hertz).

4.1.3 Fenstermethode

Die Fenstermethode geht von einem idealisierten Filter mit der Impulsantworthd(n) (Referenzimpulsantwort) aus. Dieses Filter ist nicht realisierbar, da es nichtkausal ist und seine Impulsantwort keine endliche Lange besitzt. Fur ein ideali-siertes Tiefpaßfilter mit der Grenzfrequenz θg ist die Referenzimpulsantwort

hd(n) =sin θgn

πn, −∞ < n <∞. (4.12)

Durch Zeitverschiebung und Zeitbegrenzung mit einer Fensterfunktion w(n) erhaltman die Impulsantwort eines FIR-Filters, die jene des idealisierten Filters appro-ximiert:

h(n) = hd

(

n− N − 1

2

)

w(n), 0 ≤ n ≤ N − 1. (4.13)

Fur eine lineare Phase muß h(n) symmetrisch sein (h(N − 1−n) = h(n)) und dasMaximum von h(n) in der Mitte liegen2.

2Fur N ungerade ergibt sich ein Maximum bei n = N−12

, und fur N gerade treten zwei

benachbarte Maxima bei n = N2

− 1 und n = N2

auf.

Page 100: MATLABr-Programmierung · 1Eingaben in MATLABr sollten keine deutschen Sonderzeichen wie ¨a, ¨o, ¨u,ß enthalten, wenn die Programme auch im nichtdeutschsprachigen Raum eingesetzt

92 4 Entwurf digitaler Filter

Die einfachste Form einer Fensterfunktion ist ein Rechteckzeitfenster derDauer N . Leider tritt mit dieser Fensterfunktion bei der Approximation von idea-lisierten (rechteckformigen) Frequenzgangen das Gibbsche Phanomen auf, sodaß sich unabhangig von der Filterlange N immer eine Welligkeit im Durchlaßbe-reich von 9% bzw. eine Sperrdampfung von 21 dB ergibt.

Durch Wahl anderer Fensterfunktionen kann das Gibbsche Phanomen vermie-den werden, allerdings auf Kosten der Breite des Ubergangsbereiches zwischenDurchlaß- und Sperrbereich des Filters [10, 11]. In MATLABr (SIGNAL PRO-CESSING TOOLBOX) sind verschiedene Fensterfunktionen implementiert. Dabeiwerden bei einigen Fenstern (und zwar bartlett() und blackman(), nicht jedochhanning()) Randpunkte, die null sind, bei der Fensterlange mitgezahlt! Norma-lerweise sollten diese Randpunkte eliminiert werden, da sie bei einer Implemen-tierung der FIR-Filter uberflussige Multiplikationen mit null bewirken. Außerdemwird der Vergleich mit anderen Fensterfunktionen gleicher Lange verfalscht. BeiVerwendung der erwahnten Fensterfunktionen sollte daher die Fensterlange um 2erhoht und die beiden Randpunkte eliminiert werden.

Neben den dreieckformigen Fensterfunktionen (triang() und bartlett())3

gibt es vier verallgemeinerte Cosinusfenster und das Kaiser-Fenster. Das verall-gemeinerte Cosinusfenster der Lange N ist gegeben durch

w(n) =

a− b cos 2πn

N − 1+ c cos

4πn

N − 10 ≤ n ≤ N − 1

0 sonst, (4.14)

wobei Fensternamen und Parameter in Tabelle 4.1 zusammengestellt sind.

Tabelle 4.1: Parameter der verallgemeinerten Cosinusfenster

Fenstername MATLAB Funktion a b c

Rechteck boxcar() 1 0 0

Hann hanning() 0.5 0.5 0

Hamming hamming() 0.54 0.46 0

Blackman blackman() 0.42 0.5 0.08

Beim Kaiser-Fenster (MATLABr-Funktion kaiser(N,beta)) wird nebender Fensterlange N auch ein Parameter β zur Beeinflussung der Sperrdampfungdes entworfenen FIR-Filters angegeben. Dieses Fenster stellt einen empirisch ge-fundenen Kompromiß zwischen der Breite der Fouriertransformation des Fensters

3Diese beiden MATLABr-Funktionen liefern unterschiedliche Fenster bei gleicher Filterlange.

Page 101: MATLABr-Programmierung · 1Eingaben in MATLABr sollten keine deutschen Sonderzeichen wie ¨a, ¨o, ¨u,ß enthalten, wenn die Programme auch im nichtdeutschsprachigen Raum eingesetzt

4.1 FIR-Filterentwurf 93

(bestimmt die Breite der Ubergangszone zwischen Durchlaß- und Sperrbereichen)und der erzielbaren Sperrdampfung dar. Die Beziehung fur das Kaiser-Fenster ist

w(n) =

I0

(

β

1−(

2(n−M)N−1

)2)

I0(β)0 ≤ n ≤ N − 1

0 sonst

, (4.15)

mit M = (N −1)/2 und I0(x) als modifizierte Besselfunktion nullter Ordnung, dieam einfachsten durch die Reihenentwicklung

I0(x) = 1 +

∞∑

k=1

[(x/2)k

k!

]2

(4.16)

berechnet werden kann. Dabei braucht man in der Regel nur maximal 25 Reihen-glieder zu berucksichtigen. Der Parameter β hangt mit der gewunschten Sperrdamp-fung ar (in dB) des zu entwerfenden Filters in folgender Weise zusammen:

β =

0 ar < 21

0.5842 (ar − 21)0.4 + 0.07886 (ar − 21) 21 ≤ ar < 50

0.1102 (ar − 8.7) ar ≥ 50

. (4.17)

Ein weiterer, empirisch gefundener Zusammenhang besteht zwischen FilterlangeN , Sperrdampfung ar und der Breite der Ubergangszone ∆f = (fr − fc)/fs zwi-schen Durchlaß- und Sperrbereich des Tiefpaßfilters [11]:

N = 1 +

⌈ar − 7.95

14.36∆f

, (4.18)

mit der Durchlaßgrenzfrequenz fc, der Sperrbereichsgrenzfrequenz fr und der Ab-tastfrequenz fs.

4

Die Fenstermethode kann auch zum Entwurf von Hochpaßfiltern, Bandpaß-und Bandsperrfiltern sowie von Hilberttransformatoren und Differenzierer einge-setzt werden. Hochpaßfilter ergeben sich aus der Differenzbildung “Allpaß minusTiefpaß”. Ein (symmetrisches) Bandpaßfilter erhalt man durch cosinusformige Mo-dulation der Tiefpaßimpulsantwort und eine Bandsperre als Differenz “Allpaß mi-nus Bandpaß” (siehe Tabelle 4.2).

4Die Operation ⌈x⌉ liefert die kleinste ganze Zahl, die großer als x ist.

Page 102: MATLABr-Programmierung · 1Eingaben in MATLABr sollten keine deutschen Sonderzeichen wie ¨a, ¨o, ¨u,ß enthalten, wenn die Programme auch im nichtdeutschsprachigen Raum eingesetzt

94 4 Entwurf digitaler Filter

Tabelle 4.2: Impulsantworten der idealisierten Referenzfilter (die angegebenenFrequenzgange sind 2π–periodisch, θ1 = θM −∆θ und θ2 = θM +∆θ)

Tiefpaß hTP (n) =sin θgn

πn⇐⇒ HTP (jθ) =

1 0 < |θ| < θg

0 sonst

Hochpaß hHP (n) = δ(n)− hTP (n) ⇐⇒ HHP (jθ) =

0 0 < |θ| < θg

1 sonst

Bandpaß hBP (n) = 2sin∆θn

πncos θMn ⇐⇒ HBP (jθ) =

1 θ1 < |θ| < θ2

0 sonst

Bandsperre hBS(n) = δ(n)− hBP (n) ⇐⇒ HBS(jθ) =

0 θ1 < |θ| < θ2

1 sonst

Hilberttrans. hHi(n) =2

πn

(

sinπn

2

)2

⇐⇒ HHi(jθ) =

−j 0 < θ < π

j −π < θ < 0

Differenzierer hDi(n) =

0 n = 0(−1)n

nn 6= 0

⇐⇒ HDi(jθ) = jθ, −π < θ < π

Aufgabe 4.6

Entwickeln Sie eine MATLABr-Funktion h = firkw(fc,fr,ar) zumEntwurf eines FIR-Tiefpaßfilters mit dem Kaiser-Fenster. Die Argumen-te von firkw() sind die Grenzfrequenz fc, die Sperrfrequenz fr (beidenormiert auf die halbe Abtastfrequenz) und die Sperrdampfung ar. Be-achten Sie dabei, daß bei der Anwendung des Kaiser-Fensters auf dieImpulsantwort eines idealen Tiefpaßfilters bei der Grenzfrequenz fc ei-ne Dampfung von 6 dB auftritt. Durch die Modifikation der gegebenenGrenzfrequenz gemaß fc → fc + (fr − fc)/2 kann dieser Effekt jedochnaherungsweise korrigiert werden.Sie konnen Ihre MATLABr-Funktion auch allgemeiner gestalten, indemSie die optionale Ubergabe der Filterlange N zulassen, d.h. wenn N fehlt,wird die Filterlange in der Funktion mit Gl. 4.18 geschatzt. Die Funk-tionsdeklaration sollte dann h = firkw(fc,fr,ar,N) sein. Die Anzahlder Funktionsargumente kann mit nargin festgestellt werden.

Page 103: MATLABr-Programmierung · 1Eingaben in MATLABr sollten keine deutschen Sonderzeichen wie ¨a, ¨o, ¨u,ß enthalten, wenn die Programme auch im nichtdeutschsprachigen Raum eingesetzt

4.1 FIR-Filterentwurf 95

Aufgabe 4.7

Erweitern Sie Ihre MATLABr-Funktion firkw() fur die Filtertypen vonTabelle 4.2, indem Sie ein weiteres Argument typ vorsehen, das die ein-zelnen Filtertypen unterscheidet (typ = ’lp’ oder ’hp’ oder ’bp’ oder’bs’ oder ’di’ oder ’hi’). Welche Einschrankung ergibt sich hinsicht-lich der Filterlange?

4.1.4 Optimaler Entwurf mit dem Remez-Algorithmus

Die bisher untersuchten Entwurfsverfahren sind suboptimal. So wird beispiels-weise mit dem Tiefpaßentwurfsprogramm firkw() bei der Approximation einesrechteckformigen Betragsverlaufs des Frequenzgangs keine konstante Welligkeit imDurchlaß- und im Sperrbereich erzielt. In der Nahe der Sperrfrequenz ist die Damp-fung am kleinsten und nimmt in Richtung halbe Abtastfrequenz zu. Ein optimalerEntwurf approximiert rechteckformige Frequenzgange mit konstanter Welligkeit,d.h. im Sinne einer Tschebyscheff-Approximation. Die so erzeugten Filter ha-ben minimale Filterlange. Zusatzlich kann im Gegensatz zur Fenstermethode dieWelligkeit im Durchlaßbereich und im Sperrbereich vorgegeben werden. Die Fil-terlangen werden sich daher bei großen Unterschieden dieser Welligkeiten starkvon jenen der Fenstermethode (und auch der anderen Verfahren) unterscheiden.

Der Ausgangspunkt fur das sogenannte Equi-Ripple Design ist das Toleranz-schema von Abb. 4.2. Die optimale Losung zu diesem Toleranzschema muß sichohne Spielraum innerhalb der schraffierten Grenzen bewegen. Ein effizienter Algo-rithmus zum Auffinden des optimalen FIR-Filters ist der Remez-Algorithmus[10, 11, 12]. Das Grundprinzip dieses Verfahrens soll kurz erlautert werden. Dazuwird der Ausdruck fur die Nullphasenkomponente A(θ) von Gl. 4.3 als Cosinuspo-lynom

A(θ) =

N2 −1∑

n=0

an(cos θ)n (4.19)

dargestellt und damit die Beziehung fur die Extremwerte von A(θ) durch

dA(θ)

dθ= − sin θ

N2 −1∑

n=1

nan(cos θ)n−1 = 0. (4.20)

angegeben. Die maximale Anzahl der Nullstellen ist demnach 2+N/2−2, da sin θzwei Nullstellen beisteuert (f = 0 und f = fs/2) und das Polynom vom GradN/2 − 2 maximal N/2 − 2 verschiedene Nullstellen besitzt. Zahlt man noch die

Page 104: MATLABr-Programmierung · 1Eingaben in MATLABr sollten keine deutschen Sonderzeichen wie ¨a, ¨o, ¨u,ß enthalten, wenn die Programme auch im nichtdeutschsprachigen Raum eingesetzt

96 4 Entwurf digitaler Filter

0 fc fr fs/2f

1 + δ1

δ2

1− δ1

|H(f)|

Abbildung 4.2: Toleranzschema fur ein FIR-Tiefpaßfilter mit konstanter Welligkeitim Durchlaß- und Sperrbereich

Extremwerte an den Bandkanten (f = fc und f = fr) hinzu, so ergibt sich einemaximale Anzahl von N/2 + 2 Extrempunkten. Die Anzahl maximal moglicherExtremwerte ist insofern wichtig, da ein Theorem der Approximationstheorie (Al-ternantensatz) besagt, daß ein Entwurf dann optimal ist, wenn in den Durchlaß-und Sperrbereichen insgesamt mindestens N/2 + 1 Extrema (sogenannte Alter-nanten) mit gleich großer Amplitude, jedoch alternierenden Vorzeichen auftreten(vgl. dazu Abb. 4.2). Dabei kann bei f = 0 oder f = fs/2 ein zusatzliches Extre-mum (Extra-Ripple) vorhanden sein.

Beim Remez-Algorithmus wird diese Tatsache verwendet, indem ausgehendvon einer Startlosung fur die Alternanten (z.B. aquidistante Verteilung mit Aus-nahme der Bandkanten) durch diese Punkte ein trigonometrisches Polynom (wiez.B. Gl. 4.19) gelegt wird. Danach bestimmt man numerisch (durch ein feinesFrequenzraster) die Lagen der Extremwerte dieser ersten Approximation. Die La-gen der Extrema werden als Alternanten fur den nachsten Durchlauf verwendet.Die Iteration wird abgebrochen, wenn das Toleranzschema (z.B. Welligkeit δ1 imDurchlaßbereich) erfullt ist. Die andere Welligkeit (δ2) ergibt sich automatisch, dabeim Entwurf das Verhaltnis δ1/δ2 vorgegeben wird.

Der Remez-Algorithmus ist relativ robust und verglichen mit anderen Opti-mierungsverfahren auch sehr schnell. Wie alle Optimierungsverfahren kann er inbestimmten Fallen unerwunschte Ergebnisse liefern (“lokale Minima”), so daß dasEntwurfsergebnis immer auch graphisch kontrolliert werden sollte. In der Aufgabe4.4.9 kann dieses Phanomen naher untersucht werden.

Page 105: MATLABr-Programmierung · 1Eingaben in MATLABr sollten keine deutschen Sonderzeichen wie ¨a, ¨o, ¨u,ß enthalten, wenn die Programme auch im nichtdeutschsprachigen Raum eingesetzt

4.1 FIR-Filterentwurf 97

Mit MATLABr kann mit der Funktion remez() die Tschebyscheff-Approxima-tion von Filtertoleranzschemata mit dem Remez-Algorithmus durchgefuhrt wer-den, wobei jedoch abweichend zu Abb. 4.2 nicht δ1 und δ2, sondern nur dasVerhaltnis δ1/δ2 vorgegeben werden kann. In der Praxis bedeutet das kaum ei-ne Einschrankung, gegebenenfalls muß man den Filterentwurf wiederholen. AlsStartwert fur die Filterlange wird haufig die Naherung

N ≈ 1 +

⌈−10 log10(δ1δ2)− 13

14.6∆f

(4.21)

verwendet (∆f = (fr−fc)/fs). Als Alternativen zu dieser Naherungsformel konnenfur schmalbandige Filter mit

N ≈ 1 +

⌈−20 log10(δ2) + 0.22

∆f

(4.22)

und fur sehr breitbandige Filter mit

N ≈ 1 +

⌈−20 log10(δ1) + 5.94

27∆f

(4.23)

genauere Naherungen fur die Filterlangen erreicht werden [11, 13].

Ein Tiefpaßfilter, ahnlich wie in Abb. 4.2, kann mit folgenden MATLABr-Befehlen entworfen werden:

N = 14; % filter length

f = [0 0.42 0.58 1]; % vector of frequencies 0, fc, fr, fs/2

m = [1 1 0 0]; % desired magnitude at given frequencies

h = remez(N-1,f,m);

plot(abs(fft(h,256))); % show magnitude response

zplane(h,1); % plot poles and zeros

Die weiteren, vielfaltigen Moglichkeiten von remez() erfahren Sie mit help remez.Neben Frequenzgangen mit mehreren Durchlaß- und Sperrbereichen (MultibandFilter) konnen auch Hilberttransformatoren und Differenzierer entworfen werden.Die Funktionsargumente von remez() konnen mit remezord() bestimmt werden.

Page 106: MATLABr-Programmierung · 1Eingaben in MATLABr sollten keine deutschen Sonderzeichen wie ¨a, ¨o, ¨u,ß enthalten, wenn die Programme auch im nichtdeutschsprachigen Raum eingesetzt

98 4 Entwurf digitaler Filter

Aufgabe 4.8

Entwickeln Sie die Funktion h = firrem(fc,fr,ar,rp,N) fur das Equi-Ripple Design eines FIR-Tiefpaßfilters mit den Eckfrequenzen fc und fr,der Sperrdampfung ar und der Welligkeit im Durchlaßbereich rp (beideAngaben in dB). Die Filterlange N ist optional, d.h. wird sie nicht angege-ben, dann wird N geschatzt. Verwenden Sie die Gewichtungsmoglichkeit(Argument w bei remez()), um die Approximation im Sperrbereich mitdem Faktor δ1/δ2 zu bevorzugen. Vergleichen Sie die Entwurfsergebnissemit jenen der Kaiserfenstermethode (firkw()).

Aufgabe 4.9

In dieser Aufgabe werden Sie Bandpaßfilter mit dem Remez-Algorithmusentwerfen und dabei auch ein Problem dieses Verfahrens kennenlernen.Zunachst ist ein symmetrisches Bandpaßfilter mit folgenden Daten zuentwerfen:

fr1 = 0.5, fc1 = 0.6, fc2 = 0.8, fr2 = 0.9, fs = 10, ar = 60, rp = 0.2

(Alle Frequenzangaben in kHz, Sperrdampfung und Welligkeit im Durch-laßbereich in dB, ar = −20 log10 δ2 und rp = 20 log10

1+δ11−δ1

.)

|H(f)|

0 fr1 fc2 fr2 fs/2

1 + δ1

1− δ1

δ2f

fc1

Verandern Sie anschließend die obere Sperrfrequenz auf fr2 = 1 kHz undbeobachten Sie den jeweiligen Frequenzgang. Versuchen Sie das Ergebniszu interpretieren!

Page 107: MATLABr-Programmierung · 1Eingaben in MATLABr sollten keine deutschen Sonderzeichen wie ¨a, ¨o, ¨u,ß enthalten, wenn die Programme auch im nichtdeutschsprachigen Raum eingesetzt

4.1 FIR-Filterentwurf 99

4.1.5 FIR-Filter mit geringer Signalverzogerung

Mit den bisher vorgestellten Methoden konnen FIR-Filter mit exakt linearer Pha-se entworfen werden. Beim Design dieser Filter genugt daher die Spezifikation desBetragsverlaufs der Ubertragungsfunktion. Die lineare Phase bedingt jedoch ver-glichen mit anderen Filtern (z.B. minimalphasige IIR-Filter) eine vergleichsweiselange Signalverzogerung, die speziell bei Anwendungen in der Ubertragungstech-nik storend sein kann. Verzichtet man jedoch auf eine exakt lineare Phase und laßteine gewisse Abweichung vom linearen Verlauf zu, dann sind FIR-Filter moglich,die eine geringere oder auch großere Laufzeit als linearphasige Filter haben. Indiesen Fallen hat der gewunschte Frequenzgang beispielsweise fur ein Tiefpaßfilterden Verlauf

D(ejθ)=

e−jθNd 0 ≤ θ ≤ θc0 θr ≤ θ ≤ π

. (4.24)

Der Durchlaßbereich ist das Frequenzintervall [0, θc], der Sperrbereich ist [θr, π](θ = π entspricht der halben Abtastfrequenz). Die Verzogerungszeit soll den vor-gegebenen Wert Nd aufweisen. Fur exakt linearphasige Filter ist Nd = N−1

2 , wennN die Lange der FIR-Filterimpulsantwort ist (siehe Gl. 4.3 und (4.4)).

Der gewunschte Frequenzgang D(ejθ)von Gl. 4.24 ist im Gegensatz zu Filtern

mit linearer Phase eine komplexwertige Funktion, so daß beim Filterdesign diekomplexe Fehlerfunktion

E(ejθ)= H

(ejθ)−D

(ejθ)

(4.25)

bei der Optimierung verwendet werden muß. Der tatsachliche Frequenzgang desFIR-Filters ist

H(ejθ)=

N−1∑

n=0

h(n)e−jθn = eH(ejθ)h, (4.26)

mit den Vektorene(ejθ)= (1, ejθ, ejθ2, . . . , ejθ(N−1))T (4.27)

undh = (h(0), h(1), . . . , h(N − 1))T (4.28)

(T bedeutet transponiert, H konjugiert komplex und transponiert).

Standardentwurfsprogramme, wie die MATLABr-Funktion remez(), konnendaher im vorliegenden Fall nicht eingesetzt werden. MATLABr stellt jedoch furdie Approximation komplexer Frequenzgange die Funktion cremez() bereit, mitder sehr allgemeine Frequenzverlaufe mit FIR-Filtern angenahert werden konnen.Der Nachteil dieser Funktion ist allerdings die mitunter sehr lange Rechenzeit. Imvorliegenden Abschnitt werden daher zwei alternative Methoden behandelt, dieum Großenordnungen geringere Rechenzeiten haben und speziell bei FIR-Filternmit reduzierter Laufzeit exzellente Ergebnisse liefern.

Page 108: MATLABr-Programmierung · 1Eingaben in MATLABr sollten keine deutschen Sonderzeichen wie ¨a, ¨o, ¨u,ß enthalten, wenn die Programme auch im nichtdeutschsprachigen Raum eingesetzt

100 4 Entwurf digitaler Filter

Bei der ersten Methode wird als Least-Squares Fehlermaß die gewichteteSumme der Fehlerbetrage an einem Gitter von L Frequenzpunkten definiert [14]:

ε(h) =L−1∑

k=0

W (θk)∣∣E(ejθk ,h

)∣∣2. (4.29)

Das Frequenzgitter des zu approximierenden gewunschten Frequenzgangs (sie-he Gl. 4.24) umfaßt alle Durchlaß- und Sperrbereiche und muß hinreichend feingewahlt werden (typisch L ≥ 10N). Die Gewichtungsfaktoren W (θk) sind posi-tiv und reellwertig und beeinflussen die Gute der Approximation in ausgewahltenFrequenzbereichen. Kombiniert man Gl. 4.25, Gl. 4.26 und Gl. 4.29, so folgt

ε(h) =

L−1∑

k=0

W (θk)∣∣H(ejθk

)−D

(ejθk

)∣∣2

=L−1∑

k=0

W (θk)∣∣eH

(ejθk

)h−D

(ejθk

)∣∣2

= hHRh− sHh− hHs+ const.

=(h−R−1s

)HR(h−R−1s

)− sHR−1s+ const.︸ ︷︷ ︸

const.

,

(4.30)

mit den Abkurzungen

R =L−1∑

k=0

W (θk)e(ejθk

)eH(ejθk

)= CWCH

s =

L−1∑

k=0

W (θk)D(ejθk

)e(ejθk

)= CWd .

(4.31)

C ist eine N ×L Matrix mit den Spaltenvektoren e(ejθk

), k = 0, . . . , L− 1 und d

ist ein L×1 Vektor mit den Komponenten D(ejθk

). Die L×L Gewichtungsmatrix

W hat Diagonalform mit den Elementen W (θk), k = 0, . . . , L− 1.

Den minimalen Fehler erhalt man unmittelbar anhand der letzten Gleichungin (4.30) fur die FIR-Filterkoeffizienten

h = R−1s =(CWCH

)−1CWd . (4.32)

Der optimale Koeffizientenvektor h ergibt sich somit als Losung eines linearenGleichungssystem mit der N × N Systemmatrix CWCH , die eine hermitescheToplitz-Matrix ist. Durch diese spezielle Struktur wird die Systemmatrix durchihre erste Zeile vollstandig beschrieben. Außerdem kann das Gleichungssystem

Page 109: MATLABr-Programmierung · 1Eingaben in MATLABr sollten keine deutschen Sonderzeichen wie ¨a, ¨o, ¨u,ß enthalten, wenn die Programme auch im nichtdeutschsprachigen Raum eingesetzt

4.1 FIR-Filterentwurf 101

mit dem Levinson-Algorithmus mit einem Rechenaufwand O(N2) statt O(N3)gelost werden. Die folgenden beiden MATLABr-Programme konnen zur Berech-nung des optimalen FIR-Filters eingesetzt werden und sind der Dissertation vonM. Lang entnommen [14].

function h = lslevin(N,theta,D,W)

% h = lslevin(N,theta,D,W)

% Complex Least Squares FIR filter design using Levinson’s algorithm

%

% h filter impulse response

% N filter length

% theta frequency grid (0 <= theta <= pi)

% D complex desired frequency response on grid theta

% W positive weighting function on grid theta

%

% Author: Mathias C. Lang, Vienna University of Technology, July 1998

theta = theta(:); D = D(:); W = W(:); L = length(theta);

a = zeros(N,1); b = a;

% Set up vectors for quadratic objective function

% (avoid building matrices)

dvec = D; evec = ones(L,1); e1 = exp(j*theta);

for i=1:N,

a(i) = W.’*real(evec);

b(i) = W.’*real(dvec);

evec = evec.*e1; dvec = dvec.*e1;

end

a=a/L; b=b/L;

% Compute weighted l2 solution

h = levin(a,b);

function x = levin(a,b)

% function x = levin(a,b)

% solves system of complex linear equations toeplitz(a)*x=b

% using Levinson’s algorithm

% a first row of positive definite Hermitian Toeplitz matrix

% b right hand side vector

% x solution vector

%

% Author: Mathias C. Lang, Vienna University of Technology, Sept.1997

a = a(:); b = b(:); n = length(a);

t = 1; alpha = a(1); x = b(1)/a(1);

for i = 1:n-1,

Page 110: MATLABr-Programmierung · 1Eingaben in MATLABr sollten keine deutschen Sonderzeichen wie ¨a, ¨o, ¨u,ß enthalten, wenn die Programme auch im nichtdeutschsprachigen Raum eingesetzt

102 4 Entwurf digitaler Filter

k = -(a(i+1:-1:2)’*t)/alpha;

t = [t;0] + k*flipud([conj(t);0]);

alpha = alpha*(1 - abs(k)^2);

k = (b(i+1) - a(i+1:-1:2)’*x)/alpha;

x = [x;0] + k*flipud(conj(t));

end

Als Beispiel fur die Anwendung des Entwurfsprogramms lslevin() wird einLow-Delay FIR Filter gewahlt, dessen Entwurfsspezifikationen am Beginn derfolgenden MATLABr-Befehle angegeben sind. Das Entwurfsergebnis ist in Abb. 4.3dargestellt.

% low-delay FIR filter design using lslevin()

N = 101; % filter length

Ndoff = 20; % delay should be smaller by Ndoff samples

% than for linear phase filter

Nd = (N-1)/2 - Ndoff; % desired filter delay

Lpass = 10*N; % number of frequency point in pass band

Lstop = 10*N; % number of frequency point in stop band

fc = 2/8; % cutoff frequency normalized to Fs/2

fr = 2.5/8; % stop band edge normalized to Fs/2

Wpass = 1; % pass band weighting factor

Wstop = 50; % stop band weighting factor

theta = pi*[linspace(0,fc,Lpass), linspace(fr,1,Lstop)];

W = [Wpass*ones(1,Lpass), Wstop*ones(1,Lstop)];

D = [exp(-j*theta(1:Lpass)*Nd) zeros(1,Lstop)];

h = lslevin(N,theta,D,W);

Aufgabe 4.10

Variieren Sie im vorigen Beispiel die Parameter Ndoff im Bereich[−30, 30] und beobachten Sie den Betrags- und Phasenverlauf des FIR-Filters. Wie groß sind in Abhangigkeit von Ndoff die maximalen Fehlerfur Betrag (in dB) und Gruppenlaufzeit (in Samples)? Vergleichen Sieden Betragsverlauf des Low-Delay FIR-Filters (Ndoff = 20) mit einemexakt linearphasigen Filter, dessen Betragsverlauf die gleichen Spezifika-tionen erfullt.

Page 111: MATLABr-Programmierung · 1Eingaben in MATLABr sollten keine deutschen Sonderzeichen wie ¨a, ¨o, ¨u,ß enthalten, wenn die Programme auch im nichtdeutschsprachigen Raum eingesetzt

4.1 FIR-Filterentwurf 103

0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1−100

−80

−60

−40

−20

0

20

|H(f

)| (

dB

)

f

0 0.05 0.1 0.15 0.2 0.25−0.04

−0.02

0

0.02

0.04

f

|H(f

)| (

dB

)

0 0.05 0.1 0.15 0.2 0.25

30

30.5

31

31.5

f

τ (

Sam

ple

s)

Abbildung 4.3: Low-Delay FIR-Filterdesign mit LS-Levinson-Algorithmus, untenDetails des Durchlaßbereichs (Betrag links, Gruppenlaufzeit rechts)

Aufgabe 4.11

Verwenden Sie die Funktion lslevin() fur den Entwurf von FIR-All-paßfiltern mit einem gewunschten Frequenzgang D

(ejθ)= e−jφ(θ) und

a) fur eine sinusformige Gruppenlaufzeit, d.h. der gewunschte Pha-senverlauf ist

φ(θ) =N − 1

2θ + 2π(1− cos θ)

mit N = 61.

b) fur ein Chirp-Allpaßfilter mit dem Phasenverlauf

φ(θ) =N − 1

2θ − η

(

θ − π

2

)2

und N = 61, N = 101 bzw. η = 82π , η = 16

2π .

Welche Anwendungen konnen Sie sich fur diese Filter vorstellen?

Page 112: MATLABr-Programmierung · 1Eingaben in MATLABr sollten keine deutschen Sonderzeichen wie ¨a, ¨o, ¨u,ß enthalten, wenn die Programme auch im nichtdeutschsprachigen Raum eingesetzt

104 4 Entwurf digitaler Filter

Die zweite Methode ist eine Erweiterung des LS-Verfahrens und erzielt durchiterative Veranderung der Gewichtungskoeffizienten im Fehlermaß ein Equi-Rip-ple Design. Dabei ist ein optimales FIR-Filter zu finden, dessen Impulsantwortfur den spezifizierten Frequenzbereich θ ∈ Ω die Tschebyscheff-Losung

h = argmin

maxθ∈Ω

W (θ)∣∣E(ejθ,h

)∣∣

(4.33)

ist, mit der komplexen Fehlerfunktion von Gl. 4.25. Nach Gl. 4.33 wird also diemaximale Abweichung des gewichteten Betrags der Fehlerfunktion minimiert. Ei-ne einfache und sehr effiziente Moglichkeit besteht in der iterativen Verwendungdes vorhergehenden LS-Verfahrens. Dabei werden in jedem Iterationszyklus dieGewichtungsfaktoren W (θ) so angepaßt, daß sich im Endeffekt ein Equi-RippleDesign ergibt. Der von Lawson vorgestellte iterative Algorithmus ist in Tabelle 4.3angegeben [14].

Tabelle 4.3: Lawson-Algorithmus (Iterative Reweighted Least Squares)

1. Initialisierung: n = 0, wahle µ(0)k > 0, k = 0, 1, . . . , L− 1

2. lose mit dem LS-Verfahren

h(n) = argmin

L−1∑

k=0

µ(n)k W 2(θk)

∣∣E(ejθk ,h

)∣∣2

3. aktualisiere µk mit

µ(n+1)k = µ

(n)k

W (θk)∣∣E(ejθk ,h(n)

)∣∣

∑L−1k=0 µ

(n)k W (θk)

∣∣E(ejθk ,h(n)

)∣∣

4. n→ n+ 1, gehe zu 2.

Der Lawson-Algorithmus ist verglichen mit anderen Optimierungsverfahrensehr schnell, da in den meisten Fallen 20 Iterationen ausreichen. Manchmal kann

das Konvergenzverhalten jedoch schlecht sein, wenn die Faktoren µ(n)k durch die

(naherungsweise) multiplikative Aktualisierung sehr klein werden.

Mit MATLABr ist die Implementierung des Lawson-Algorithmus in Kombina-tion mit der Funktion lslevin() sehr kompakt. Die folgende MATLABr-Funktionentstammt wieder der Dissertation von M. Lang [14]. Zur Losung des LS-Problemswird in der Interationsschleife die Funktion lslevin() aufgerufen. Die Iterationwird gestoppt, wenn entweder die eingestellte Toleranzgrenze 10−6 oder die maxi-male Anzahl iter von Schleifendurchlaufen erreicht ist.

Page 113: MATLABr-Programmierung · 1Eingaben in MATLABr sollten keine deutschen Sonderzeichen wie ¨a, ¨o, ¨u,ß enthalten, wenn die Programme auch im nichtdeutschsprachigen Raum eingesetzt

4.1 FIR-Filterentwurf 105

function h = lawson(N,om,D,W,iter)

% h = lawson(N,theta,D,W,iter)

% Complex Chebyshev FIR filter design using Lawson’s algorithm

%

% h filter impulse response

% N filter length

% om frequency grid (0 <= om <= pi)

% D complex desired frequency response on the grid om

% W positive weighting function on the grid om

% iter maximum number of iterations

%

% Author: Mathias C. Lang, Vienna University of Technology, Jan. 1998

theta = theta(:); D = D(:); W = W(:); L = length(theta);

% Initialize, define

tol = 1e-6; h = zeros(N,1); evec = exp(-j*theta);

% Initial IRLS weighting w

w = W.^2;

% Main iteration loop

for i = 1:iter,

% Compute weighted l2 solution

h0 = h;

h = lslevin(N,theta,D,w);

% Compute magnitude of complex error

E = abs(polyval(h(N:-1:1),evec) - D);

% Stop if nothing changes

dh = norm(h-h0);

if dh < tol, break; end

% Update weight function

update = W.*E;

w = w.*update/(w’*update);

end

Fur den Entwurf eines Low-Delay FIR-Filters mit lawson() konnen die fol-genden MATLABr-Befehle als Beispiel dienen. Mit Ausnahme des Gewichtungs-faktors Wstop stimmen die Parameter mit den Angaben auf Seite 102 uberein. DasErgebnis ist in Abb. 4.4 angegeben. Verglichen mit Abb. 4.3 erhalt man im Sperr-bereich ein nahezu perfektes Equi-Ripple Design und im Durchlaßbereich etwas

Page 114: MATLABr-Programmierung · 1Eingaben in MATLABr sollten keine deutschen Sonderzeichen wie ¨a, ¨o, ¨u,ß enthalten, wenn die Programme auch im nichtdeutschsprachigen Raum eingesetzt

106 4 Entwurf digitaler Filter

geringere Abweichungen vom gewunschten Verlauf als beim LS-Verfahren. Wirdder Entwurf hingegen mit der MATLABr-Funktion cremez() durchgefuhrt, dannist im vorliegenden Fall fur ein vergleichbares Ergebnis die vierfache Rechenzeiterforderlich.

N = 101;

Ndoff = -20;

delay = (N-1)/2 + Ndoff;

Lpass = 10*N;

Lstop = 10*N;

fc = 2/8;

fr = 2.5/8;

Wpass = 1;

Wstop = 3;

theta = pi*[linspace(0,fc,Lpass), linspace(fr,1,Lstop)];

w = [Wpass*ones(1,Lpass), Wstop*ones(1,Lstop)];

D = [exp(-j*theta(1:Lpass)*delay) zeros(1,Lstop)];

h = lawson(N,theta,D,w,20);

0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1−100

−80

−60

−40

−20

0

20

|H(f

)|

(d

B)

f

0 0.05 0.1 0.15 0.2 0.25

−0.03

−0.02

−0.01

0

0.01

0.02

0.03

f

|H(f

)|

(d

B)

0 0.05 0.1 0.15 0.2 0.25

30

30.2

30.4

30.6

30.8

f

τ

(S

am

ple

s)

Abbildung 4.4: Low-Delay FIR-Filterdesign mit Lawson-Algorithmus, unten De-tails des Durchlaßbereichs (Betrag links, Gruppenlaufzeit rechts)

Page 115: MATLABr-Programmierung · 1Eingaben in MATLABr sollten keine deutschen Sonderzeichen wie ¨a, ¨o, ¨u,ß enthalten, wenn die Programme auch im nichtdeutschsprachigen Raum eingesetzt

4.2 IIR-Filterentwurf 107

4.2 IIR-Filterentwurf

Die klassische Vorgangsweise beim Entwurf von IIR-Filtern ist die Transformationeines Analogfilters (nach Ubertragungsfunktion oder Struktur) in ein Digitalfilter.Begrundet wird dieser Ansatz durch die ursprungliche Anwendung digitaler Filterals Ersatz fur analoge Systeme. Weiters ist die Analogfiltertheorie sehr gut aus-gebaut und liefert fur gangige Filterspezifikationen (Tiefpaß, Hochpaß, Bandpaßund Bandsperre) optimale Losungen in Form der elliptischen Filter (Cauer-Filter).Transformiert man ein derart optimales Analogfilter mit einer geeigneten Trans-formation in den Digitalbereich, so erhalt man auch ein optimales Digitalfilter,und es besteht keine Notwendigkeit zur Verwendung aufwendiger Optimierungs-programme.

Liegen keine Standardfilterapproximationen vor, also z.B. fur den Entwurf ei-nes digitalen Filters zur Dampfungs- und Gruppenlaufzeitentzerrung von Tele-fonsprachkanalen, so ist man auf Entwurfsverfahren angewiesen, die direkt imDigitalbereich arbeiten. Solche Verfahren verwenden meistens nichtlineare Opti-mierungsmethoden, die mit Feingefuhl (Wahl der richtigen Startlosung und Opti-mierungsroutine) angewendet werden mussen.

In diesem Abschnitt wird der Standardentwurf von IIR-Filtern und zwei Least-Squares-Verfahren (MATLABr-Funktionen prony() zur Nachbildung von Im-pulsantworten und yulewalk() zur Approximation beliebiger Betragsfrequenz-gange) behandelt.

4.2.1 Approximation der Impulsantwort

In der Praxis tritt manchmal der Fall auf, daß die Impulsantwort eines Analog-systems moglichst gut nachgebildet werden soll. Anwendungen dieser Art sindbeispielsweise die Entwicklung von Simulatoren fur Datenubertragungskanale undvon Echoentzerrern fur diese Kanale. Die erste Methode zum Entwurf dieser Filtersetzt die Kenntnis der Ubertragungsfunktion des Analogfilters voraus und wird alsImpulsinvarianztransformation bezeichnet.

Ist ha(t) die Impulsantwort des Analogfilters mit dem Frequenzgang Ha(jω),dann soll das gesuchte Digitalfilter die Impulsantwort

h(n) = Tha(nT ) (4.34)

(Abtastintervall T = 1/fs) besitzen, wobei vorausgesetzt wird, daß ha(t) bei t = 0keine Sprungstelle aufweist [15]. Die Skalierung der Impulsantwort mit T ergibtsich aus der Tatsache, daß die Analogfilterimpulsantwort normalerweise die Einheitsec−1 hat, wahrend die Impulsantwort des Digitalfilters aus Zahlen ohne Einheitenbesteht.

Page 116: MATLABr-Programmierung · 1Eingaben in MATLABr sollten keine deutschen Sonderzeichen wie ¨a, ¨o, ¨u,ß enthalten, wenn die Programme auch im nichtdeutschsprachigen Raum eingesetzt

108 4 Entwurf digitaler Filter

Der Abtastung im Zeitbereich entspricht im Frequenzbereich eine periodischeFortsetzung des Spektrums, so daß der Frequenzgang des Digitalfilters durch

H(ejθ)=

∞∑

k=−∞

Ha

(

ej(θT+k 2π

T ))

(4.35)

gegeben ist. Die periodische Fortsetzung kann Aliasing im Frequenzbereichbewirken und damit dieses Entwurfsverfahren nur fur schmalbandige Filter sinnvollmachen.

Der Entwurf des Digitalfilters geht von der Partialbruchzerlegung der Analog-filterubertragungsfunktion aus:

Ha(s) =N∑

k=1

Ak

s− sk. (4.36)

Fur den in der Praxis wichtigen Fall einfacher Polstellen von Ha(s) folgt mitGl. 4.36 fur die Impulsantwort des Analogfilters

ha(t) =

N∑

k=1

Akesktσ(t) (4.37)

bzw. mit Gl. 4.34 fur die Impulsantwort des gesuchten Digitalfilters

h(n) =

N∑

k=1

TAkesknTσ(n) (4.38)

und daher

H(z) =N∑

k=1

TAk

1− eskT z−1. (4.39)

Damit kann das Digitalfilter direkt mit der Parallelform von Seite 51 durch Zu-sammenfassen von konjugiert komplexen Polen realisiert werden.

Eine interessante Anwendung der Impulsinvarianztransformation ergibt sichfur spezielle, fast linearphasige Analogfilter, sogenannte Lerner-Filter [16], de-ren Ubertragungsfunktion bereits als Partialbruchentwicklung vorliegt und die einsehr einfaches Schema fur die Lage der Polstellen aufweisen (siehe Abb. 4.5). MitAusnahme der beiden Randpole haben die Pole des Lerner-Filters konstanten Fre-quenzabstand a. Lerner-Filter werden direkt in der Parallelform realisiert. DieKoeffizienten (Residuen) rk der Partialbruchzerlegung der Ubertragungsfunktionsind, abgesehen von den Randpolen, gleich groß und haben alternierende Vorzei-chen (siehe Abb. 4.5).

Wegen dieser einfachen Form der Partialbruchzerlegung ist der Entwurf derLerner-Filter mit der Impulsinvarianztransformation außerst einfach und auch per

Page 117: MATLABr-Programmierung · 1Eingaben in MATLABr sollten keine deutschen Sonderzeichen wie ¨a, ¨o, ¨u,ß enthalten, wenn die Programme auch im nichtdeutschsprachigen Raum eingesetzt

4.2 IIR-Filterentwurf 109

ℜes

ℑms

a

2a

3a

4a

5a5a+ a/2

−1

−11

−11/2

1

−b 0

1

Abbildung 4.5: Polstellen (ohne konjugiert komplexe Werte) eines analogenLerner-Tiefpaßfilters 13. Ordnung in der komplexen s-Ebene mit Angabe der Ko-effizienten rk der Partialbruchzerlegung von H(z) bei den Polen. (Die 6 dB Grenz-frequenz ist durch 5a+ a

4 gegeben, die Welligkeit im Durchlaßbereich wird durchb bestimmt.)

Hand moglich. Mit der folgenden MATLABr-Funktion konnen die Koeffizientender Partialbruchzerlegung fur digitale Lerner-Tiefpaßfilter berechnet werden.

function [r,p,k] = lerner_lp(N,rp,fc)

% function [r,p,k] = lerner_lp(N,rp,fc)

%

% design of digital Lerner low pass filters (impulse invariant method)

% N

% transfer function H(z) = k * z * Sum r(n) / (z - p(n))

% n=1

%

% N filter order (min. 4)

% rp approximate pass band ripple in dB

% fc 6dB cutoff frequency normalized to Fs/2

% r,p,k residues, poles and gain factor of transfer function

%

% G. Doblinger 12-2000, TU-Wien

if nargin == 0

help lerner_lp, return

elseif N < 4

error(’Filter order must not be less than 4’);

elseif fc > 1

error(’Sampling theorem ignored’);

end

Page 118: MATLABr-Programmierung · 1Eingaben in MATLABr sollten keine deutschen Sonderzeichen wie ¨a, ¨o, ¨u,ß enthalten, wenn die Programme auch im nichtdeutschsprachigen Raum eingesetzt

110 4 Entwurf digitaler Filter

% compute residues of partial fraction expansion

r = ones(1,N);

r(1) = -0.5;

if rem(N,2) == 0 % even filter order?

r(N) = 0.5;

else

r(N) = -0.5;

end

r(3:2:N-1) = -1;

% compute Lerner filter poles

% (poles negative or zero imaginary part only)

wc = pi*fc;

nw = floor(N/2);

w = ones(1,nw);

dw = 2*wc/(N-2.5);

w(1) = -dw*(N-2)/2;

w(2:nw) = [w(1)+dw/2:dw:-dw/4];

p0 = (10^(rp/20)-1)^(dw/pi);

p = p0*exp(j*w);

% arrange poles in complex pairs (pos. and neg. imag. part

% alternating) followed by real pole (if present)

if rem(N,2) == 0 % even filter order

v = ones(1,N);

v(1:2:N) = conj(p);

v(2:2:N) = p;

p = v;

v(1:2:N) = r(N:-1:nw+1); % rearrange residues

v(2:2:N) = r(1:nw);

r = v;

else

v = ones(1,N-1);

v(1:2:N-1) = conj(p);

v(2:2:N-1) = p;

p = [v p0]; % append real pole

v(1:2:N-1) = r(N:-1:nw+2);

v(2:2:N-1) = r(1:nw);

r = [v r(nw+1)];

end

k = 1/abs(sum(r./(1-p))); % gain factor for H(e^0) = 1

Page 119: MATLABr-Programmierung · 1Eingaben in MATLABr sollten keine deutschen Sonderzeichen wie ¨a, ¨o, ¨u,ß enthalten, wenn die Programme auch im nichtdeutschsprachigen Raum eingesetzt

4.2 IIR-Filterentwurf 111

Die Ausgabeargumente r,p,k der Funktion lerner_lp() konnen unmittelbarzur Berechnung der Ubertragungsfunktion (Parallelform) verwendet werden:

H(z) = k

N∑

i=1

ri1− piz−1

. (4.40)

Lerner-Filter konnen aber auch in der Kaskadenform realisiert werden. Dazumussen allerdings die Nullstellen aus der Partialbruchzerlegung berechnet werden,was bei hohen Filterordnungen numerische Probleme bereiten kann. Da Lerner-Filter keine Sperrstellen am Einheitskreis aufweisen, ist die Toleranzempfindlich-keit im Sperrbereich gering, so daß die Kaskadenform kaum Vorteile gegenuber derParallelform aufweist. Im Gegenteil, durch die spezielle Lage der Pole und die ein-fachen Werte der Residuen haben digitale Lernerfilter eine einfache Struktur, wennkonjugiert komplexe Pole und Residuen zu Blocken 2. Ordnung zusammengefaßtwerden [17]. Weitere Implementierungsvorteile ergeben sich bei der Kombinationvon Lerner-Bandpaßfiltern zu Filterbanken [18].

Aufgabe 4.12

Verwenden Sie lerner_lp() zum Entwurf von digitalen Lernerfilternund stellen Sie deren Ubertragungsfunktionen nach Betrag und Phase

H(jθ) = A(θ)ejφ(θ),

sowie die Gruppenlaufzeit τg(θ) = −dφ(θ)dθ graphisch dar. Vergleichen Sie

Lerner-Tiefpaßfilter mit FIR-Filtern annahernd gleicher Filtersteilheit.Wie groß sind die Unterschiede im Implementierungsaufwand (Anzahlder Multiplikationen, Additionen und Verzogerungselemente)? Ist dieSignalverzogerung beim Lerner- oder beim FIR-Filter geringer?

Aufgabe 4.13

Erweitern Sie die Funktion lerner_lp() fur den Entwurf digitaler Band-paßfilter. Dabei werden beim analogen Lerner-Bandpaßfilter die Polstel-len einfach in die Bandpaßlage verschoben. Beachten Sie die korrekteWahl der Vorzeichen der Residuen bei den konjugiert komplexen Po-len. Auch fur diese Aufgabe lohnt sich der Vergleich mit linearphasigenFIR-Filtern.

Page 120: MATLABr-Programmierung · 1Eingaben in MATLABr sollten keine deutschen Sonderzeichen wie ¨a, ¨o, ¨u,ß enthalten, wenn die Programme auch im nichtdeutschsprachigen Raum eingesetzt

112 4 Entwurf digitaler Filter

Die zweite Methode zum Entwurf von IIR-Filtern im Zeitbereich verwendetLeast-Squares-Verfahren zur Approximation einer gegebenen Impulsantwortdurch ein rekursives System. Die Grundzuge einer solchen Methode sollen kurzerklart werden. Der Ausgangspunkt ist die Differenzengleichung Gl. 2.25, mit derfur x(n) = δ(n) die Impulsantwort eines IIR-Filters entsprechend

h(n) = −M∑

k=1

akh(n− k) +N∑

k=0

bkδ(n− k) (4.41)

allgemein berechnet werden kann. Der Einfluß des nichtrekursiven Teils (rechteSumme) verschwindet wegen des δ-Impulses fur n > N , so daß

h(n) = −M∑

k=1

akh(n− k), n > N (4.42)

gilt. Da die Impulsantwort normalerweise nur fur n ≥ 0 gegeben ist, kann manin Gl. 4.42 n > M +N wahlen und damit erreichen, daß das Argument n − k inder Summe stets positiv ist und somit nur gegebene Werte von h(n) verwendetwerden. Die unbekannten Koeffizienten ak konnen daher als Losung des linearenGleichungssystems

Ha = h (4.43)

bestimmt werden, mit h = [h(M + N + 1)h(M + N + 2) . . . h(2M + N)]T unda = [a1 a2 . . . aM ]T sowie der Gleichungssystemmatrix

H =

h(M +N) h(M +N − 1) h(M +N − 2) · · · h(N + 1)

h(M +N + 1) h(M +N) h(M +N − 1) · · · h(N + 2)...

......

. . ....

h(2M +N − 1) h(2M +N − 2) h(2M +N − 3) · · · h(N +M)

.

(4.44)

Die Matrix H ist eine Toplitz-Matrix mit gleichen Elementen in den Diago-nalen. Gleichungssysteme mit Toplitz-Matrizen konnen sehr effizient gelost werden(siehe Seite 101). Diese Matrixstruktur wurde bereits bei der Faltungsmatrix inAbschnitt 1.3 (Gl. 1.10) angegeben. Normalerweise werden bei der praktischenAnwendung mehr Impulsantwortwerte als erforderlich vorliegen, so daß Gl. 4.43mit einem Least-Squares-Verfahren, wie beim FIR-Filterentwurf auf Seite 90,gelost werden kann. Weiters wird in praktischen Anwendungen die Anzahl derFilterkoeffizienten M,N bestenfalls naherungsweise bekannt sein.

Ist die Losung fur den Koeffizientenvektor a gefunden, so konnen mit Gl. 4.41die restlichen Koeffizienten b0 . . . bN berechnet werden:

bn = h(n) +

M∑

k=1

akh(n− k), n = 0, 1 . . . N. (4.45)

Page 121: MATLABr-Programmierung · 1Eingaben in MATLABr sollten keine deutschen Sonderzeichen wie ¨a, ¨o, ¨u,ß enthalten, wenn die Programme auch im nichtdeutschsprachigen Raum eingesetzt

4.2 IIR-Filterentwurf 113

Der vorgestellte Algorithmus zur Least-Squares-Approximation von Impulsant-worten durch IIR-Systeme kann in MATLABr mit [b,a] = prony(h,N,M) aus-gefuhrt werden. Dabei ist jedoch zu beachten, daß im Gegensatz zum Vektor avon Gl. 4.43, bei prony() der Vektor a als erste Komponente a1 = 1 hat. Damitkann z.B. y = filter(b,a,x) unmittelbar zum Testen des Entwurfsergebnisseseingesetzt werden.

Aufgabe 4.14

Verwenden Sie die Funktion prony() zum Entwurf rekursiver Filter

a) mit dreieckformiger Impulsantwort,

b) mit gaußformiger Impulsantwort,

c) zum Nachbilden der Impulsantwort eines Hilberttransformators(siehe Tabelle 4.2 auf Seite 94),

d) zum Nachbilden der Impulsantwort eines Differenzierers (siehe Ta-belle 4.2 auf Seite 94).

Variieren Sie in allen Fallen die Parameter N und M und sehen Sie sichmit zplane() die Pol/Nullstellenkonstellation an.

4.2.2 Bilineare Z-Transformation

Der Entwurf von IIR-Filtern mit der Impulsinvarianztransformation hat den Nach-teil, daß bedingt durch Aliasing im Frequenzbereich nur bei relativ schmalbandigenTief- und Bandpassen gute Entwurfsergebnisse zu erwarten sind.

Die bilineare Z-Transformation vermeidet das Problem von Aliasing dadurch,daß die komplette imaginare Achse (jω-Achse) der s-Ebene auf den Einheitskreisder z-Ebene abgebildet wird [1, 10, 11, 12]. Anschaulich gesprochen wird die ana-loge Frequenzachse gestaucht und zum Einheitskreis (das ist die digitale Frequenz-achse) geformt. Durch diese nichtlineare Transformation treten Verzerrungen derFrequenzskala auf, die umso starker ausgepragt sind, je naher man zur halbenAbtastfrequenz gelangt (die halbe Abtastfrequenz entspricht der Analogfrequenz+∞). Diese Frequenzverwerfung muß beim Entwurf des analogen Referenzfiltersberucksichtigt werden. Die Amplitudenskala fur den Frequenzgang des digitalenFilters wird bei der bilinearen Z-Transformation nicht verzerrt, so daß die Wellig-keiten in den Durchlaßbereichen und die Sperrdampfungen erhalten bleiben. Ferner

Page 122: MATLABr-Programmierung · 1Eingaben in MATLABr sollten keine deutschen Sonderzeichen wie ¨a, ¨o, ¨u,ß enthalten, wenn die Programme auch im nichtdeutschsprachigen Raum eingesetzt

114 4 Entwurf digitaler Filter

werden Pole der linken s-Halbebene in das Innere des Einheitskreises abgebildet,d.h. ein stabiles Analogfilter liefert ein stabiles Digitalfilter.

Als einzigen Nachteil der bilinearen Z-Transformation konnte man die Verzer-rung des Phasengangs ansehen, so daß zum Beispiel nahezu linearphasige Ana-logfilter (z.B. Bessel- oder Lerner-Filter) mit dieser Transformation auch nichtannahernd in linearphasige Digitalfilter ubergefuhrt werden konnen.

Der mathematische Zusammenhang zwischen s-Bereich und z-Bereich ist beider bilinearen Z-Transformation

s =2

T

z − 1

z + 1, (4.46)

mit dem Abtastintervall T = 1fs . Fur die Frequenzachsen ergibt sich mit s = jω

und z = ejθ aus Gl. 4.46

ω =2

Ttan

θ

2. (4.47)

Fur θ = π ist ω → +∞, d.h. die gesamte Halbachse ω ∈ [0,+∞] wird auf denEinheitskreisbogen mit den Winkeln θ ∈ [0, π] abgebildet.

Mit Gl. 4.46 erhalt man aus einer gegebenen Ubertragungsfunktion Ha(s) einesAnalogfilters mit

H(z) = Ha(s)∣∣∣s= 2

Tz−1z+1

(4.48)

die Ubertragungsfunktion H(z) des gesuchten Digitalfilters.

Die Entwurfsaufgabe besteht daher im Auffinden einer geeigneten Analogfil-terubertragungsfunktion. Wegen der Frequenzverwerfung (Gl. 4.47) mussen diegegebenen Grenzfrequenzen des Digitalfilters in jene des Analogfilters umgerech-net werden. Außerdem sind die Analogfilter meistens in normierter Form gegeben,z.B. bei einem Butterworth-Tiefpaß N -ter Ordnung

|Ha(ω)|2 =1

1 + ω2N, (4.49)

wobei ω hier auf die 3 dB-Grenzfrequenz normiert ist (siehe Abb. 4.6). Fur dieAnwendung ist es daher vorteilhaft, die bilineare Z-Transformation inklusive Vor-verzerrung der Frequenzskala fur ein normiertes s anzugeben. Aus Gl. 4.46 folgt

s =1

tanπ fcfs

z − 1

z + 1, (4.50)

mit der Normierungsfrequenz fc (z.B. Grenzfrequenz des Digitalfilters) und derAbtastfrequenz fs. Zu beachten ist, daß s in Gl. 4.50 jetzt normiert ist.

Als Beispiel soll der Entwurf eines digitalen Butterworth-Tiefpasses mit denParametern N , fc und fs vorgefuhrt werden. Das zugehorige Analogfilter hat die

Page 123: MATLABr-Programmierung · 1Eingaben in MATLABr sollten keine deutschen Sonderzeichen wie ¨a, ¨o, ¨u,ß enthalten, wenn die Programme auch im nichtdeutschsprachigen Raum eingesetzt

4.2 IIR-Filterentwurf 115

|Ha(jω)|2 fur normierten Butterworth-Tiefpaß (N = 10)

ω

210

1

0.5

0

Abbildung 4.6: Betragsfrequenzgang eines normierten, analogen Butterworth-Tief-paßfilters

Ubertragungsfunktion

Ha(s) =k0

N∏

k=1

(s− sk), (4.51)

mit den Polen sk = ejπ(12+

2k−12N ), k = 1, 2 . . . N , und dem Verstarkungsfaktor

k0 = −∏N

k=1 sk, der Ha(0) = 1 bewirkt.

Wird die normierte Form der bilinearen Z-Transformation in Gl. 4.51 einge-setzt, dann erhalt man die Ubertragungsfunktion des gesuchten Digitalfilters

H(z) =k0v

N∏

k=1

(1− vsk)

(z + 1)N

N∏

k=1

(z − zk), (4.52)

mit zk =1 + vsk1− vsk

und v = tanπfcfs

.

Die Umrechnung von Polen und Nullstellen eines allgemeinen analogen Pro-totypfilters in Pole und Nullstellen des gewunschten Digitalfilters kann mit derMATLABr-Funktion bilinear() erfolgen. Schneller (speziell bei Filtern hohererOrdnung) ist die folgende Funktion:

function [zd,pd,kd] = bilzt(z,p,k,fc)

% function [zd,pd,kd] = bilzt(z,p,k,fc)

%

% bilinear transform of analog low pass transfer function

% poles and zeros into digital domain

Page 124: MATLABr-Programmierung · 1Eingaben in MATLABr sollten keine deutschen Sonderzeichen wie ¨a, ¨o, ¨u,ß enthalten, wenn die Programme auch im nichtdeutschsprachigen Raum eingesetzt

116 4 Entwurf digitaler Filter

%

% z (zd) vector of analog (digital) filter zeros

% p (pd) vector of analog (digital) filter poles

% k (kd) gain factor of analog (digital) filter

% fc low pass cutoff frequency of digital filter

% (normalized to Fs/2)

%

% G. Doblinger, Vienna University of Technology, 8-1994

if nargin == 0

help bilzt

return

end

np = length(p);

nz = length(z);

v = tan(pi*fc/2);

if isempty(z) % no numerator polynom in transfer function

kd = k*v^np / real(prod(1 - v*p));

if np == 1

zd = -1;

else

zd = -ones(size(p));

end

pd = (1 + v*p ) ./ (1 - v*p);

elseif np == nz

kd = k*real(prod(1 - v*z)) / real(prod(1 - v*p));

zd = (1 + v*z ) ./ (1 - v*z);

pd = (1 + v*p ) ./ (1 - v*p);

elseif np == nz + 1 % there is a zero at infinity in s-plane

kd = v * k*real(prod(1 - v*z)) / real(prod(1 - v*p));

zd = (1 + v*z ) ./ (1 - v*z);

[r,c] = size(zd);

if r == 1

zd = [-1 zd]; % include zero at -1 in z-plane

else

zd = [-1 ; zd];

end

pd = (1 + v*p ) ./ (1 - v*p);

else

error(’Wrong number of poles and zeros’);

end

Mit MATLABr erfolgt der Entwurf von digitalen Butterworth-Filtern mit derFunktion butter(). Allerdings wird ein generalisiertes Verfahren verwendet, dasProbleme mit den mehrfachen Nullstellen (bei z = −1, siehe Gl. 4.52) hat. Es istdaher empfehlenswert, die Pole und Nullstellen des digitalen Butterworth-Filters

Page 125: MATLABr-Programmierung · 1Eingaben in MATLABr sollten keine deutschen Sonderzeichen wie ¨a, ¨o, ¨u,ß enthalten, wenn die Programme auch im nichtdeutschsprachigen Raum eingesetzt

4.2 IIR-Filterentwurf 117

direkt aus den expliziten Formeln zu berechnen. Diese Vorgehensweise ist außer-dem schneller als die Funktion butter(). Mit den folgenden Befehlen wird eindigitales Butterworth-Tiefpaßfilter entworfen.

N = 10; % filter order

rp = 1; % pass band "ripple" in dB at cutoff frequency

fc = 0.3; % cutoff frequency normalized to Fs/2

% compute poles, zeros, and gain of analog filter

za = [];

epsil = 10 .^(0.1*abs(rp)) - 1;

pa = epsil ^(-1/(2*N)) * exp(sqrt(-1)*(pi*(1:2:2*N-1)/(2*N) + pi/2)).’;

ka = real(prod(-p));

% transform to digital domain

[z,p,k] = bilzt(za,pa,ka,fc);

% plot result

[b,a] = zp2tf(z,p,k);

freqz(b,a);

Tschebyscheff-Filter liefern eine bessere Approximation von rechteckformi-gen Frequenzgangen als Butterworth-Filter. Sie besitzen eine konstante Welligkeitim Durchlaßbereich (Tschebyscheff I Filter) oder im Sperrbereich (TschebyscheffII Filter, auch inverse Tschebyscheff-Filter genannt). Der Betragsverlauf des ana-logen Tschebyscheff I Filters ist (siehe auch Abb. 4.7)

|Ha(ω)|2 =1

1 + (εTN (ω))2(4.53)

bzw. fur das Tschebyscheff II Filter

|Ha(ω)|2 =1

1 +

(

εTN (ωr)

TN(ωr

ω

)

)2 , (4.54)

mit dem Tschebyscheff-Polymon N-ter Ordnung

TN (ω) =

cos(N cos−1 ω

)|ω| ≤ 1

cosh(N cosh−1 ω

)|ω| > 1

. (4.55)

Auch fur die Pole und Nullstellen der analogen Tschebyscheff-Filter gibt es ex-plizite Formeln, die in den MATLABr-Funktionen cheb1ap() und cheb2ap() ver-wendet werden. Das folgende Beispiel zeigt die Verwendung dieser Funktionen zumEntwurf digitaler Tschebyscheff-Filter mit Hilfe der bilinearen Z-Transformation.

Page 126: MATLABr-Programmierung · 1Eingaben in MATLABr sollten keine deutschen Sonderzeichen wie ¨a, ¨o, ¨u,ß enthalten, wenn die Programme auch im nichtdeutschsprachigen Raum eingesetzt

118 4 Entwurf digitaler Filter

|Ha(jω)|2 fur normierten Tschebyscheff I Tiefpaß (N = 7)

ω

2ωr10

111+ε2

0

|Ha(jω)|2 fur normierten Tschebyscheff II Tiefpaß (N = 7)

ω

2ωr10

111+ε2

0

Abbildung 4.7: Frequenzgang normierter, analoger Tschebyscheff-Tiefpaßfilter

% Tschebyscheff I Filter

N = 7; % filter order

rp = 1; % pass band ripple in dB

fc = 0.3; % cutoff frequency normalized to Fs/2

% compute poles, zeros, and gain of analog filter

[za,pa,ka] = cheb1ap(N,rp);

% transform to digital domain

[z,p,k] = bilzt(za,pa,ka,fc);

% plot result

[b,a] = zp2tf(z,p,k);

freqz(b,a);

% Tschebyscheff II Filter

N = 7; % filter order

as = 70; % stop band attenuation in dB

fr = 0.4; % stop band edge frequency normalized to Fs/2

% compute poles, zeros, and gain of analog filter

[za,pa,ka] = cheb2ap(N,as);

% transform to digital domain

[z,p,k] = bilzt(za,pa,ka,fr);

Page 127: MATLABr-Programmierung · 1Eingaben in MATLABr sollten keine deutschen Sonderzeichen wie ¨a, ¨o, ¨u,ß enthalten, wenn die Programme auch im nichtdeutschsprachigen Raum eingesetzt

4.2 IIR-Filterentwurf 119

% plot result

[b,a] = zp2tf(z,p,k);

freqz(b,a);

Ein Equi-Ripple Design wie bei FIR-Filtern, d.h. konstante Welligkeit so-wohl im Durchlaß- als auch im Sperrbereich, wird mit elliptischen Filtern (auchCauer-Filter genannt) erreicht. Der Betragsverlauf des Frequenzgangs eines nor-mierten elliptischen Analogtiefpaßfilters ist in Abb. 4.8 skizziert, wobei nur zurbesseren Sichtbarkeit eine große Welligkeit gewahlt wurde.

|Ha(jω)|2 fur ein elliptisches Filter (N = 5)

ω

210

111+ε2

0

Abbildung 4.8: Betragsfrequenzgang eines normierten, analogen, elliptischen Tief-paßfilters

Mit der MATLABr-Funktion [z,p,k] = ellip(N,rp,ar,fc) kann ein digita-les elliptisches Tiefpaßfilter mit der Ordnung N, der Welligkeit im Durchlaßbereichrp und der Sperrdampfung ar (beide in dB), sowie der Durchlaßgrenzfrequenz fcentworfen werden.

Aufgabe 4.15

In dieser Aufgabe sollen Sie die vier vorgestellten Standardapproxima-tionen fur digitale Tiefpaßfilter vergleichen. Dazu bestimmen Sie jeweilsPole, Nullstellen und den Verstarkungsfaktor fur die folgende Spezifika-tion:

fc = 0.800 kHz, fr = 1.2 kHz, fs = 10 kHz, rp = 0.5 dB, ar = 60 dB.

Passen Sie die jeweilige Filterordnung so an, daß Filter gleicher Steil-heit und Welligkeiten entstehen. Betrachten Sie den Frequenzgang vonDampfung und Gruppenlaufzeit. Welches Filter hat die großte Verzer-rung der Gruppenlaufzeit? Wie sieht die Lage der Pole und Nullstellenmit der Funktion zplane() aus?

Page 128: MATLABr-Programmierung · 1Eingaben in MATLABr sollten keine deutschen Sonderzeichen wie ¨a, ¨o, ¨u,ß enthalten, wenn die Programme auch im nichtdeutschsprachigen Raum eingesetzt

120 4 Entwurf digitaler Filter

Aufgabe 4.16

Von Interesse ist auch ein Vergleich der Impulsantworten der einzelnenIIR-Filter. Dazu gehen Sie wie folgt vor:

a) Bestimmen Sie Pole p, Nullstellen z und Verstarkungsfaktor k desjeweiligen IIR-Filters.

b) Transformieren Sie Pole und Nullstellen der Ubertragungsfunktionmit b = k*real(poly(z)) und a = real(poly(p)) in die Dar-stellung als rationale Funktion mit dem Koeffizientenvektor b desZahlerpolynoms bzw. a des Nennerpolynoms (real() eliminierteinen kleinen Imaginarteil, der durch Rundungsfehler entstehenkann).

c) Berechnen Sie mit h = filter(b,a,[1 zeros(1,Ntime)]) wiegewohnt die Impulsantwort.

Welches der untersuchten Filter ist fur die Bandbegrenzung beiDatenubertragungskanalen am besten geeignet? Welche Filter sindstreng minimalphasig? Versuchen Sie, mit dem auf Seite 112 vor-gestellten LS-Verfahren, aus der Impulsantwort die Polynom- bzw.Pol/Nullstellendarstellung der Ubertragungsfunktion zu bestimmen.Gibt es Abweichungen zur ursprunglichen Darstellung? Ab welcher Fil-terordnung versagt diese Methode? Versuchen Sie, die Fehlerquellen zulokalisieren.

4.2.3 Frequenztransformationen

Der bisher vorgestellte Entwurf mit Hilfe der bilinearen Z-Transformation hat sichauf Tiefpaßfilter beschrankt. Andere Standardapproximationen, wie Hochpasse,Bandpasse und Bandsperren erhalt man ahnlich wie bei analogen Filtern durchFrequenztransformationen. So wird z.B. ein analoger Tiefpaß mit der Transfor-mation s → 1

s in einen Hochpaß ubergefuhrt, wobei sich Sperrdampfung undWelligkeit im Durchlaßbereich nicht andern.

Beim Entwurf von Digitalfiltern kann man entweder den analogen Referenztief-paß in ein anderes Analogfilter (z.B. Hochpaß) transformieren und danach mit derbilinearen Z-Transformation das gesuchte Digitalfilter erhalten, oder man wendetdie Frequenztransformation im Digitalbereich an. Beide Verfahren sind gleichwer-tig. Sie unterscheiden sich nur in der Frequenzverwerfung. Hier sollen die Frequenz-transformationen im Digitalbereich angewendet werden. Diese Frequenztransfor-

Page 129: MATLABr-Programmierung · 1Eingaben in MATLABr sollten keine deutschen Sonderzeichen wie ¨a, ¨o, ¨u,ß enthalten, wenn die Programme auch im nichtdeutschsprachigen Raum eingesetzt

4.2 IIR-Filterentwurf 121

mationen sind sogenannte Allpaßtransformationen, bei denen die komplexeFrequenz z durch eine Allpaßfunktion z → G(z) mit |G(ejθ)| = 1 transformiertwird. Dadurch ist gewahrleistet, daß lediglich die Frequenzskala fur H(z) geandertwird [19, 11].

Tiefpaß-Hochpaß-Transformation

Ein Tiefpaßfilter mit der Grenzfrequenz θc und der Ubertragungsfunktion Hlp(z)geht mit folgender Transformation in ein Hochpaßfilter mit der Grenzfrequenz θ1und der Ubertragungsfunktion Hhp(z) uber:

Hhp(z) = Hlp(z)

∣∣∣∣z → − z + α

1 + αz

, (4.56)

mit α = − cosθ1+θc

2

cosθ1−θc

2

.

Fur θc = π − θ1 wird α = 0, so daß sich eine sehr einfache Transformationergibt:

Hhp(z) = Hlp(−z). (4.57)

Man braucht daher nur die gegebene Hochpaßgrenzfrequenz in die Tiefpaßgrenz-frequenz umzurechnen (fc = fs/2− f1) und in der Ubertragungsfunktion des ent-worfenen Tiefpaßfilters bei jedem z oder in der Filterstruktur bei jedem Verzoge-rungselement eine Vorzeichenumkehr vorzunehmen!

Aufgabe 4.17

Probieren Sie diese Transformation an einem Beispiel aus. Entwerfen Siedazu ein beliebiges Tiefpaßfilter und wenden Sie dann die einfache Trans-formation auf die Pol/Nullstellendarstellung von H(z) an. BeobachtenSie auch die Anderung der Pole und Nullstellen mit zplane().

Tiefpaß-Bandpaß-Transformation

Ein Bandpaßfilter mit der unteren Grenzfrequenz θ1 und der oberen Grenzfrequenzθ2 gewinnt man durch die Transformation

Hbp(z) = Hlp(z)

∣∣∣∣

z → −z2 − 2αk

k+1z +k−1k+1

k−1k+1z

2 − 2αkk+1z + 1

, (4.58)

Page 130: MATLABr-Programmierung · 1Eingaben in MATLABr sollten keine deutschen Sonderzeichen wie ¨a, ¨o, ¨u,ß enthalten, wenn die Programme auch im nichtdeutschsprachigen Raum eingesetzt

122 4 Entwurf digitaler Filter

mit α =cos

θ1+θ22

cosθ2−θ1

2

und k = cot θ2−θ12 tan θc

2 .

Auch hier gibt es einen (allerdings einschrankenden) einfachen Spezialfall furθ1 + θ2 = π und θc = θ2 − θ1:

Hbp(z) = Hlp(−z2). (4.59)

Die Einschrankung betrifft die Mittenfrequenz des Bandpaßfilters, die immer einViertel der Abtastfrequenz ist. Die Bandbreite ist beliebig und durch die Tiefpaß-grenzfrequenz bestimmt. Ist die Filterstruktur gegeben, so entspricht Gl. 4.59 demAustausch jedes Verzogerungselements durch zwei in Kette geschaltete Verzoge-rungen plus einer Vorzeichenumkehr.

Aufgabe 4.18

Fuhren Sie mit einfachen MATLABr-Befehlen fur eine gegebene Tief-paßubertragungsfunktion die Frequenztransformation Gl. 4.59 durch.Danach entwerfen Sie mit ellip() ein elliptisches Bandpaßfilter IhrerWahl. Finden Sie heraus, ob die Transformation symmetrische oder un-symmetrische Bandpasse liefert.

Tiefpaß-Bandsperre-Transformation

In ahnlicher Weise wie beim Bandpaß ergibt sich fur eine Bandsperre mit θ1 (untereGrenzfrequenz) und θ2 (obere Grenzfrequenz) die Transformation

Hbs(z) = Hlp(z)

∣∣∣∣

z →z2 − 2α

k+1z +1−kk+1

1−kk+1z

2 − 2αk+1z + 1

, (4.60)

mit α =cos

θ1+θ22

cosθ2−θ1

2

und k = tan θ2−θ12 tan θc

2 .

Der entsprechende Spezialfall ist hier

Hbs(z) = Hlp(z2) (4.61)

fur θ1 + θ2 = π und θc = π − θ2 + θ1.

Page 131: MATLABr-Programmierung · 1Eingaben in MATLABr sollten keine deutschen Sonderzeichen wie ¨a, ¨o, ¨u,ß enthalten, wenn die Programme auch im nichtdeutschsprachigen Raum eingesetzt

4.2 IIR-Filterentwurf 123

Aufgabe 4.19

Die Transformation z → ±z2 kann z.B. dadurch verallgemeinert werden,daß z in H(z) durch ±zL (L ganzzahlig) ersetzt wird. Uberlegen Sie sichmit den Eigenschaften der Fouriertransformation den Einfluß einer sol-chen Transformation, d.h. ejθ → ejθL auf den FrequenzgangH(ejθ). Ent-werfen Sie danach ein schmalbandiges Bandpaßfilter (oder Tiefpaßfilter)und kontrollieren Sie Ihre theoretischen Resultate mit MATLABr.

4.2.4 Least-Squares-Approximation von Frequenzgangen

Ein Least-Squares-Verfahren fur den IIR-Filterentwurf, das gegebene Impuls-antworten durch IIR-Systeme approximiert, ist auf Seite 112 angegeben. In diesemAbschnitt soll die Approximation den Betragsfrequenzgang betreffen. Wie beimFIR-Filterentwurf bereits erwahnt, eignen sich Least-Squares-Verfahren nur be-dingt zur Approximation unstetiger Dampfungsverlaufe. Man wird sie daher furdie Approximation nichtstandardmaßiger Verlaufe einsetzen, wie z.B. fur gemesse-ne Frequenzgange. Im Gegensatz zu FIR-Filtern fuhrt das Least-Squares-Verfahrenbei IIR-Filtern auf ein nichtlineares Problem, da die Ubertragungsfunktion ei-nes IIR-Filters als rationale Funktion (siehe Gl. 2.28) vorliegt und die Filterkoeffi-zienten somit nicht als Losung eines linearen Gleichungssystems gefunden werdenkonnen. Bei IIR-Filtern muß man daher i.a. auf numerische Optimierungsmetho-den fur die Least-Squares-Approximation zuruckgreifen.

Ein Verfahren, das numerische Optimierungsalgorithmen vermeidet und trotz-dem gute Ergebnisse liefert, soll in seinen Grundzugen erklart werden. Die Idee istdie Uberfuhrung der Approximationsaufgabe vom Frequenz- in den Zeitbereich,d.h. man findet die Filterkoeffizienten anhand einer geeigneten Zeitfunktion, derenFouriertransformation dem gewunschten Betragsverlauf entspricht. Das Problemdabei ist, daß nur der Betrag des Frequenzgangs vorliegt, dessen Rucktransforma-tion ja eine akausale Impulsantwort ergibt (Nullphasenfilter). Man muß daher eineandere Zeitfunktion suchen, deren Fouriertransformation eine Nullphase besitzt.Die Losung ist die Autokorrelationsfunktion (AKF), aus der mit einem Least-Squares-Verfahren, ahnlich wie auf Seite 112, die Filterkoeffizienten berechnet wer-den. Allerdings ergeben sich dabei prinzipielle Probleme bei der Bestimmung derKoeffizienten des Zahlerpolynoms von H(z).

Zur Berechnung des Zusammenhangs zwischen der AKF und den Koeffizienteneines IIR-Filters geht man von der Rekursion Gl. 2.25 aus und verwendet stati-onares, weißes Rauschen als Eingangssignal. Damit ergibt sich fur die AKF des

Page 132: MATLABr-Programmierung · 1Eingaben in MATLABr sollten keine deutschen Sonderzeichen wie ¨a, ¨o, ¨u,ß enthalten, wenn die Programme auch im nichtdeutschsprachigen Raum eingesetzt

124 4 Entwurf digitaler Filter

Ausgangssignals

ryy(m) = Ey(n)y(n−m)

= −M∑

k=1

akEy(n− k)y(n−m)+N∑

k=0

bkEx(n− k)y(n−m)(4.62)

oder

ryy(m) = −M∑

k=1

akryy(m− k) +N∑

k=0

bkrxy(m− k) , (4.63)

d.h. auch fur die AKF ergibt sich eine Rekursion. Die Kreuzkorrelationsfunktionrxy(m) hangt mit der Impulsantwort h(n) in folgender Weise zusammen:

rxy(m) = Ex(n)y(n−m) =∞∑

k=0

h(k)Ex(n)x(n−m− k)︸ ︷︷ ︸

rxx(m+ k)

, (4.64)

wobei die Faltungsbeziehung zwischen Eingangs- und Ausgangssignal des Systemsverwendet wurde. Fur weißes Rauschen mit rxx(m) = σ2

xδ(m) folgt aus Gl. 4.64

rxy(m) =

0 m > 0

σ2xh(−m) m ≤ 0

. (4.65)

Wird schließlich Gl. 4.65 in Gl. 4.63 eingesetzt, so ergibt sich

ryy(m) =

−M∑

k=1

akryy(m− k) + σ2x

N∑

k=m

bkh(k −m) 0 ≤ m ≤ N

−M∑

k=1

akryy(m− k) m > N

. (4.66)

Die Koeffizienten ak konnen demnach mit m > N wie auf Seite 112 durch Losungeines linearen Gleichungssystems bestimmt werden. Leider ist die Berechnung derKoeffizienten bk des Zahlerpolynoms der Ubertragungsfunktion wegen der unbe-kannten Impulsantwort h(n) in Gl. 4.66 jetzt nicht mehr einfach moglich. Auf dieverschiedenen Ansatze zur Umgehung dieses Hindernisses wird hier nicht einge-gangen (siehe dazu z.B. [11]).

Eine der Methoden zur Losung des Problems ist in der MATLABr-Funktion[b,a] = yulewalk(N,f,m) realisiert, mit der Filterordnung N und den Filterspezi-fikationen f (Frequenzpunkte) und m (Betragswerte des Frequenzgangs). Zwischenden gegebenen Frequenzpunkten wird interpoliert, um ein moglichst feines Fre-quenzraster fur die inverse Fouriertransformation zu erhalten. Das Ergebnis liegtin Form der Koeffizienten fur das Zahlerpolynom (Vektor b) und das Nennerpo-lynom (Vektor a) der Ubertragungsfunktion vor. Ein Beispiel fur den Entwurf istein rekursiver Differenzierer 9. Ordnung:

Page 133: MATLABr-Programmierung · 1Eingaben in MATLABr sollten keine deutschen Sonderzeichen wie ¨a, ¨o, ¨u,ß enthalten, wenn die Programme auch im nichtdeutschsprachigen Raum eingesetzt

4.2 IIR-Filterentwurf 125

[b,a] = yulewalk(9,[0 1],[0 1]);

h = filter(b,a,[1 zeros(1,127)]);

freqz(b,a);

zplane(b,a);

Ein weiteres Beispiel ist ein Tiefpaßfilter mit einem Betrag des Frequenzgangs,der dem Verlauf eines Hamming-Fensters entspricht. Ein solches Filter hat einesanfte Bandbegrenzung, so daß die Sprungantwort nur ein minimales Uberschwin-gen aufweist:

m = hamming(40);

m = m(21:40);

f = linspace(0,1,20);

[b,a] = yulewalk(10,f(:),m(:));

h = filter(b,a,[1 zeros(1,255)]); % impulse response

stem(h(1:30));

freqz(b,a);

zplane(b,a);

step = filter(b,a,ones(1,256)); % step response

stem(step(1:30));

Aufgabe 4.20

Es soll ein IIR-Filter entworfen werden, dessen Dampfungsverlauf demFrequenzgang der mittleren Horschwelle eines gesunden menschlichenGehors entspricht. Eine Naherungsformel fur diesen Verlauf ist bereitsauf Seite 91 in Aufgabe 4.4.5 angegeben. Bestimmen Sie mit yulewalk()ein IIR-Filter, das den Frequenzverlauf der Horschwelle nachbildet. Ent-werfen Sie dann das inverse Filter zur Kompensation dieses Frequenz-gangs und testen Sie Ihren Entwurf, indem Sie beide Filter in Ketteschalten. Vergleichen Sie das Ergebnis mit jenem des FIR-Filters alsLosung von Aufgabe 4.4.5.

Page 134: MATLABr-Programmierung · 1Eingaben in MATLABr sollten keine deutschen Sonderzeichen wie ¨a, ¨o, ¨u,ß enthalten, wenn die Programme auch im nichtdeutschsprachigen Raum eingesetzt

126 4 Entwurf digitaler Filter

Page 135: MATLABr-Programmierung · 1Eingaben in MATLABr sollten keine deutschen Sonderzeichen wie ¨a, ¨o, ¨u,ß enthalten, wenn die Programme auch im nichtdeutschsprachigen Raum eingesetzt

5

Multiratenfilterbanke undWavelets

Die Verarbeitung von Signalen in Teilbandern mit Hilfe von Filterbanken wirdseit langem vor allem im Bereich der Audiosignalverarbeitung eingesetzt [20, 21].Mit den Methoden der digitalen Signalverarbeitung konnen heute sehr komplexeFilterbanksysteme realisiert werden. Typische Anwendungen sind die Codierungbzw. Kompression von Audiosignalen (z.B. MPEG-Verfahren) und die Entstorungmassiv verrauschter Sprachsignale. Die Signalverarbeitung mit Filterbanken hatneben einer effizienten Implementierung auch den Vorteil, daß Wahrnehmungsei-genschaften des menschlichen Gehors relativ einfach berucksichtigt werden konnen.

Je nach Art der Aufteilung in Teilbander wird zwischen aquidistanten undnichtaquidistanten Filterbanken unterschieden. Eine nichtaquidistante Frequenz-bandunterteilung findet Anwendung bei der mehrfachauflosenden Spektralanalyseund -synthese und steht in Zusammenhang mit der Wavelet-Transformation, die imAbschnitt 5.3 behandelt wird. Im Gegensatz zu aquidistanten Filterbanken habendie einzelnen Bandpaßkanale einer nichtaquidistanten Filterbank eine unterschied-liche (von der Mittenfrequenz abhangige) Bandbreite. Nimmt beispielsweise dieBandbreite mit steigender Mittenfrequenz zu, dann werden niederfrequente Signal-komponenten sehr gut im Spektralbereich aufgelost, die hoherfrequenten Anteilejedoch weniger genau im Frequenzbereich dargestellt. Allerdings bewirkt die große-re Bandbreite am oberen Ende der betrachteten Frequenzskala eine verbessertezeitliche Lokalisation von Kurzzeitvorgangen, die ja ein breites Frequenzspektrumaufweisen. Die Kombination einer guten Frequenzauflosung fur tiefe Frequenzenmit einer guten Zeitauflosung bei hohen Frequenzen kommt z.B. dem Verhaltendes menschlichen Gehors sehr nahe.

Page 136: MATLABr-Programmierung · 1Eingaben in MATLABr sollten keine deutschen Sonderzeichen wie ¨a, ¨o, ¨u,ß enthalten, wenn die Programme auch im nichtdeutschsprachigen Raum eingesetzt

128 5 Multiratenfilterbanke und Wavelets

Das Blockdiagramm eines nichtaquidistanten Filterbanksystems mit Mehrfach-taktverarbeitung ist in Abb. 5.1 dargestellt. Auf der Analyseseite wird das Ein-

x(n) y(n)

H1

HN−1Teilbandverarbeitung

H2

HN

↓M1

↓MN

↑M1 G1

G2

GN−1

GN

Analyseseite Syntheseseite

↑M2

↑MN

↓M2

↓MN−1

↑MN−1

Abbildung 5.1: Blockschaltbild eines N -Kanal-Multiratenfilterbanksystems

gangssignal x(n) in N Teilbander aufgespalten. Die Teilbandsignale werden unter-abgetastet (mit unterschiedlichen FaktorenMi in den einzelnen Kanalen). Danacherfolgt die Verarbeitung der Teilbandsignale (z.B. Codierung oder Amplituden-modifikation bei der Sprachsignalentstorung). Auf der Syntheseseite werden dieTeilbandsignale nach einer Interpolation zum Ausgangssignal y(n) zusammenge-setzt. Ein Spezialfall dieser Anordnung ist die aquidistante Filterbank, bei deralle Kanale die gleiche Bandbreite und den gleichen Abtastfaktor Mi = M, i =1, 2, . . . , N besitzen. Im Fall M = N spricht man von kritisch abgetastetenFilterbanken, d.h. die Anzahl der zu verarbeiteten Abtastwerte pro Zeiteinheitbleibt erhalten. Auch bei nichtaquidistanten Filterbanken ist eine kritische Abta-stung moglich, allerdings kann nicht fur jeden Bandbreitenverlauf und fur reali-sierbare Kanalfilter Hi, Gi ein Satz von Abtastfaktoren Mi gefunden werden.

Beim Entwurf von Filterbanken besteht nun die Aufgabe, die Filtercharakte-ristik der einzelnen Teilfilter so zu wahlen, daß bei fehlender Verarbeitung derTeilbandsignale (also bei direkter Zusammenschaltung von Analyse- und Synthe-seseite) eine perfekte Rekonstruktion des Eingangssignals gewahrleistet ist.Dabei wird von einer Signalverzogerung durch die Laufzeit der Filter abgesehen.Diese Aufgabenstellung ist schon bei fehlender Taktratenumsetzung nicht trivialund erfordert spezielle Frequenzgange der Teilfilter. Bei Taktratenumsetzung amAusgang der Analyseseite bzw. am Eingang der Syntheseseite tritt zusatzlich Ali-asing auf, das durch die Uberlappung der Teilbander (endliche Flankensteilheit

Page 137: MATLABr-Programmierung · 1Eingaben in MATLABr sollten keine deutschen Sonderzeichen wie ¨a, ¨o, ¨u,ß enthalten, wenn die Programme auch im nichtdeutschsprachigen Raum eingesetzt

5.1 Cosinusmodulierte Filterbanke 129

der Filter) entsteht. Trotzdem gibt es Entwurfsverfahren, die dieses Aliasing kom-pensieren, so daß auch bei Taktratenumsetzung eine exakte Rekonstruktion desFilterbankeingangssignals moglich ist (siehe [22] fur eine umfassende Darstellung).

Bei Filterbanken mit großer Sperrdampfung der Bandpaßfilter kann der Ent-wurf dadurch erheblich vereinfacht werden, daß nur das Aliasing bei benachbar-ten Filterbankkanalen kompensiert wird. In diesem Fall weist die Filterbank einenahezu perfekte Rekonstruktion auf und man spricht von NPR-Filterbanken.Dieser fur die Audiosignalverarbeitung wichtige Fall wird in den nachsten Ab-schnitten behandelt.

5.1 Cosinusmodulierte Filterbanke

Bei vielen Filterbankanwendungen konnen kritisch abgetastete, cosinusformig mo-dulierte NPR-Filterbanke eingesetzt werden, bei denen die N Teilbandfilter cosi-nusmodulierte Versionen eines Tiefpaßprototypfilters sind. Dadurch reduziert sichder Entwurf dieser Filterbanke auf das Design des Prototypfilters. Gleichzei-tig wird die Anzahl der Filterkoeffizienten drastisch verringert, so daß bei denverwendeten Optimierungsverfahren wesentlich weniger Freiheitsgrade auftreten.Beispielsweise mussen bei einer 80-Kanal Filterbank mit FIR-Filtern der LangeL = 800 im Fall der cosinusformig modulierten Filterbank nur 800 statt 64000Filterkoeffizienten mit dem Entwurfsverfahren bestimmt werden. Außerdem gibtes effiziente Implementierungsmoglichkeiten, bei denen nur die Impulsantwort desPrototypfilters gespeichert werden muß [23, 24, 25].

Im folgenden Abschnitt wird zunachst der Entwurf aquidistanter NPR-Filter-banke behandelt und ein Entwurfsverfahren fur diesen Fall vorgestellt. Im An-schluß daran erfolgt die Erweiterung auf nichtaquidistante Filterbanke. Alle Fil-terbanke haben FIR-Filter mit linearer Phase in jedem Teilband, so daß ein Ent-wurf ohne Verwendung von Optimierungsprogrammen moglich ist. Eine Alterna-tive dazu sind Filterbanke mit Teilfiltern nichtlinearer Phase, die einige Imple-mentierungsvorteile haben [22], jedoch fur den Entwurf Optimierungsprogrammebenotigen.

5.1.1 Entwurf aquidistanter Filterbanke

In diesem Fall haben alle Analyse- und Synthesefilter der Filterbank die gleicheBandbreite. Dadurch konnen diese Filter einfach durch Modulation eines Tiefpaß-filters erzeugt werden. Mit den Koeffizienten h(n) des Prototypfilters ergeben sichdamit die Koeffizienten der Analysefilter (Abb. 5.1 mit Mi = N, i = 1, 2, . . . , N)zu

hi(n) = 2√Nh(n) cos

2N(2i− 1)

(

n− L− 1 +N

2

)]

(5.1)

Page 138: MATLABr-Programmierung · 1Eingaben in MATLABr sollten keine deutschen Sonderzeichen wie ¨a, ¨o, ¨u,ß enthalten, wenn die Programme auch im nichtdeutschsprachigen Raum eingesetzt

130 5 Multiratenfilterbanke und Wavelets

bzw. jene der Syntheseseite zu

gi(n) = 2√Nh(n) cos

2N(2i− 1)

(

n− L− 1−N2

)]

, (5.2)

mit i = 1, 2, . . . , N und n = 0, 1, . . . , L− 1.

Um das Entwurfsverfahren zu erlautern, wird vom Amplitudenfrequenzgang(genaugenommen von der Nullphasenkomponente) des linearphasigen Proto-typfilters ausgegangen (siehe dazu auch die FIR-Filtergleichungen fur Fall I undII auf Seite 85):

H(h, θ) =

L2 −1∑

n=0

2h(n) cos[(n− L−1

2

)θ]

(5.3)

fur gerade FIR-Filterlange L bzw.

H(h, θ) = h(L−12

)+

L−12 −1∑

n=0

2h(n) cos[(n− L−1

2

)θ]

(5.4)

fur L ungerade. Dabei ist θ = 2πf/FA die Frequenzvariable normiert auf dieAbtastfrequenz FA. Der Vektor h = (h(0), h(1), . . . , h(⌊L−1

2 ⌋))T stellt die ersteHalfte der symmetrischen Impulsantwort des FIR-Filters dar. Dieser Filterkoeffi-zientenvektor muß mit dem Entwurfsverfahren bestimmt werden, wobei zum Er-reichen einer nahezu perfekten Rekonstruktion der Filterbank einerseits eine hoheSperrdampfung im Frequenzbereich θs < θ ≤ π, mit π

2N < θs ≤ πN notwendig

ist und andererseits ein spezieller Verlauf von H(h, θ) im Durchlaß- und Uber-gangsbereich eingehalten werden muß. Dieser spezielle Verlauf ergibt sich aus derBedingung

T (h, θ) = [H(h, θ)]2 +[H(h, θ − π

N

)]2= 1, (5.5)

mit θ ∈ [0, π2N ] (siehe z.B. [23]). Die gegebenen Anforderungen an das Prototyp-

filter konnen als Optimierungsaufgabe formuliert werden, deren Losung den opti-malen Koeffizientenvektor h ergibt. Eines von vielen moglichen Fehlerkriterien istgegeben durch

E(h) =∫ π/2N

0

[T (h, θ)− 1]2dθ + α

∫ π

θs

[H(h, θ)]2dθ. (5.6)

Der erste Ausdruck in Gl. 5.6 berucksichtigt den Fehler durch Abweichung von derBedingung Gl. 5.5. Das rechte Integral in Gl. 5.6 ist die Sperrbereichsenergie, mitderen Minimierung eine hohe Sperrdampfung angestrebt wird. Der Gewichtungs-faktor α legt den Einfluß beider Fehlerterme fest. Der ubliche Losungsweg zurSuche eines optimalen Vektors h ist die Verwendung nichtlinearer Optimierungs-methoden zur Minimierung von Gl. 5.6. Dieser direkte Ansatz ist jedoch in der

Page 139: MATLABr-Programmierung · 1Eingaben in MATLABr sollten keine deutschen Sonderzeichen wie ¨a, ¨o, ¨u,ß enthalten, wenn die Programme auch im nichtdeutschsprachigen Raum eingesetzt

5.1 Cosinusmodulierte Filterbanke 131

Regel rechenzeitintensiv und bei großen Filterlangen (L > 500) sehr empfindlichbezuglich der Wahl einer Startlosung. Daher wird hier ein anderer Ansatz verwen-det, der ursprunglich nur bei Zweikanalfilterbanken angewendet wurde [26, 27],aber sehr einfach auf Mehrkanalfilterbanke erweitert werden kann [28, 29]. DasVerfahren, das hier nur kurz dargestellt werden soll, geht von folgender Aufspal-tung fur das Quadrat der Nullphasenkomponente aus:

[H(hk, θ)]2 ≈ H(hk−1, θ)H(hk, θ), (5.7)

wobei k = 0, 1, 2, 3, . . . ein Iterationsindex ist, d.h. die optimale Losung fur h wirditerativ berechnet. Im Fall der Konvergenz des iterativen Algorithmus strebt hk−1

gegen hk und Gl. 5.7 wird immer besser erfullt. Wird nun das Fehlermaß vonGl. 5.6 bezuglich hk minimiert (bei festem hk−1), dann kann man zeigen, daßder optimale Koeffizientenvektor durch Losung eines linearen Gleichungssystemspro Iterationsschritt gefunden werden kann. Es werden daher keine Routinen zurnichtlinearen Optimierung benotigt. In Tabelle 5.1 ist der iterative Algorithmuszur Berechnung des optimalen Koeffizientenvektors des Prototypfilters zusammen-gefaßt.

Tabelle 5.1: Algorithmus zur Berechnung des Koeffizientenvektors h.

Berechnung der Matrizen U1, U2, QWahl eines Startvektors h−1

Iteration fur k = 0, 1, 2, . . . , kmax mit1

U = diag(U1hk−1)U1 + diag(U2hk−1)U2

g = (UTU+ αQ)−1UT1

hk = (1− τ )hk−1 + τ g

E = ||hk − g||2 / ||hk||2

Fertig, wenn E < 10−5, Ergebnis ist h = hkmax.

Die benotigten Matrizen U1, U2 ergeben sich sehr einfach aus der Darstellungvon Gl. 5.3 (Gl. 5.4) als inneres Vektorprodukt H(h, θ) = cT (θ)h:

U1 =[c(θ1) c(θ2) · · · c(θNf

)]T

(5.8)

U2 =[c(θ1 − π

N ) c(θ2 − πN ) · · · c(θNf

− πN )]T, (5.9)

1diag(·) ist eine Diagonalmatrix, 1 ein Nf × 1 Vector mit Einselementen, || · ||2 ist die l2Vektornorm, τ = 0, 5 . . . 0, 8.

Page 140: MATLABr-Programmierung · 1Eingaben in MATLABr sollten keine deutschen Sonderzeichen wie ¨a, ¨o, ¨u,ß enthalten, wenn die Programme auch im nichtdeutschsprachigen Raum eingesetzt

132 5 Multiratenfilterbanke und Wavelets

mit einer Auswahl an Frequenzpunkten θi ∈ [0, π2N ], i = 1, 2, . . . , Nf und

c(θ) =

2(cos L−1

2 θ, cos(L−12 − 1

)θ, . . . , cos 1

2θ)T

L gerade

2(cos L−1

2 θ, cos(L−12 − 1

)θ, . . . , cos θ, 1

2

)TL ungerade

. (5.10)

Die Elemente qik der symmetrischen Matrix Q in Tabelle 5.1 findet man durchanalytische Auswertung des zweiten Integrals in Gl. 5.6:

qik = si(i− k) + si(L+ 1− i− k) (5.11)

mit i, k = 1, 2, . . . , ⌈L−12 ⌉ und

si(n) =

−2sin θsnn

n = ±1,±2, . . .2(π − θs) n = 0

. (5.12)

Im Fall einer ungeraden Filterlange L ergibt sich fur Q eine zusatzliche Zeile undSpalte mit den Elementen

qi,L+12

=

si(L+12 − i

)i 6= L+1

2

π − θs i = L+12

. (5.13)

Die Erfahrungen mit diesem Verfahren zeigen, daß fur Filterbanke mit N = 2bis N = 128 Kanalen und Filterlangen bis zu L = 1536 etwa 15 Iterationsschrittezum Erreichen der optimalen Losung benotigt werden. In allen Fallen konnten bis-her keine Probleme mit lokalen Minima, wie sie bei Verwendung von nichtlinearenOptimierungsroutinen auftreten, beobachtet werden. Außerdem ist die Konvergenzdes iterativen Verfahrens von Tabelle 5.1 immer schneller als jene bei nichtlinearerOptimierung.

Die folgende MATLABr-Funktion kann zum Entwurf aquidistanter, cosinus-modulierter Filterbanke mit dem iterativen Algorithmus nach Tabelle 5.1 verwen-det werden. Das Programm befindet sich auch auf der Internetseite des Autors.

function [h,g] = unicmfb(N,L,df,alpha,Lf)

% function [h,g] = unicmfb(N,L,delta_f,alpha,Nfreq)

%

% design of critically sampled uniform N-channel cosine-modulated

% NPR filter banks (requires MATLAB function fir1.m)

%

% N number of filter bank channels

% L prototype FIR filter length

% delta_f transition band width normalized to Fsampl/2 (typ. <= 1/2N)

% alpha weighting factor for error criterion (typ. 1 - 1e8)

Page 141: MATLABr-Programmierung · 1Eingaben in MATLABr sollten keine deutschen Sonderzeichen wie ¨a, ¨o, ¨u,ß enthalten, wenn die Programme auch im nichtdeutschsprachigen Raum eingesetzt

5.1 Cosinusmodulierte Filterbanke 133

% (use large values to get a high stop band attenuation)

% Nfreq number of frequency points in pass band of prototype filter

% (Nfreq = L typ.)

% h [h1 h2 ...hN] matrix of analysis filter impulse responses

% g [g1 g2 ...gN] matrix of synthesis filter impulse responses

%

% G.Doblinger, TU-Vienna, Austria, 1998

if nargin == 0

help unicmfb

return

end

fc = 1/(2*N);

if df < 0 | df > fc

error(’delta_f must be in (0,1/2N)’);

end

% compute starting solution using Kaiser-Bessel window design

as = 7.95 + 7.18*L*df; % estimated stop band attenuation in dB

if as < 21 % determine parameter beta

beta = 0;

elseif as < 50

beta = 0.58417*(as-20.96)^0.4 + 0.07886*(as-20.96);

else

beta = 0.1102*(as-8.7);

end

hpt = fir1(L-1,fc,kaiser(L,beta));

fs = fc + df;

hpt = sqrt(N)*hpt(:)/sum(hpt);

% find optimum prototype low pass filter

Lh = floor((L+1)/2);

N0 = (L-1)/2;

h0 = hpt(1:Lh); % first half of symmetric impulse resp.

theta = linspace(0,pi*fc,Lf)’; % pass band frequencies

n = [0:Lh-1] - N0;

U1 = 2*cos((theta)*n);

U2 = 2*cos((theta-pi/N)*n);

if rem(L,2) % odd filter order

U1(:,Lh) = 0.5*U1(:,Lh);

U2(:,Lh) = 0.5*U2(:,Lh);

end

alpha = abs(alpha);

Page 142: MATLABr-Programmierung · 1Eingaben in MATLABr sollten keine deutschen Sonderzeichen wie ¨a, ¨o, ¨u,ß enthalten, wenn die Programme auch im nichtdeutschsprachigen Raum eingesetzt

134 5 Multiratenfilterbanke und Wavelets

% compute matrix Q for stop band energy Es = h0’*Q*h0 of prototype filter

Lh1 = ceil((L-1)/2);

i = [1:Lh1]’;

k = i(:,ones(1,Lh1));

ik = k - k’; % matrix of indices i-k

fspi = fs*pi;

Q = -2*sin(ik*fspi)./(ik+eps);

ik = L+1-k-k’; % matrix of indices L+1-i-k

Q = Q - 2*sin(ik*fspi)./ik;

Q = Q + 2*(pi-fspi)*eye(Lh1); % modify diagonal elements

if rem(L,2) % odd filter length

k = [Lh1:-1:1];

q = -2*sin(k*fspi)./k;

Q = [[Q q’];[q pi-fspi]];

end

Niter = 30; % maximum number of iterations

epsil = 1e-5; % error limit to terminate iteration

tau = 0.7; % forgetting factor

tau1 = 1-tau;

I1 = ones(1,Lh);

for k = 1:Niter

H1 = U1*h0;

H2 = U2*h0;

U = H1(:,I1).*U1 + H2(:,I1).*U2; % matrix for pass band energy

g0 = (U’*U + alpha*Q) \ sum(U)’; % find synthesis low pass filter

h0 = tau1*h0 + tau*g0; % impulse response update

err = norm(h0-g0)/norm(h0); % impulse response error

disp([’Iteration ’, int2str(k), ’, Error = ’, num2str(err)]);

if err < epsil, break, end

end

% form symmetric prototype low pass filter impulse response

if rem(L,2)

Lh1 = Lh-1;

else

Lh1 = Lh;

end

hpt = sqrt(N)*[h0 ; h0(Lh1:-1:1)];

% compute modulation matrix (for channel impulse responses)

Page 143: MATLABr-Programmierung · 1Eingaben in MATLABr sollten keine deutschen Sonderzeichen wie ¨a, ¨o, ¨u,ß enthalten, wenn die Programme auch im nichtdeutschsprachigen Raum eingesetzt

5.1 Cosinusmodulierte Filterbanke 135

n = [0:L-1]’-N/2-N0;

i = 2*[1:N]-1;

I = n*i;

Ma = 2*cos(pi*fc*I);

n = n + N;

I = n*i;

Ms = 2*cos(pi*fc*I);

hlp = hpt * ones(1,N);

h = hlp .* Ma; % analysis filters

g = hlp .* Ms; % synthesis filters

Am Beginn dieser Funktion wird mit der Fenstermethode (siehe Abschnitt4.1.3) eine Startlosung fur das Referenztiefpaßfilter generiert. Durch die nachfol-gende Iteration wird dieses Filter so modifiziert, daß die NPR-Bedingungen Gl. 5.5und Gl. 5.6 mit der gewunschten Genauigkeit erfullt werden. Zum Schluß werdendurch Modulation die Analyse- und Synthesefilterimpulsantworten erzeugt.

Ein Entwurfsbeispiel einer 8-Kanalfilterbank ist in Abb. 5.2 dargestellt undkann mit [h,g] = unicmfb(8,256,1/32,1e5,256) erzeugt werden. Der Rekon-struktionsfehler (Welligkeit der Gesamtubertragungsfunktion in dB) ist im Bereich±10−3 und kann daher fur praktische Anwendungen vernachlassigt werden.

0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1−150

−100

−50

0

f

|Hi(f

)|

(d

B)

Analysefilterübertragungsfunktionen, N = 8, L = 256

0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1−2

−1

0

1

2x 10

−3

f

|H(f

)|

(d

B)

Gesamtübertragungsfunktion der Analyse/Synthesefilterbank

Abbildung 5.2: Beispiel einer aquidistanten 8-Kanal-Multiratenfilterbank

Page 144: MATLABr-Programmierung · 1Eingaben in MATLABr sollten keine deutschen Sonderzeichen wie ¨a, ¨o, ¨u,ß enthalten, wenn die Programme auch im nichtdeutschsprachigen Raum eingesetzt

136 5 Multiratenfilterbanke und Wavelets

Aufgabe 5.1

Es ist mit [h,g] = unicmfb(8,256,1/32,1e5,256) die in Abb. 5.2 ge-zeigte Filterbank zu entwerfen. Schreiben Sie eine MATLABr-Funktion[y,Y] = unifib(h,g,x), die mit dem Entwurfsergebnis die komplette,kritisch abgetastete Filterbank nach Abb. 5.1 fur verschiedene Eingangs-signale berechnet. Das Ausgangssignal wird im Vektor y gespeichert. DieMatrix Y enthalt die Teilbandsignale als Spaltenvektoren. Als Eingangs-signale verwenden Sie zeitverschobene Einsimpulse oder ein Zufallssignalx = randn(Nx,1).

5.1.2 Entwurf nichtaquidistanter Filterbanke

Um das Modulationskonzept auch bei nichtaquidistanten NPR-Filterbanken anzu-wenden, approximiert man den gewunschten Bandbreitenverlauf stuckweise durchTeilbander von aquidistanten, modulierten Filterbanken. An den Stoßstellen vonTeilbandern unterschiedlicher Breite werden Ubergangsfilter verwendet. In [30]wird gezeigt, daß durch spezielle Wahl dieser Ubergangsfilter die gesamte Fil-terbank wieder eine nahezu perfekte Rekonstruktion aufweisen kann. Allerdingssind diese nichtaquidistanten Filterbanke vom Aufwand her nicht mehr so effizi-ent wie aquidistante Filterbanke, da mehrere Prototypfilter benotigt werden unddie Modulationsfrequenzen nicht mehr auf einem aquidistanten Raster liegen. Furspezielle Frequenzbandunterteilungen (wie z.B. Bandbreite proportional zur Mit-tenfrequenz der Teilbander) wird man daher die Wavelet-Transformation vorziehen(siehe Abschnitt 5.3).

Um das Entwurfsprinzip fur den Fall nichtaquidistanter Filterbanke zu illu-strieren, ist in Abb. 5.3 eine nichtaquidistante 6-Kanal-Filterbank dargestellt, dieaus Teilen einer aquidistanten 8-Kanal-Filterbank (FIR-Filterlange L1 = 96) undeiner aquidistanten 4-Kanal-Filterbank (L2 = 40) zusammengesetzt ist. Beide Fil-terbankteile werden durch ein unsymmetrisches Ubergangsfilter (Lt = 96) mitein-ander verbunden. Durch die spezielle Form des Ubergangsfilters ist sichergestellt,daß Aliasing-Terme der benachbarten Kanale unterdruckt werden und die gesam-te Filterbank eine nahezu perfekte Rekonstruktion besitzt (unteres Diagramm inAbb. 5.3). Die Unterschiede in der Welligkeit der Gesamtubertragungsfunktionsind durch die verschiedenen FIR-Filterlangen bedingt.

Der Entwurf des Ubergangsfilters, das als modulierte Version eines (komplex-wertigen) Tiefpaßfilters dargestellt wird, erfolgt in ahnlicher Weise wie der Ent-wurf des Prototypfilters von Abschnitt 5.1.1. Es mussen allerdings im Durchlaß-und Ubergangsbereich dieses Filters mehr Bedingungen erfullt werden, da einer-seits die Aliasing-Komponenten benachbarter Kanale unterdruckt werden mussen

Page 145: MATLABr-Programmierung · 1Eingaben in MATLABr sollten keine deutschen Sonderzeichen wie ¨a, ¨o, ¨u,ß enthalten, wenn die Programme auch im nichtdeutschsprachigen Raum eingesetzt

5.1 Cosinusmodulierte Filterbanke 137

0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1−150

−100

−50

0

f

|Hi(f

)|

(d

B)

Analysefilterübertragungsfunktionen, N = 6

0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1−0.01

−0.005

0

0.005

0.01

f

|H(f

)|

(d

B)

Gesamtübertragungsfunktion der Analyse/Synthesefilterbank

Abbildung 5.3: Beispiel einer nichtaquidistanten 6-Kanal-Filterbank mit einemunsymmetrischen Ubergangsfilter

und andererseits unterschiedliche Flankensteilheiten auftreten. In den folgendenBedingungen fur das Verhalten des Ubergangsfilters wird die reellwertige Nullpha-senkomponente Ht(θ) des Tiefpaßprototypfilters entsprechend der Beziehung

Ht(θ) =

L2 −1∑

n=0

2ℜeht(n) cos[(n− L−1

2

)θ]+

L2 −1∑

n=0

2ℑmht(n) sin[(n− L−1

2

)θ]

(5.14)verwendet (mit gerader Filterlange L).

Im Detail muß Ht in den in Abb. 5.4 angegebenen Frequenzintervallen folgen-den Bedingungen genugen:2

fur θ im Intervall I

1

N1H1

(

θ +π

2N1+

π

2N2

)

H1

(

− θ + π

2N1− π

2N2

)

=1

N2Ht(θ)Ht

(

− θ − π

N2

)

1

N1

[

H1

(

θ +π

2N1+

π

2N2

)]2

+1

N2[Ht(θ)]

2 = 1, (5.15)

2Aus Grunden der Ubersichtlichkeit wird die Abhangigkeit von H(·) vom Koeffizientenvektorh weggelassen.

Page 146: MATLABr-Programmierung · 1Eingaben in MATLABr sollten keine deutschen Sonderzeichen wie ¨a, ¨o, ¨u,ß enthalten, wenn die Programme auch im nichtdeutschsprachigen Raum eingesetzt

138 5 Multiratenfilterbanke und Wavelets

H2

(

θ − πN2

)

θ

− π2N2− π

2N1− π

2N2+ π

2N1

− π2N2

0 π2N2

πN2

I IIIII

H1

(

θ + π2N2

+ π2N1

)

Ht(θ)

Abbildung 5.4: Schematische Darstellung des Frequenzgangs des UbergangsfiltersHt zur Verbindung der Nachbarfilter H1 (von N1-Kanal Filterbank) und H2 (vonN2-Kanal Filterbank)

fur θ im Intervall II1

N2[Ht(θ)]

2 = 1, (5.16)

und fur θ im Intervall III

H2

(

θ − π

N2

)

H2(−θ) = Ht(θ)Ht

(

− θ + π

N2

)

1

N2

[

H2

(

θ − π

N2

)]2

+1

N2[Ht(θ)]

2 = 1. (5.17)

Die in Abb. 5.4 gezeigten Filter H1 und H2 sind die Randfilter einer aquidi-stanten N1-Kanal- bzw. N2-Kanal-Filterbank und sind als gegeben zu betrachten(vergleiche dazu das Beispiel in Abb. 5.3). Gleichung 5.15 und Gl. 5.17 mussenzur Unterdruckung von Aliasing erfullt sein [30]. Die restlichen Beziehungen sindaquivalent zu Gl. 5.5.

Ahnlich wie bei aquidistanten NPR-Filterbanken kann mit den vorliegendenBedingungen ein Fehlerkriterium (entsprechend zu Gl. 5.6) formuliert werden, dasmit Hilfe nichtlinearer Optimierungsmethoden bezuglich des Koeffizientenvektorsht minimiert wird [30]. Allerdings konvergieren diese Verfahren wesentlich schlech-ter und sind auch erheblich empfindlicher in Hinblick auf die Wahl der Startlosungals der im folgenden behandelte iterative Algorithmus. Diese Methode benotigt furden Entwurf der Ubergangsfilter bei nichtaquidistanten Filterbanken ebenfalls nurRoutinen zur Losung linearer Gleichungssysteme. Hier soll nur die prinzipielle Vor-gangsweise skizziert werden, die zu einem vollig aquivalenten Algorithmus wie inTabelle 5.1 fuhrt.

Page 147: MATLABr-Programmierung · 1Eingaben in MATLABr sollten keine deutschen Sonderzeichen wie ¨a, ¨o, ¨u,ß enthalten, wenn die Programme auch im nichtdeutschsprachigen Raum eingesetzt

5.1 Cosinusmodulierte Filterbanke 139

Verwendet man eine Vektorschreibweise und die Aufspaltung von Ht entspre-chend Gl. 5.7, dann konnen die funf Gleichungen 5.15 bis 5.17 in ein Fehlermaßinkludiert werden, das folgende Form hat:

E(ht) =5∑

i=1

αi(ai −Biht)T (ai −Biht) + αhT

t Qtht. (5.18)

Der letzte Term in Gl. 5.18 ist die Sperrbereichsenergie des Ubergangsfilters Ht.Die Vektoren ai und Matrizen Bi lassen sich relativ leicht an Hand von Gl. 5.15– Gl. 5.17 ableiten. Dabei ist zu berucksichtigen, daß Ht(θ) entsprechend Gl. 5.14dargestellt werden kann und der gesuchte Koeffizientenvektor die Form

ht =(ℜeht(0), . . . ,ℜeht(L2 − 1),ℑmht(0), . . . ,ℑmht(L2 − 1)

)T(5.19)

hat. Zur Minimierung des Fehlermaßes von Gl. 5.18 wird der Gradient ∂E∂ht

nullgesetzt und daraus der gesuchte Koeffizientenvektor berechnet:

ht =

(5∑

i=1

αiBTi Bi + αQt

)−1 5∑

i=1

αiBTi ai. (5.20)

Abgesehen von den unterschiedlichen Matrizen ergibt sich damit fur den iterativenAlgorithmus eine vollig gleiche Struktur wie in Tabelle 5.1. Die Berechnung desUbergangsfilters (Tiefpaßprototyp) kann mit der folgenden MATLABr-Funktionvorgenommen werden:

function ht = nuftrans(h1,N1,h2,N2,Lt)

% function ht = nuftrans(h1,N1,h2,N2,Lt)

%

% transition filter design (lowpass prototype) for nonuniform filterbanks

%

% h1 prototype filter impulse response at lower frequencies

% N1 spacing of uniform part at lower frequencies

% h2 prototype filter impulse response at higher frequencies

% N2 spacing of uniform part at higher frequencies

% Lt length of transition filter

% ht prototype impulse response of transition filter

% G. Doblinger, Th. Zeitlhofer, TU-Wien, 1996

if nargin == 0

help nuftrans

return

end

Page 148: MATLABr-Programmierung · 1Eingaben in MATLABr sollten keine deutschen Sonderzeichen wie ¨a, ¨o, ¨u,ß enthalten, wenn die Programme auch im nichtdeutschsprachigen Raum eingesetzt

140 5 Multiratenfilterbanke und Wavelets

fc1 = 1/(2*N1);

fc2 = 1/(2*N2);

h1 = h1(:)/sum(h1);

h2 = h2(:)/sum(h2);

L1 = length(h1);

L2 = length(h2);

Lv = [L1,L2,Lt];

evenodd = sum(rem(Lv,2));

if evenodd ~= 0 & evenodd ~= 3

error(’Impulse response lengths must all be even or all be odd’);

end

L = max(Lv); % common length of all filters

Lh = floor((L+1)/2);

N0 = (L-1)/2; % delay of prototype filters

Nz1 = (L-L1)/2; % number of zeros appended at both sides of h1

Nz2 = (L-L2)/2;

Nzt = (L-Lt)/2;

% compute constant vectors and matrices for error vector

Lfp = round(L/2); % no. of passband freq. points

Lfs = L; % no. of stopband freq. points

pifc1 = pi*fc1; % pi/2N1

pifc2 = pi*fc2; % pi/2N2

n = [Nz1:Lh-1] - N0;

theta = pifc1*linspace(0,2,Lfp).’;

C1 = 2*cos(theta*n);

n = [Nz2:Lh-1] - N0;

theta = pifc2*linspace(0,2,Lfp).’;

C2 = 2*cos(theta*n);

n = [Nzt:Lh-1] - N0;

theta = linspace(-pifc2-pifc1,-pifc2+pifc1,Lfp).’;

phi = theta*n;

Ut1 = 2*[cos(phi) sin(phi)];

theta = pifc2*linspace(0,2,Lfp).’;

phi = theta*n;

Ut2 = 2*[cos(phi) sin(phi)];

theta = pi*linspace(2*fc2,2-fc2-fc1,Lfs).’;

phi = theta*n;

Uts = 2*[cos(phi) sin(phi)];

theta = linspace(-pifc2+pifc1,0,Lfp).’;

phi = theta*n;

Utp = 2*[cos(phi) sin(phi)];

L1h = floor((L1+1)/2);

Page 149: MATLABr-Programmierung · 1Eingaben in MATLABr sollten keine deutschen Sonderzeichen wie ¨a, ¨o, ¨u,ß enthalten, wenn die Programme auch im nichtdeutschsprachigen Raum eingesetzt

5.1 Cosinusmodulierte Filterbanke 141

L2h = floor((L2+1)/2);

Lth = floor((Lt+1)/2);

if rem(L,2)

C1(:,L1h) = ones(Lfp,1);

C2(:,L2h) = ones(Lfp,1);

Ut1(:,Lth) = ones(Lfp,1);

Ut2(:,Lth) = ones(Lfp,1);

Uts(:,Lth) = ones(Lfs,1);

Utp(:,Lth) = ones(Lfp,1);

imax = 2*Lth-1;

Ut1 = Ut1(:,1:imax);

Ut2 = Ut2(:,1:imax);

Uts = Uts(:,1:imax);

Utp = Utp(:,1:imax);

end

h1 = h1(1:L1h);

h2 = h2(1:L2h);

G1 = C1*h1;

G2 = C2*h2;

a1 = G1.*G1(Lfp:-1:1);

a2 = G2.*G2(Lfp:-1:1);

a3 = 1 - G1.^2;

a4 = 1 - G2(Lfp:-1:1).^2;

a5 = ones(Lfp,1);

% create starting solution

ht = [zeros((Lt-L2)/2,1);h2];

if rem(L,2)

ht = [ht(1:Lth);zeros(Lth-1,1)];

else

ht = [ht(1:Lth);zeros(Lth,1)];

end

Q = Uts’*Uts; % matrix to compute stop band energy

% find optimum transition filter (low pass prototype filter)

alpha1 = 5;

alpha2 = 5;

alpha3 = 1;

alpha4 = 1;

alpha5 = 1;

alphas = 100;

epsil = 1e-6;

Page 150: MATLABr-Programmierung · 1Eingaben in MATLABr sollten keine deutschen Sonderzeichen wie ¨a, ¨o, ¨u,ß enthalten, wenn die Programme auch im nichtdeutschsprachigen Raum eingesetzt

142 5 Multiratenfilterbanke und Wavelets

tau = 0.7;

tau1 = 1-tau;

Niter = 200;

I = ones(1,length(ht));

for k = 1:Niter

d = Ut1*ht;

B1 = (d(Lfp:-1:1)*I).*Ut1;

B3 = (d*I).*Ut1;

d = Ut2*ht;

B2 = (d(Lfp:-1:1)*I).*Ut2;

B4 = (d*I).*Ut2;

B5 = ((Utp*ht)*I).*Utp;

U = alpha1*B1’*B1+alpha2*B2’*B2+alpha3*B3’*B3+alpha4*B4’*B4+ ...

alpha5*B5’*B5+alphas*Q;

v = alpha1*B1’*a1+alpha2*B2’*a2+alpha3*B3’*a3+alpha4*B4’*a4+ ...

alpha5*B5’*a5;

gt = U \ v; % solution for transition low pass filter

ht = tau1*ht + tau*gt; % impulse response update (real part)

err = norm(ht-gt)/norm(ht); % impulse response error

disp([’Iteration ’, int2str(k), ’, Error = ’, num2str(err)]);

if err < epsil, break, end

end

% form symmetric prototype low pass filter impulse response

j = sqrt(-1);

htr = ht(1:Lth);

if rem(L,2)

hti = ht(Lth+1:2*Lth-1);

ht = sqrt(N2)*([htr ; htr(Lth-1:-1:1)] +j*[hti ; 0 ; -hti(Lth-1:-1:1)]);

else

hti = ht(Lth+1:2*Lth);

ht = sqrt(N2)*([htr ; htr(Lth:-1:1)] +j*[hti ; -hti(Lth:-1:1)]);

end

Aufgabe 5.2

Verwenden Sie die Funktionen unicmfb() und nuftrans() zum De-sign der nichtaquidistanten Filterbank auf Seite 137. Dazu entwerfen Siezunachst zwei aquidistante Filterbanke mit N1 = 8 und N2 = 4 Kanalen.Die FIR-Filterlangen sind L1 = 96 (8-Kanalfilterbank) und L2 = 40 (4-Kanalfilterbank). Dann wird mit nuftrans() der Tiefpaßprototyp desUbergangsfilter (Lt = 96) entworfen. Das Bandpaßubergangsfilter erhal-ten Sie dann durch eine cosinusformige Modulation des Prototyps.

Page 151: MATLABr-Programmierung · 1Eingaben in MATLABr sollten keine deutschen Sonderzeichen wie ¨a, ¨o, ¨u,ß enthalten, wenn die Programme auch im nichtdeutschsprachigen Raum eingesetzt

5.1 Cosinusmodulierte Filterbanke 143

Fur die Audiosignalverarbeitung werden haufig Filterbanke benotigt, derenTeilbandaufteilung dem Frequenzgruppenverhalten des menschlichen Ge-hors entspricht. Ein einfaches Modell fur die Vorverarbeitung akustischer Signaledurch das Ohr ist eine Bandpaßfilterbank deren Filter Bandbreiten entsprechenddem empirisch gefundenen Verlauf

BWc(f) = 25 + 75

(

1 + 1.4

(f

1000

)2)0.69

haben [31] (alle Frequenzen in Hertz). Die Approximation dieses Bandbreitenver-laufes durch eine nichtaquidistante Filterbank kann stufenweise erfolgen, indemTeile von aquidistanten Filterbanken mit unterschiedlicher Kanalanzahl aneinan-dergereiht und mit Ubergangsfilter verbunden werden (siehe Abb. 5.5).

101

102

103

104

102

103

104

N = 22, Partitionierung = 4/80 3/60 4/40 3/30 4/20 3/10 1/5

Mittenfrequenz in Hz

Bandbre

ite in H

z

Abbildung 5.5: Approximation der Frequenzgruppen (Critical Bands) durch einenichtaquidistante 22-Kanal Filterbank (16 kHz Abtastfrequenz)

Da nicht alle Kombinationen von Unterabtastfaktoren Mi moglich sind, istdie Bandaufteilung (Partitionierung) kein triviales Problem. Die Filterbank inAbb. 5.5 besteht aus 4 Kanalen einer aquidistanten 80-Kanal Filterbank, 3 Kanaleeiner 60-Kanal Filterbank, 4 Kanale einer 40-Kanal Filterbank usw. (siehe Parti-tionierungsangabe in Abb. 5.5). Alle Teilfilterbanke sind kritisch abgetastet mitden Faktoren 80, 60, 40, 30, 20, 10 und 5. Entwurfsergebnisse, weitere Beispieleund MATLABr-Programme fur diese Filterbanke konnen von der Internetseitedes Autors bezogen werden.

Page 152: MATLABr-Programmierung · 1Eingaben in MATLABr sollten keine deutschen Sonderzeichen wie ¨a, ¨o, ¨u,ß enthalten, wenn die Programme auch im nichtdeutschsprachigen Raum eingesetzt

144 5 Multiratenfilterbanke und Wavelets

5.2 DFT-Filterbanke

Bei den bisher behandelten Filterbanken wird ein Tiefpaßfilter durch cosinusformi-ge Modulation in die einzelnen Bandpaßlagen transformiert. Verwendet man alsAlternative Exponentialschwingungen zur Modulation, dann kann fur diese kom-plexwertig modulierten Filterbanke die DFT (oder FFT) unmittelbar angewendetwerden. Es ergeben sich sehr effiziente Filterbankrealisierungen, die fur den prak-tischen Einsatz auch sehr einfach dimensioniert werden konnen [20, 32, 21]. DieseFilterbanke bilden die Grundstrukturen der ausgewahlten Anwendungen im Ka-pitel 6. Die Analyseseite dieser DFT-Filterbanke entspricht der Realisierung einerKurzzeit-Fouriertransformation (Short-Time Fourier Transform, STFT), wiesie auch bei der Spektralanalyse (Zeit-Frequenzanalyse) von kurzzeitstationarenSignalen haufig angewendet wird. Bei der STFT wird das Zeitsignal vor der Trans-formation mit einem gleitenden Fenster multipliziert, so daß vom gesamten Signal-verlauf nur ein zeitlich lokalisierter Ausschnitt analysiert wird:

XST

(ejθ,m

)=

∞∑

n=−∞

h(mM − n)x(n)e−jθn. (5.21)

Der ganzzahlige Dezimationsfaktor M legt die Anzahl der Abtastwerte fest, umdie das Zeitfenster h(n) zur nachsten Position weitergeschoben wird. Die Fourier-transformation (oder die FFT) wird daher nur alle M Abtastwerte berechnet. DieFunktionsweise der STFT ist in Abb. 5.6 anschaulich dargestellt. In einem er-sten Schritt werden nach Gl. 5.21 aus dem Eingangssignal laufend uberlappendeBlocke entnommen. Der Grad an Uberlappung bestimmt die Taktratenredukti-on der Analyseseite. Beispielsweise ergibt sich bei einer Uberlappung der Blocke(Lange N) von 50% eine Taktratenreduktion von N/2, da die FFT nur alle N/2Abtastintervalle berechnet wird. Vor der Anwendung der FFT werden die Blockemit Fensterfunktionen h(n) gewichtet.

Die Fensterfunktion ist eine Tiefpaßimpulsantwort, die das spektrale Verhal-ten (Bandbreite, Sperrdampfung) der Kurzeit-Fouriertransformation bestimmt.Die gewichteten Signalblocke werden mit der FFT weiterverarbeitet, wobei dieFFT-Lange gleich oder großer der Blocklange N gewahlt wird. In Abb. 5.6 istdas FFT-Ergebnis in Form des Betrags (dB-Skala) illustriert, wie es bei Kurzzeit-spektren von Audiosignalen ublich ist. Fur allgemeine Anwendungen der STFTwerden jedoch Real- und Imaginarteil (oder als Alternative Betrag und Phase) imFrequenzbereich weiterverarbeitet.

Aus der STFT XST

(ejθ,m

)kann in einem Syntheseschritt das ursprungliche

Signal wiedergewonnen werden. Wird die STFT vor dieser Rekonstruktion aller-dings modifiziert, XST

(ejθ,m

)→ YST

(ejθ,m

), dann fuhrt diese Anderung im

allgemeinen dazu, daß die modifizierte STFT YST

(ejθ,m

)keine gultige STFT ist.

In diesem Fall wird man daher ein Zeitsignal suchen, dessen STFT der modifizier-ten STFT moglichst nahe kommt. Wird ein Least-Squares Kriterium als Fehlermaß

Page 153: MATLABr-Programmierung · 1Eingaben in MATLABr sollten keine deutschen Sonderzeichen wie ¨a, ¨o, ¨u,ß enthalten, wenn die Programme auch im nichtdeutschsprachigen Raum eingesetzt

5.2 DFT-Filterbanke 145

h(n) h(n) h(n) h(n)

FFT FFT FFT FFT

dB

dB

dB

dB

Frequenz

Zeit

Abbildung 5.6: Signalverarbeitung in der Analyseseite der FFT-Filterbank

verwendet, dann ergibt sich nach [33] als beste Approximation das Zeitsignal

y(n) = k(n)∞∑

m=−∞

h(mM − n) yST (n,m), (5.22)

mit

k(n) =1

∑∞m=−∞ h2(mM − n) (5.23)

und der inversen Fouriertransformation (siehe auch Gl. 2.24 auf Seite 39)

yST (n,m) =1

∫ π

−π

YST

(ejθ,m

)ejθndθ. (5.24)

Durch geeignete Dimensionierung der Fensterfunktion h(n) kann k(n) ≡ 1erreicht werden, so daß man aus Gl. 5.22

y(n) =

∞∑

m=−∞

h(mM − n) yST (n,m) (5.25)

Page 154: MATLABr-Programmierung · 1Eingaben in MATLABr sollten keine deutschen Sonderzeichen wie ¨a, ¨o, ¨u,ß enthalten, wenn die Programme auch im nichtdeutschsprachigen Raum eingesetzt

146 5 Multiratenfilterbanke und Wavelets

erhalt. Eine mogliche Wahl der Fensterfunktion ist nach [33]

h(n) =2√M

N(4a2 + 2b2)

(

a+ b cos( π

N(2n+ 1)

))

, n = 0, 1, . . . , N − 1, (5.26)

mit a = 0.54 und b = −0.46.Die Signalverarbeitung in der Syntheseseite der Filterbank ist in Abb. 5.7 sche-

matisiert dargestellt. Real- und Imaginarteil der spektralen Darstellung werden

dB

dB

dB

dB

Frequenz

Zeit

IFFT IFFT IFFT IFFT

g(n) g(n) g(n) g(n)

Abbildung 5.7: Signalverarbeitung in der Syntheseseite der FFT-Filterbank

mit der inversen FFT (IFFT) blockweise in den Zeitbereich zurucktransformiert.Die Blocke werden mit Funktionen g(n) = h(n) gewichtet und uberlappend aufad-diert. Werden keine Modifikationen im Frequenzbereich vorgenommen, also Real-und Imaginarteil der FFT direkt zur IFFT der Syntheseseite weitergeleitet, soerhalt man ein Ausgangssignal, das (abgesehen von einer Signalverzogerung) per-fekt dem Filterbankeingangssignal entspricht. Dabei sind die Abweichungen von

Page 155: MATLABr-Programmierung · 1Eingaben in MATLABr sollten keine deutschen Sonderzeichen wie ¨a, ¨o, ¨u,ß enthalten, wenn die Programme auch im nichtdeutschsprachigen Raum eingesetzt

5.2 DFT-Filterbanke 147

einer exakten Rekonstruktion vernachlassigbar klein, d.h. beispielsweise bei derAudiosignalverarbeitung nicht horbar.

Die Filterbankdarstellung fur die STFT ergibt sich durch Anwendung derDFT (FFT), wie dies in Abb. 5.6 bereits eingezeichnet ist. Fur eine Filterbank mitN Kanalen wird in Gl. 5.21 die Frequenz θ = 2π

N k diskretisiert:

XST (k,m) =∞∑

n=−∞

h(mM − n) x(n) e−j 2πN

nk, k = 0, 1, . . . , N − 1. (5.27)

Durch Umformung von Gl. 5.27 erhalt man das Analysefilterbanksystem

XST (k,m) = e−j 2πN

mMk∞∑

n=−∞

x(n)h(mM − n) ej 2πN

(mM−n)k

︸ ︷︷ ︸

hk(mM−n)

, (5.28)

das in Abb. 5.8 als Blockschaltbild angegeben ist. Im Gegensatz zu den kritischabgetasteten cosinusmodulierten Filterbanken mit M = N , wird hier (wegen dernotwendigen Blockuberlappung) M < N (also etwa M = N/4) gewahlt, d.h. esliegen hier uberabgetastete Filterbanke vor. Durch die Uberabtastung derTeilbander sind diese Filterbanke auch besser fur verschiedene Modifikationen derTeilbandsignale geeignet. Die Teilbandfilter hk(n) in Abb. 5.8 sind frequenzver-schobene Versionen des Prototypfilters h(n), dessen Impulsantwort die STFT-Fensterfunktion in Abb. 5.6 ist.

↓M

1

↓M

x(n)

e−j 2πN

(N−1)mM

h0(n)

hN−1(n)

XST (0,m)

XST (N − 1,m)

Abbildung 5.8: Blockschaltbild der DFT-Analysefilterbank (N Kanale)

Die Syntheseseite der DFT-Filterbank kann in ahnlicher Weise wie die Analy-sefilterbank durch Anwendung der IFFT fur die inverse Fouriertransformation in

Page 156: MATLABr-Programmierung · 1Eingaben in MATLABr sollten keine deutschen Sonderzeichen wie ¨a, ¨o, ¨u,ß enthalten, wenn die Programme auch im nichtdeutschsprachigen Raum eingesetzt

148 5 Multiratenfilterbanke und Wavelets

Gl. 5.24 und Gl. 5.25 abgeleitet werden:

y(n) =∞∑

m=−∞

h(mM − n) 1N

N−1∑

k=0

YST (k,m) ej2πN

nk

=

N−1∑

k=0

∞∑

m=−∞

ej2πN

mMk YST (k,m)1

Nh(mM − n) e−j 2π

N(mM−n)k

︸ ︷︷ ︸

gk(mM−n)

.

(5.29)

1

ej2πN

(N−1)mM

↑M

↑M

g0(n)

gN−1(n)

y(n)

YST (N − 1,m)

YST (0,m)

Abbildung 5.9: Blockschaltbild der DFT-Synthesefilterbank (N Kanale)

Die in Abb. 5.9 gezeigte Struktur des Syntheseseite stellt die Filterbankdar-stellung der inversen STFT dar. Ein Spezialfall der Synthesefilterbank ist dieFilter Bank Overlap Addition Method [20, 32], bei der in der Syntheseseitekeine Filter verwendet werden (gk(n) ≡ 1 k = 0, 1, . . . , N−1). Diese Vereinfachungergibt jedoch keine perfekte Rekonstruktion der Filterbankanalyse/synthese. DieFehler sind allerdings bei Audioanwendungen und fur mindestens vierfache Uber-abtastung (N/M ≥ 4) vernachlassigbar.

Fur die Implementierung der DFT-Filterbanke mit der FFT bildet die anschau-liche Darstellung der Funktionweise in Abb. 5.6 und Abb. 5.7 die Grundlage furdie Programmierung mit MATLABr. Das folgende Programm verwendet eine L-fache Uberabtastung und fur die Analyse- und Syntheseseite die Fensterfunktionvon Gl. 5.26. Es erfolgt keine Modifikation der Teilbandsignale, sondern eine di-rekte Kopplung von Analyse- und Syntheseseite der Filterbank. Dieses Programmbildet die Grundlage fur die Audioanwendungen von Kapitel 6, bei denen dannverschiedene Modifikationen der Teilbandsignale vorgenommen werden.

Page 157: MATLABr-Programmierung · 1Eingaben in MATLABr sollten keine deutschen Sonderzeichen wie ¨a, ¨o, ¨u,ß enthalten, wenn die Programme auch im nichtdeutschsprachigen Raum eingesetzt

5.2 DFT-Filterbanke 149

function y = fft_fib(N,L,x)

%function y = fft_fib(N,L,x)

%

% analysis/synthesis FFT flterbank using the STFT

%

% N number of filter bank channels (window length = FFT length)

% L oversampling factor (L = N/M = 4, typically)

% x input signal vector

% y output signal vector

%

% G. Doblinger, TU-Wien, 1-2001

M = round(N/L); % decimation factor (frame hop size)

if M < 1

error(’L must be less than N’);

end

% create time window function

a = 0.54;

b = -0.46;

h = 2*sqrt(M/N)/(sqrt(4*a^2+2*b^2))*(a + b*cos(pi/N*(2*[0:N-1]’+1)));

Nf = N; % FFT length

Nx = length(x);

x = x(:);

y = zeros(Nx,1);

% filter bank loop

for m = 1:M:Nx-N+1

% analysis filter bank

m1 = m:m+N-1;

X = fft(x(m1).*h,Nf); % cut out a block of length N,

% apply weighting function, and FFT

% synthesis filter bank

y1 = real(ifft(X,Nf)); % perform inverse FFT

% real() avoids tiny imaginary parts

% overlap-add of successive IFFT outputs

y(m1) = y(m1) + h.*y1(1:N);

end

Page 158: MATLABr-Programmierung · 1Eingaben in MATLABr sollten keine deutschen Sonderzeichen wie ¨a, ¨o, ¨u,ß enthalten, wenn die Programme auch im nichtdeutschsprachigen Raum eingesetzt

150 5 Multiratenfilterbanke und Wavelets

Zur Messung des Rekonstruktionsfehlers der Zusammenschaltung vonAnalyse- und Syntheseseite kann als Eingangssignal weißes, gaußsches Rauschenverwendet werden:

N = 512; % number of channels

L = 4; % oversampling factor (decimation M=N/L=128)

Nx = 2048; % input signal length

x = randn(Nx,1);

y = fft_fib(N,L,x);

err = y(N:Nx-N)-x(N:Nx-N); % error of steady-state response

plot(err), max(abs(err)) % show reconstruction error

Als Ergebnis erhalt man Fehlerwerte < 10−14, also perfekte Rekonstruktion imRahmen der MATLABr-Rechengenauigkeit.

Aufgabe 5.3

Verwenden Sie fft_fib() zum Testen der Analyse/Synthese-Filterbankmit Sprachsignalen. Dazu erweitern Sie diese MATLABr-Funktion furBlockverarbeitung, so wie das bei der Blockfilterung auf Seite 43 bereitsrealisiert ist. Achten Sie darauf, daß beim Aneinanderfugen der Blockekeine Stoßstellen auftreten! Die Audiosignale konnen beispielsweise alsWAV-Dateien (oder in binarer Form als RAW-Datei) gespeichert sein.Variieren Sie die Blocklange N und den Dezimationsfaktor M . Fur wel-che Werte M sind Abweichungen des rekonstruierten Signals vom ur-sprunglichen Signal deutlich wahrnehmbar?

Aufgabe 5.4

Es ist ein Equalizer fur Audiosignale zu entwerfen, mit dem Verzer-rungen des Frequenzgangs (z.B. von Lautsprechern) kompensiert wer-den konnen. Eine andere Einsatzmoglichkeit ware die Realisierung vonKlangbewertungsfiltern (oder Klangreglern) (siehe z.B. [34]). Verwen-den Sie Ihr Filterbankprogramm aus dem vorhergehenden Beispiel, indem Sie in der Teilbandverarbeitung (siehe Abb. 5.1) den Betrag derFFT-Komponenten mit einem reellwertigen Faktor 0 ≤ gk ≤ 1, k =1, 2, . . . , N modifizieren. Beachten Sie dabei die Symmetriebedingungender FFT fur reellwertige Signale.

Page 159: MATLABr-Programmierung · 1Eingaben in MATLABr sollten keine deutschen Sonderzeichen wie ¨a, ¨o, ¨u,ß enthalten, wenn die Programme auch im nichtdeutschsprachigen Raum eingesetzt

5.3 Wavelet-Transformation 151

5.3 Wavelet-Transformation

Die Analyse (und Synthese) von Signalen mit der Kurzzeit-Fouriertransformation(STFT) besitzt die gleiche Zeit-Frequenzauflosung fur alle Teilbandsignale. Dieverwendeten Teilbandubertragungsfunktionen der Filterbanke leiten sich namlichdurchModulation der Ubertragungsfunktion des Zeitfensters ab. Viele naturlicheSignale weisen Merkmale auf, die besser mit unterschiedlicher Zeit-Frequenzauf-losung in Teilbandern erfaßt werden. So ist z.B. bei Sprachsignalen eine hoheFrequenzauflosung in den unteren Frequenzbereichen, gekoppelt mit einer besse-ren Zeitauflosung bei hohen Frequenzen wunschenswert. Eine Moglichkeit fur einesolche Analyse und Synthese ermoglichen die bereits behandelten nichtaquidi-stanten Filterbanke. Eine viel allgemeinere und in den meisten Fallen auch mitgeringerem Implementierungsaufwand verbundene Losung bietet die Wavelet-Transformation (WT), die ahnlich wie die STFT auch eine Filterbankinter-pretation zulaßt.

Zur Wavelet-Transformation gibt es zahlreiche Lehrbucher, von denen [22, 35,36, 37] besonders zu empfehlen sind. Die folgende Darstellung dieses attraktivenFachgebiets bietet nur eine kleine Einfuhrung mit dem Schwerpunkt auf effizientenImplementierungsmoglichkeiten mit speziellen Filterbankstrukturen bzw. derenProgrammierung in MATLABr. Fur viele Fragen, wie beispielsweise den Entwurfvon Wavelets, muß auf die zitierte Fachliteratur verwiesen werden. Zum eingehen-den Studium der Wavelet-Transformation kann auch die umfangreiche WAVELET-Toolbox von MATLABr empfohlen werden. Als kostengunstige Alternative dazustehen auf der Internetseite des Autors auch MATLABr-Programme fur zeitdis-krete Realisierungen der Wavelet-Transformation zur Verfugung.

5.3.1 Diskrete Wavelet-Transformation (DWT)

Zum einfacheren Verstandnis werden zunachst zeitkontinuierliche (analoge) Signalebetrachtet [22]. Bei der WT sind die Analysefilterubertragungsfunktionen Hk(jω)der Filterbankdarstellung nicht modulierte (also frequenzverschobene) Versioneneines Prototypfilters H(jω), sondern frequenzskalierte Ubertragungsfunktionen(bzw. zeitskalierte Impulsantworten) der Form

Hk(jω) = ak2H

(jakω

)⇔ hk(t) = a−

k2 h(a−kt

), a > 1, k ∈ Z, (5.30)

die vom Prototypfilter H(jω) (k = 0) abgeleitet werden. Mit dem Normierungs-

faktor a−k2 wird sichergestellt, daß die Signalenergie

∫∞

−∞|hk(t)|2dt unabhangig

vom Teilbandindex k ist.

Um die Auswirkung der Frequenzskalierung zu zeigen, sind in Abb. 5.10 fura = 2 die einzelnen Teilbandfilter der WT-Analysefilterbank vereinfacht darge-stellt. Das Prototypfilter H0 in Abb. 5.10 ist ein breitbandiges Bandpaßfilter mit

Page 160: MATLABr-Programmierung · 1Eingaben in MATLABr sollten keine deutschen Sonderzeichen wie ¨a, ¨o, ¨u,ß enthalten, wenn die Programme auch im nichtdeutschsprachigen Raum eingesetzt

152 5 Multiratenfilterbanke und Wavelets

ω0

4

1

√2

2

ω0

2 ω0 ω1 = 2ω0

H0

H1H2

|Hk(ω)|

ω

Abbildung 5.10: Teilbandfilterubertragungsfunktionen bei der WT-Analyse-filterbank (Prototypfilter H0, Skalierungsfaktor a = 2)

den Grenzfrequenzen ω0 und ω1 = 2ω0. Dadurch ergibt sich fur a = 2 eine dya-dische Frequenzbandunterteilung (Oktavbandanalyse). Die Frequenzskalierunghat demnach eine ahnliche Wirkung wie eine Modulation. Der wesentliche Un-terschied ist die dabei auftretende gleichzeitige Veranderung der Bandbreite unddie Bedeutung des Index k, der jetzt mit steigender Frequenz kleiner wird. ImGegensatz dazu werden bei der STFT-Filterbank die Teilbandfilter von einemschmalbandigen Tiefpaß abgeleitet und haben eine konstante Bandbreite.

Durch die unterschiedlichen Bandbreiten bei der WT konnen die Teilband-signale zu tieferen Frequenzen hin mit entsprechend kleineren Raten abgetastetwerden. Damit erhalt man ein Analysefilterbanksystem, das aus dem analogenEingangssignal x(t) zeitdiskrete Teilbandsignale gewinnt, deren Gesamtheit diediskrete Wavelet-Transformation (DWT) darstellt (siehe Abb. 5.11).

Die DWT ergibt sich daher durch Filterung (Faltung) des analogen Eingangs-signals x(t) mit den Teilbandfiltern hk(t) und Abtastung der Filterausgangssignalean Zeitpunkten n2kT (T ist das Abtastgrundintervall):

XDWT (k, n) =

∫ ∞

−∞

x(τ )hk(n2kT − τ

)dτ

= 2−k2

∫ ∞

−∞

x(τ )h(nT − 2−kτ

)dτ,

(5.31)

mit k, n ∈ Z. Mit dieser Signalzerlegung wird einem analogen, eindimensionalenSignal eine zweidimensionale, diskrete Darstellung zugeordnet, die dann von prak-tischer Bedeutung ist, wenn das Signal nur durch wenige KoeffizientenXDWT (k, n)approximiert werden kann. In diesem Fall kann mit der DWT z.B. eine Datenre-duktion bei der Signalspeicherung oder eine Signalentstorung durchgefuhrt wer-den. Unter relativ allgemeinen Bedingungen kann anhand der DWT das Signal

Page 161: MATLABr-Programmierung · 1Eingaben in MATLABr sollten keine deutschen Sonderzeichen wie ¨a, ¨o, ¨u,ß enthalten, wenn die Programme auch im nichtdeutschsprachigen Raum eingesetzt

5.3 Wavelet-Transformation 153

h2(t)n4T

XDWT (2, n)

h1(t)n2T

XDWT (1, n)

h0(t)nT

XDWT (0, n)x(t)

Abbildung 5.11: DWT-Analysefilterbank (Skalierungsfaktor a = 2, Teilbandfilter-impulsantworten hk(t), Abtastgrundintervall T )

rekonstruiert werden (DWT-Synthese, inverse DWT):

x(t) =∑

k

n

XDWT (k, n)ψkn(t). (5.32)

Im Gegensatz z.B. zur Fourierreihendarstellung, die eine einfache Summe aufweistund daher nur fur spezielle Signale (namlich periodische Signale) ausgelegt ist, istdie zweidimensionale Darstellung viel allgemeiner und fur eine bedeutend großereKlasse von Signalen geeignet. Die Wahl der als Wavelets bezeichneten Basisfunk-tionen ψkn(t) dieser Signaldarstellung ist ein zentrales Thema der Wavelet-Theorieund wird z.B. in [35, 36] ausfuhrlich dargestellt. Eine besondere Bedeutung habendabei orthonormierte Wavelets, die

∫ ∞

−∞

ψ∗kn(τ )ψlm(τ ) dτ = δ(k − l)δ(n−m) (5.33)

erfullen (∗ bedeutet konjugiert komplex, δ(n) ist der Einsimpuls). Mit dieser Be-ziehung ergibt sich durch Integration beider Seiten von Gl. 5.32 fur die DWT

XDWT (k, n) =

∫ ∞

−∞

x(τ )ψ∗kn(τ ) dτ. (5.34)

Der Vergleich dieser Gleichung mit Gl. 5.31 liefert fur die Basisfunktionen (Wave-lets)

ψkn(t) = h∗k(n2kT − t

)= 2−

k2 h∗

(nT − 2−kt

). (5.35)

Page 162: MATLABr-Programmierung · 1Eingaben in MATLABr sollten keine deutschen Sonderzeichen wie ¨a, ¨o, ¨u,ß enthalten, wenn die Programme auch im nichtdeutschsprachigen Raum eingesetzt

154 5 Multiratenfilterbanke und Wavelets

Damit erhalt man fur die DWT-Synthese

x(t) =∑

k

n

XDWT (k, n)h∗k

(n2kT − t

)

= 2−k2

k

n

XDWT (k, n)h∗(nT − 2−kt

).

(5.36)

Bei orthonormierten Wavelets genugt die Angabe einer einzigen Prototypfilterim-pulsantwort h(t) fur den Entwurf der kompletten Wavelet-Analyse/Synthesefilter-bank.

5.3.2 Zeitdiskrete Wavelet-Transformation (DTWT)

Die DWT verarbeitet zeitkontinuierliche Signale x(t). Die Implementierungsvor-teile der DWT kommen im vollen Umfang erst dann zum Tragen, wenn zeitdis-krete Signale x(n) mit der sogenannten zeitdiskreten WT, Discrete-Time Wa-velet Transform (DTWT), verarbeitet werden. Fur Signale endlicher DauerN benotigt die DTWT einen Rechenaufwand von der Komplexitat O(N). Siedemnach noch effizienter als die FFT (bzw. die STFT), die eine KomplexitatO(N log2N) besitzt. Der Grund dafur liegt einerseits in der logarithmischen Fre-quenzbandunterteilung, die weniger Bander als bei aquidistanter Aufteilung (FFT)erfordert. Andererseits gibt es zur Implementierung sehr effiziente Multiratenfil-terbankstrukturen (z.B. [22, 38]), die in diesem Abschnitt vorgestellt werden.

Die DTWT kann ahnlich wie die DWT als Analysefilterbank interpretiert wer-den, wobei sich bei zeitdiskreten Signalen die Frequenzbandunterteilung bis zurhalben Abtastfrequenz fN = fs/2 erstreckt. Die dyadische Bandaufteilung ist inAbb. 5.12 schematisiert (und vereinfacht ohne Verstarkungsfaktoren der einzelnenBander) fur eine DTWT mit 4 Kanalen gezeigt.

f/fN0 1

812 11

4

|Hk(f)|

23 k = 01

Abbildung 5.12: Schematisierte, dyadische Frequenzbandaufteilung bei der DTWTfur N = 4 Filterbankkanale (halbe Abtastfrequenz fN = fs/2)

Eine offensichtliche Realisierung ware eine nichtaquidistante Filterbank, wiesie in Abschnitt 5.1.2 angegeben ist. Fur die spezielle Bandaufteilung der DTWT

Page 163: MATLABr-Programmierung · 1Eingaben in MATLABr sollten keine deutschen Sonderzeichen wie ¨a, ¨o, ¨u,ß enthalten, wenn die Programme auch im nichtdeutschsprachigen Raum eingesetzt

5.3 Wavelet-Transformation 155

gibt es jedoch eine weitaus effizientere Methode, die die DTWT fur viele Anwen-dungen außerst attraktiv macht. Bei dieser Implementierung wird die Bandauftei-lung durch baumformige Anordnung von Zweikanalfilterbanken erzeugt,bei der jede dieser elementaren Filterbanke das entsprechende Frequenzintervallhalbiert. Die Analyseseite der Zweikanalfilterbank mit den zugehorenden Spektrender involvierten Signale ist in Abb. 5.13 dargestellt. Die Zweikanalfilterbank unter-

0 1f/fN

0 1f/fN

HH ↓ 2

HL ↓ 2

12

120 1

f/fN0 1

f/f ′N

0 1f/f ′N

X X1

Y2X2

x(n)

x1(n)

x2(n)

y1(n)

y2(n)

Y1

Abbildung 5.13: Spektren bei der 2-Kanal Filterbank (DTWT) mit kritisch abge-tasteten Teilbandsignalen (fN = fs/2, f

′N = f ′s/2 = fs/4)

teilt das Frequenzintervall [0, fs/2] mit zwei sogenannten Halbbandfiltern in einTiefpaß- und ein Hochpaßband. Die Teilbandsignale konnen daher um den Faktor2 unterabgetastet werden, so daß die Abtastfrequenz an den Filterbankausgangenf ′s = fs/2 betragt. Durch diese kritische (oder maximale) Abtastung er-strecken sich die Spektren der Teilbandsignale, ahnlich wie das Eingangssignal, biszur (ausgangsseitigen) halben Abtastfrequenz f ′s/2.

3

Werden die Zweikanalfilterbanke zu einer baumformigen Struktur kombiniert,dann erhalt man die in Abb. 5.14 gezeigte Realisierung der DTWT. Die Anord-nung in Abb. 5.14 ist das zeitdiskrete Gegenstuck zur DWT in Abb. 5.11, beider ebenfalls jedes Teilbandsignal kritisch abgetastet ist. Durch die Abtastraten-reduktion in den Teilbandern bleibt die Anzahl der Abtastwerte erhalten, d.h. einSignal endlicher Dauer benotigt (abgesehen von den Signalverlangerungen durch

3Nahere Einzelheiten zur Frequenzbereichsdarstellung von Systemen mit Mehrfachtaktverar-beitung sind in [32, 22, 38] zu finden. Die wichtigsten Beziehungen dazu sind auch im Anhang Bauf Seite 211 zusammengestellt.

Page 164: MATLABr-Programmierung · 1Eingaben in MATLABr sollten keine deutschen Sonderzeichen wie ¨a, ¨o, ¨u,ß enthalten, wenn die Programme auch im nichtdeutschsprachigen Raum eingesetzt

156 5 Multiratenfilterbanke und Wavelets

↓ 2HH

↓ 2HL ↓ 2HH

↓ 2HL ↓ 2HH

↓ 2HL

x(n)

XDTWT (3, n)

XDTWT (2, n)

XDTWT (1, n)

XDTWT (0, n)

Abbildung 5.14: Realisierung der N = 4 DTWT als Baumstruktur mit kritischabgetasteten 2-Kanal Filterbanken (Analysestufen)

die Filteroperationen) gleich viele Werte zur Zeitbereichsdarstellung und fur dieReprasentation mit der DTWT.

Die Abtastratenreduktion um den Faktor 2, angewendet auf ein Signal x(n),ergibt im Zeitbereich y(n) = x(2n), da nur jeder zweite Wert von x(n) weiter-verwendet wird. Mit diesem Zusammenhang laßt sich anhand von Abb. 5.14 diefolgende Beziehung fur die DTWT unmittelbar ableiten (vgl. dazu Gl. 5.31):

XDTWT (k, n) =∞∑

m=−∞

x(m)hk(2k+1n−m

), k = 0, 1, . . . ,M − 2

XDTWT (M − 1, n) =∞∑

m=−∞

x(m)hk(2M−1n−m

).

(5.37)

Diese Darstellung der DTWT ist eine alternative Realisierungsmoglichkeit fur dieDTWT. Sie ist jedoch durch die Verwendung der individuellen Teilbandfilter mitden Impulsantworten hk(n) bei weitem nicht so effizient bzgl. Rechenzeit undSpeicherplatzbedarf, wie die hochgradig modulare Baumstruktur von Abb. 5.14.Außerdem reduziert sich der Filterentwurf bei der Baumstruktur auf das relativeinfache Design einer Zweikanalfilterbank.

Zum Vergleich der DTWT-Filterbank mit anderen nichtaquidistanten Filter-banken mussen die einzelnen Frequenzgange der Teilbandfilter anhand der Baum-struktur berechnet werden. Am einfachsten geschieht das durch Verschiebung derTaktratenreduktionen an die Ausgange der Filterbank. Dazu benutzt man die Ver-tauschung der Filterung mit H(z) und der Taktratenreduktion um den Faktor M ,

Page 165: MATLABr-Programmierung · 1Eingaben in MATLABr sollten keine deutschen Sonderzeichen wie ¨a, ¨o, ¨u,ß enthalten, wenn die Programme auch im nichtdeutschsprachigen Raum eingesetzt

5.3 Wavelet-Transformation 157

bei der H(z) durch H(zM ) ersetzt wird. Im Zeitbereich bedeutet der Ubergangvon z → zM das Einfugen von M − 1 Nullen zwischen den Abtastwerten, die beider Taktratenreduktion um den FaktorM wieder entfernt werden. Auf diese Weiseergibt sich die zu Abb. 5.14 aquivalente Filterbankstruktur in Abb. 5.15.

HH(z)

HL(z)

HL(z)

HL(z)

HH(z2)

HL(z2)

HL(z2)

HH(z4)

HL(z4) ↓ 8

↓ 8

↓ 4

↓ 2

x(n)

XDTWT (3, n)

XDTWT (2, n)

XDTWT (1, n)

XDTWT (0, n)

Abbildung 5.15: Teilbandfilter einer N = 4 DTWT Filterbank, abgeleitet vonZweikanalfiltern mit Ubertragungsfunktionen HL(z) und HH(z)

Ein Beispiel fur die Frequenzgange einer 4-Kanal DTWT-Filterbank ist inAbb. 5.16 dargestellt. Die Teilbandfilter werden entsprechend Abb. 5.15 von 2-Kanalfiltern (FIR-Filter der Lange L = 30) abgeleitet, die mit unicmfb() oderqmf_2() entworfen werden konnen. Beide Programme sind auf der Internetseitedes Autors zu finden. Generell zeigen DTWT-Filterbanke eine starke Uberlappungder einzelnen Teilbander und eine vergleichsweise geringe Sperrdampfung. DieseEffekte sind bei Wavelet-Funktionen, die meist kurzer als 30 Abtastwerte sind,noch viel starker ausgepragt. Fur diese Funktionen gelten andere Entwurfskriteri-en, namlich moglichst komprimierte DTWT-Koeffizienten, als fur stark frequenz-selektive Filterbanke. Dieser Sachverhalt wird bei einer Anwendung der DTWTim Abschnitt 5.3.3 noch naher erlautert.

Aufgabe 5.5

Entwickeln Sie ein MATLABr-Programm wtfib(N,h_l,h_h), mit demausgehend von den Impulsantworten der Zweikanalfilter hL(n) undhH(n) die Frequenzgange der Teilbandfilter einer DTWT der Lange N ,so wie in Abb. 5.16, dargestellt werden konnen. Als Basis dazu dient dieVerallgemeinerung der Filterbank von Abb. 5.15.

Page 166: MATLABr-Programmierung · 1Eingaben in MATLABr sollten keine deutschen Sonderzeichen wie ¨a, ¨o, ¨u,ß enthalten, wenn die Programme auch im nichtdeutschsprachigen Raum eingesetzt

158 5 Multiratenfilterbanke und Wavelets

0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1−100

−80

−60

−40

−20

0

20

f normiert auf Fs/2

Be

tra

g in

dB

nichtdezimierte DTWT Filter, N = 4

Abbildung 5.16: Beispiel N = 4 DTWT Filterbank (ohne Taktratenreduktion),abgeleitet von Zweikanalfiltern HL(z) und HH(z) der Lange L = 30

Die Signalsynthese mit der DTWT (inverse DTWT, IDTWT) kannebenfalls mit einer Baumstruktur von Zweikanalfilterbanken durchgefuhrt werden(siehe Abb. 5.17). Wird namlich die Struktur der DTWT von Abb. 5.14 unmittel-bar mit jener der IDTWT von Abb. 5.17 gekoppelt, dann ergibt sich eine perfek-te Rekonstruktion, wenn die Zweikanal-Analyse/Synthesefilterbank eine perfekteRekonstruktion aufweist. Man erkennt das am einfachsten dann, wenn die zu-sammengeschalteten Baumanordnungen von DTWT und IDTWT sukzessive vonoben nach unten aufgelost werden, d.h. es wird jede Zweikanal-Analyse/Synthese-filterbank durch eine Durchverbindung ersetzt. Bei der praktischen Realisierungist dabei allerdings zu beachten, daß die Zweikanal-Analyse/Synthesefilterbankeine Signalverzogerung aufweist, die beim Zusammenschalten durch Verzoge-rungselemente in den entsprechenden Zweigen kompensiert werden muß. Wird dieDTWT und IDTWT als Blockverarbeitungsalgorithmus z.B. mit MATLABr im-plementiert, dann konnen diese Extraverzogerungselemente durch einen einfachenTrick, der auf Seite 162 verraten wird, eliminiert werden.

Durch die baumformige Struktur der DTWT und IDTWT reduziert sich derenRealisierung auf den Entwurf und die Implementierung einer zweikanaligen Analy-se/Synthesefilterbank. Der Entwurf einer solchen Filterbank ist ein Spezialfall deraquidistanten, kritisch abgetasteten Filterbanke und wurde fur den Fall nahezuperfekter Rekonstruktion bereits in Abschnitt 5.1.1 vorgestellt. Fur den Entwurfdieser, auch als Quadrature Mirror Filterbanke (QMF) bezeichneten, ele-mentaren Filterbanksysteme, gibt es eine Reihe von Verfahren (siehe dazu z.B. [22].

Page 167: MATLABr-Programmierung · 1Eingaben in MATLABr sollten keine deutschen Sonderzeichen wie ¨a, ¨o, ¨u,ß enthalten, wenn die Programme auch im nichtdeutschsprachigen Raum eingesetzt

5.3 Wavelet-Transformation 159

↑ 2 GH

↑ 2 GL

↑ 2 GL

↑ 2 GH ↑ 2 GL

↑ 2 GH

x(n)

XDTWT (3, n)

XDTWT (2, n)

XDTWT (1, n)

XDTWT (0, n)

Abbildung 5.17: Baumstruktur fur die N = 4 IDTWT mit kritisch abgetasteten2-Kanal Filterbanken (Synthesestufen)

Einen schnellen und mit geringem Rechenaufwand verbundenen Entwurf von kri-tisch abgetasteten Zweikanalfilterbanken bietet das bereits auf Seite 132 vorge-stellte MATLABr-Programm unicmfb(). Als weitere Funktionen stehen qmf_2()

und qmf_2hb() auf der Internetseite des Autors zur Verfugung. Mit unicmfb()

oder qmf_2() werden linearphasige FIR-Filter fur das Tiefpaßband HL und dasHochpaßband HH erzeugt. Der spezielle Zusammenhang hH(n) = (−1)nhL(n)zwischen der Impulsantwort hL(n) des Tiefpaßfilters HL und jener des Hochpaß-filters HH gestattet die sehr effiziente Implementierung der Zweikanalfilterbankmit Hilfe von Polyphasenfiltern [32, 38]. Bei der Polyphasenzerlegung wird dieUbertragungsfunktion H(z) eines digitalen (IIR- oder FIR-) Filters z.B. in zweiPolyphasenkomponenten aufgespalten:

H(z) =∞∑

n=−∞

h(n)z−n

=∞∑

n=−∞

h(2n)︸ ︷︷ ︸

hg(n)

z−2n +∞∑

n=−∞

h(2n+ 1)︸ ︷︷ ︸

hu(n)

z−2nz−1

= Hg

(z2)+ z−1Hu

(z2).

(5.38)

Wird diese Aufspaltung auch auf das Hochpaßfilter der Zweikanalfilterbank ange-wendet, so erhalt man mit h(n) = hL(n) und hH(n) = (−1)nh(n) fur die Hoch-

Page 168: MATLABr-Programmierung · 1Eingaben in MATLABr sollten keine deutschen Sonderzeichen wie ¨a, ¨o, ¨u,ß enthalten, wenn die Programme auch im nichtdeutschsprachigen Raum eingesetzt

160 5 Multiratenfilterbanke und Wavelets

paßubertragungsfunktion

HH(z) =

∞∑

n=−∞

(−1)nh(n)z−n

=

∞∑

n=−∞

(−1)2nh(2n)z−2n +

∞∑

n=−∞

(−1)2n+1h(2n+ 1)z−2nz−1

= Hg

(z2)− z−1Hu

(z2).

(5.39)

Als Blockdiagramm sind die Zusammenhange Gl. 5.38 und Gl. 5.39 in Abb. 5.18gezeigt.

z−1

Hg (z2)

Hu (z2)

HL

HH

Abbildung 5.18: Polyphasendarstellung der Tiefpaß- und Hochpaßubertragungs-funktion (HL bzw. HH) fur die Analyseseite der Zweikanalfilterbank

Bei FIR-Filtern genugen wegen des bereits erwahnten speziellen Zusammen-hangs hH(n) = (−1)nh(n) fur die Filterimpulsantworten zwei Filter mit halbierterAnzahl von Filterkoeffizienten. Ein zusatzlicher und wesentlicher Vorteil der Po-lyphasendarstellung kommt dann zur Wirkung, wenn damit kritisch abgetasteteFilterbanke realisiert werden. Im Fall der Zweikanalfilterbank mit Taktratenande-rungen um den Faktor 2 kann namlich die Filteroperation mit der Taktraten-umsetzung entsprechend vertauscht werden, da in den UbertragungsfunktionenPolynome in z2 bzw. z−2 auftreten. Die Filterstrukturen der Polyphasenfilter ha-ben Verzogerungselemente, die immer paarweise in Kette geschaltet auftreten. Wiebereits auf Seite 157 erwahnt, kann bei solchen Anordnungen eine Taktratenande-rung durch das Filter “geschoben” werden. Diese Transformation ist in Abb. 5.19anhand der kompletten Zweikanalfilterbank zu sehen, deren Syntheseseite ebenfallsmit der Polyphasenzerlegung realisiert werden kann [22].

Die Struktur in Abb. 5.19 ist hocheffizient, da nicht nur die Filter die Halfte derKoeffizienten der ursprunglichen Filter haben, sondern alle Arithmetikoperationenmit der niedrigeren Taktfrequenz ausgefuhrt werden. Der einzige Nachteil ist dienichtperfekte Rekonstruktion (Amplitudenfehler) bei Verwendung linearphasigerFIR-Filter. Da die Rekonstruktionsfehler typisch im Bereich 10−5 . . . 10−3 liegen,

Page 169: MATLABr-Programmierung · 1Eingaben in MATLABr sollten keine deutschen Sonderzeichen wie ¨a, ¨o, ¨u,ß enthalten, wenn die Programme auch im nichtdeutschsprachigen Raum eingesetzt

5.3 Wavelet-Transformation 161

Hu (z2)

Hg (z2)

↓ 2

↓ 2 Hu (z2)

Hg (z2)↑ 2

↑ 2

z−1

↓ 2

↓ 2

z−1 Hu(z)

Hg(z) Hu(z)

Hg(z) ↑ 2

↑ 2 z−1

z−1

Abbildung 5.19: Polyphasendarstellung der Zweikanalfilterbank mit kritischer Ab-tastung der Teilbandsignale (unten: Verschiebung der Taktratenumsetzung an denEingang und an den Ausgang)

ist dieser Nachteil im praktischen Einsatz bei der DTWT nicht gravierend. Mitden folgenden MATLABr-Befehlen kann die Zweikanalpolyphasenfilterbank vonAbb. 5.19 programmiert werden.

hg = h(1:2:end); % polyphase filters of low pass prototyp

hu = h(2:2:end);

x = x(:); % input signal

% analysis filter bank

u1 = filter(hg,1,x(1:2:end));

u2 = filter(hu,1,[0 ; x(2:2:end-1)]);

y1 = u1 + u2; % subband signals y1, y2

y2 = u1 - u2;

% synthesis filter bank

v1 = y1 - y2;

v2 = y1 + y2;

y = zeros(size(x));

y(1:2:end) = filter(hg,1,v1);

y(2:2:end) = filter(hu,1,v2);

Page 170: MATLABr-Programmierung · 1Eingaben in MATLABr sollten keine deutschen Sonderzeichen wie ¨a, ¨o, ¨u,ß enthalten, wenn die Programme auch im nichtdeutschsprachigen Raum eingesetzt

162 5 Multiratenfilterbanke und Wavelets

Aufgabe 5.6

Kontrollieren Sie zunachst, ob das vorgeschlagene Programm fur dieZweikanalfilterbank bei geraden und ungeraden Signallangen richtig ar-beitet. Berechnen Sie dann mit dem auf Seite 132 angegeben Programmunicmbf() die Prototypimpulsantwort h(n) fur eine Zweikanalfilterbank(z.B. mit h = unicmfb(2,40,1/6,1e5,80);). Testen Sie danach mitverschiedenen Eingangssignalen das Verhalten der Zweikanalpolyphasen-filterbank und bestimmen Sie den Rekonstruktionsfehler. Wie groß istdie Zeitverzogerung der Filterbank zwischen Eingang und Ausgang?

Mit der Zweikanalpolyphasenfilterbank kann die baumformige Filterbankstruk-tur der DTWT bzw. der IDTWT von Abb. 5.14 (Abb. 5.17) aufgebaut werden.Dabei muß jedoch die Verzogerungszeit der Zweikanalfilterbank berucksich-tigt werden. Im folgenden MATLABr-Programm fur die DTWT und IDTWT(genaugenommen der Zusammenschaltung von DTWT und IDTWT) wird dieseVerzogerungszeit in den Synthesestufen bei der IDTWT kompensiert. Um diesenTrick anwenden zu konnen, mussen in den Analyseseiten der einzelnen Zweikanal-filterbanke um L Werte (Ausschwingvorgang der Filter) mehr berechnet werden.Das ist auch der Grund fur die Verwendung der Funktion conv() anstelle vonfilter(), da die Faltung conv() den Ausschwingvorgang mitberechnet. Hinge-gen ist bei der Funktion filter() die Anzahl der Ausgangssignalwerte gleich derAnzahl von Eingangsdaten.

function y = DTWT_IDTWT(N,h,x)

% function y = DTWT_IDTWT(N,h,x)

% compute combination of DTWT and IDWT to show reconstruction property

%

% N number of DTWT coefficients = number of filter bank channels

% h low pass filter impulse response (linear phase filter)

% x,y input, and output signal vectors

%

% Note: do not use unicmfb() to design filter because linear phase filters

% are required, use e.g. h = qmf_2(50,0.65,0.1) instead

% (qmf_2() can be obtained from the author’s homepage)

%

% G. Doblinger, TU-Wien, 02-2001

Nx2 = ceil(length(x)/2); % maximum length of DTWT coefficients

L = length(h);

p1 = h(1:2:end); % polyphase filters of low pass prototyp

p2 = h(2:2:end);

Page 171: MATLABr-Programmierung · 1Eingaben in MATLABr sollten keine deutschen Sonderzeichen wie ¨a, ¨o, ¨u,ß enthalten, wenn die Programme auch im nichtdeutschsprachigen Raum eingesetzt

5.3 Wavelet-Transformation 163

DTWT = zeros(Nx2+L,N); % matrix of N DTWT coefficients

yl = x;

for n = 1:N-1

[yl,yh] = polyafib2(p1,p2,yl);

DTWT(1:length(yh),n) = yh;

end

DTWT(1:length(yl),N) = yl;

% compute IDTWT = output y of synthesis filter bank

y = DTWT(1:length(yl),N);

for n = N-1:-1:1

y = polysfib2(p1,p2,y,DTWT(1:length(y),n));

end

% -------------------------------------------------------

function [yl,yh] = polyafib2(p1,p2,x)

% compute analysis filter bank (polyphase filters)

u1 = conv(p1,x(1:2:end));

u2 = conv(p2,[0 ; x(2:2:end-1)]);

yl = u1 + u2;

yh = u1 - u2;

% -------------------------------------------------------

function y = polysfib2(p1,p2,yl,yh)

% compute synthesis filter bank (polyphase filters)

L = 2*length(p1);

Ly = 2*length(yl)+L-2;

v1 = yl - yh;

v2 = yl + yh;

y = zeros(Ly,1);

y(1:2:Ly) = conv(p1,v1);

y(2:2:Ly) = conv(p2,v2);

y = y(L:Ly+3-L); % compensate delay of 2 channel filter bank

Page 172: MATLABr-Programmierung · 1Eingaben in MATLABr sollten keine deutschen Sonderzeichen wie ¨a, ¨o, ¨u,ß enthalten, wenn die Programme auch im nichtdeutschsprachigen Raum eingesetzt

164 5 Multiratenfilterbanke und Wavelets

Aufgabe 5.7

Verwenden Sie den angegeben MATLABr-Code zur Bestimmung derDTWT folgender Signale:

a) Zeitdiskreter, verzogerter Rechteckimpuls. Wie andert sich dieDTWT mit der Verzogerungszeit des Rechteckimpulses?

b) Sinusformiges Chirp-Signal x(n) = sin(αn2

).

c) Modulierter Gaußimpuls x(n) = e−αn2

cos(θ0n).

Als Prototypfilterimpulsantwort h verwenden Sie jene aus der vorherge-henden Aufgabe. Uberprufen Sie die Rekonstruktionseigenschaften derIDTWT, indem Sie (wie im angegebenen Programm) die DTWT undIDTWT zusammenschalten.

Die Realisierung der DTWT und IDTWTmit Zweikanalpolyphasenfilterbankenist nicht fur die wichtige Klasse orthonormierter Wavelets geeignet, da nach Gl. 5.36das Prototypfilter der Syntheseseite gleich dem zeitinversen (und konjugiert kom-plexen) Prototypfilter der Analyseseite ist. Fur orthonormierte Wavelets gibtes bei Verwendung von FIR-Leiterstrukturen (FIR-Lattice-Filter) ebenfalls sehreffiziente Implementierungsmoglichkeiten. Neben der hochgradigen Effizienz derLeiterstrukturen ist der entscheidende Vorteil die inharente exakte Rekonstruktionbei kritisch abgetasteten Zweikanalfilterbanken. Die exakte Rekonstruktion bleibtstrukturbedingt auch bei einer Quantisierung der Filterkoeffizienten erhalten, wasLattice-Filter insbesondere fur die Implementierung mit Festkommasignalprozes-soren sehr attraktiv macht. Als Nachteil konnte man lediglich die Notwendigkeiteiner nichtlinearen Optimierung beim Entwurf der benotigten Filterkoeffizientenansehen.

Das entsprechende Entwurfsprogramm qmf_2hb() fur die Koeffizienten derFIR-Lattice-Filter qmf_2hb() kann von der Internetseite des Autors bezogen wer-den. Es wird jedoch die OPTIMIZATION Toolbox von MATLABr benotigt, dienicht in der kostengunstigen Studentenversion von MATLABr enthalten ist. AlsAlternative sind Lattice-Filterkoeffizienten und eine ausfuhrliche Darstellung derZweikanalfilterbank mit Leiterstrukturen in [39] angegeben. Diese Filterkoeffizien-ten sind in der Datei QMF_Lat_Coef.m ebenfalls auf der Internetseite des Autorszu finden.

Die Struktur der Zweikanalfilterbank mit FIR-Lattice-Filtern ist in Abb. 5.20gezeigt. Wie bei der Verwendung von Polyphasenfiltern (Abb. 5.19) kann auch hierdie Taktratenumsetzung am Eingang und Ausgang erfolgen, so daß alle Rechen-operationen mit der niedrigeren Taktrate ausgefuhrt werden.

Page 173: MATLABr-Programmierung · 1Eingaben in MATLABr sollten keine deutschen Sonderzeichen wie ¨a, ¨o, ¨u,ß enthalten, wenn die Programme auch im nichtdeutschsprachigen Raum eingesetzt

5.3 Wavelet-Transformation 165

T T T

↓ 2

↓ 2

T T T

x(n)

y1(n)

y2(n)

y(n)↑ 2

↑ 2

−αL

αL

y2(n)

y1(n)

α1

−α1

α2

−α2

αL

−αL

−α1

α1

−αL−1

αL−1

Abbildung 5.20: Analyseseite (oben) und Syntheseseite (unten) der kritisch abge-tasteten Zweikanalfilterbank mit FIR-Lattice-Filtern

Die Programmierung der Leiterstrukturen mit MATLABr kann mit den fol-genden beiden Funktionen durchgefuhrt werden.4

function [y_lp,y_hp] = latafib2(x,alpha)

%function [y_lp,y_hp] = latafib2(x,alpha)

%

% 2-channel critically sampled lattice analysis filter bank

%

% x input signal vector

% alpha vector of lattice coefficients created with QMF_Lat_Coef()

% or qmf_2hb()

% y_lp, y_hp output signal vectors of low pass and high pass filters

%

% G. Doblinger, TU-Wien, 6-1998

Nx = length(x);

% compute lattice input signals p0 (upper path), and q0 (lower path)

p0 = x(:)/sqrt(prod(1+alpha.^2)); % apply gain factor

q0 = [0 ; p0(1:Nx-1)]; % delay q-signal

p0 = p0(2:2:Nx); % down-sampling at input

q0 = q0(2:2:Nx);

4In den neueren Versionen der SIGNAL PROCESSING Toolbox zu MATLABr gibt es furLattice-Filter die Funktion latcfilt(), die in binarer Form (MEX-File) implementiert ist unddamit eine kurzere Laufzeit hat.

Page 174: MATLABr-Programmierung · 1Eingaben in MATLABr sollten keine deutschen Sonderzeichen wie ¨a, ¨o, ¨u,ß enthalten, wenn die Programme auch im nichtdeutschsprachigen Raum eingesetzt

166 5 Multiratenfilterbanke und Wavelets

Nq = length(q0)-1;

% compute lattice stages output signals

p = p0 - alpha(1)*q0;

q = q0 + alpha(1)*p0;

for n = 2:length(alpha) % loop of remaining stages

q = [0 ; q(1:Nq)]; % delayed q-vector

pt = p;

p = p - alpha(n)*q;

q = q + alpha(n)*pt;

end

y_lp = p;

y_hp = q;

% ---------------------------------------------------------------

function y = latsfib2(y_lp,y_hp,alpha)

%function y = latsfib2(y_lp,y_hp,alpha)

%

% 2-channel critically sampled lattice synthesis filter bank

%

% y_lp, y_hp input signal vectors

% alpha vector of lattice coefficients

% y output signal vector

%

% G. Doblinger, TU-Wien, 6-1998

Nx = length(y_lp);

Nq = Nx - 1;

alpha = alpha(end:-1:1); % use reversed coefficients

% compute first stage output signals

y_lp = y_lp(:);

y_hp = y_hp(:);

p = y_lp + alpha(1)*y_hp;

q = y_hp - alpha(1)*y_lp;

for n = 2:length(alpha) % loop of remaining stages

p = [0 ; p(1:Nq)]; % delayed p-vector

pt = p;

p = p + alpha(n)*q;

q = q - alpha(n)*pt;

end

Page 175: MATLABr-Programmierung · 1Eingaben in MATLABr sollten keine deutschen Sonderzeichen wie ¨a, ¨o, ¨u,ß enthalten, wenn die Programme auch im nichtdeutschsprachigen Raum eingesetzt

5.3 Wavelet-Transformation 167

% up-sampling at output

Nx = 2*Nx;

p_int = zeros(Nx,1);

p_int(2:2:Nx) = p;

q_int = zeros(Nx,1);

q_int(2:2:Nx) = q;

p_int = [0 ; p_int(1:Nx-1)];

y = (p_int + q_int)/sqrt(prod(1+alpha.^2));

Der Skalierungsfaktor 1/√∏L

k=1(1 + α2k) am Eingang der Analysefilterbank

(bzw. am Ausgang der Synthesefilterbank) stellt den Verstarkungsfaktor 1 fur diegesamte Zweikanalfilterbank sicher. Diese Skalierung ist in Abb. 5.20 nicht einge-zeichnet. Mit beiden MATLABr-Funktionen kann die DTWT und IDTWT pro-grammiert werden, indem im Programm auf Seite 162 die Funktionen polyafib2()

und polysfib2() durch die Lattice-Filterfunktionen latafib2() und latsfib2()

ersetzt werden. Allerdings ganz so einfach ist das nicht, da ja wie bereits erwahntdie Verzogerungszeit der Zweikanalfilterbank berucksichtigt werden muß.

Aufgabe 5.8

Modifizieren Sie die Funktionen latafib2() und latsfib2(), sodaß sie fur die Berechnung der DTWT und IDTWT mit dem Pro-gramm auf Seite 162 herangezogen werden konnen. Dabei kommtes darauf an, die richtige Anzahl von Abtastwerten zu berechnenund die Verzogerungszeit der Zweikanalfilterbank zu kompensieren.Die benotigten Koeffizienten αk der Lattice-Filter konnen Sie mitden bereits erwahnten Programmen qmf_2hb() oder QMF_Lat_Coef.m

generieren: Beispielsweise mit alpha = qmf_2hb(40,0.63,’l’); oderalpha = QMF_Lat_Coef(’32C’);.Kontrolle des Ergebnisses: Erfolgt der Entwurf der Lattice-Filtermit alpha = qmf_2hb(40,0.63,’l’), dann muß der Betrag des Rekon-struktionsfehlers der Zusammenschaltung von DTWT und IDTWT furN ≤ 10 Filterbankkanale im Bereich 10−14 liegen. Abweichungen vondieser Fehlerschranke sind mit großer Wahrscheinlichkeit auf Program-mierfehler zuruckzufuhren.

Page 176: MATLABr-Programmierung · 1Eingaben in MATLABr sollten keine deutschen Sonderzeichen wie ¨a, ¨o, ¨u,ß enthalten, wenn die Programme auch im nichtdeutschsprachigen Raum eingesetzt

168 5 Multiratenfilterbanke und Wavelets

5.3.3 Signalentstorung mit Wavelets

Wavelets in Form der DTWT und IDTWT haben zahlreiche Anwendungen imBereich der digitalen Signalverarbeitung gefunden. Die Hauptgrunde dafur sindeinerseits der geringe Rechenaufwand bei den im vorangegangenen Abschnitt vor-gestellten Baumstrukturen der DTWT und IDTWT. Andererseits konnen dieWavelet-Filter so dimensioniert werden, daß die DTWT/IDTWT fur eine großeKlasse von Signalen sehr kompakt ist, also nur wenige Koeffizienten zur Signaldar-stellung benotigt werden. Das erlaubt den Einsatz der Wavelet-Transformationbei der Datenkompression von Audio- und Videosignalen, die heute bei Multime-diaanwendungen in großem Umfang benotigt wird.

Eine weitere, sehr erfolgreiche Anwendung der Wavelet-Transformation ist dieEntstorung verrauschter Signale. Hier wird die Eigenschaft von Wavelets ausge-nutzt, daß auf der Ebene der DTWT-Koeffizienten gewunschte Signalkomponentenvon Storanteilen sehr gut zu trennen sind. Wahrend bei vielen Signalen die DTWT-Koeffizienten konzentriert sind und damit große Amplituden haben, zeigen addi-tive Storsignale in Form von weißem Rauschen ein diffuses Bild, d.h. die DTWT-Koeffizienten der Storer sind verteilt auf alle Kanale der DTWT-Filterbank. Mankann daher erwarten, daß hauptsachlich die Storsignale fur die kleinen DTWT-Koeffizienten maßgebend sind. Eine einfache und wirkungsvolle Methode zur Ver-besserung verrauschter Signale ist die Unterdruckung von DTWT-Koeffizientenmit kleinen Amplituden durch eine nichtlineare Verarbeitung der DTWTvor dem Syntheseschritt mit der IDTWT (siehe Abb. 5.21).

s(n)

DTW

T

IDTW

Ts(n) + w(n)

XDTWT (k, n)XDTWT (k, n)

Abbildung 5.21: Nichtlineare Verarbeitung der DTWT zur Unterdruckung vonRauschanteilen w(n) im Nutzsignal s(n)

Diese Methode wird als Wavelet Shrinkage bezeichnet und beruht trotz desheuristisch anmutenden Ansatzes auf einer fundierten theoretischen Basis [40]. Furdie nichtlineare Verarbeitung werden Hard Thresholding

XDTWT (k, n) =

XDTWT (k, n) |XDTWT (k, n)| ≥ th0 |XDTWT (k, n)| < th

(5.40)

Page 177: MATLABr-Programmierung · 1Eingaben in MATLABr sollten keine deutschen Sonderzeichen wie ¨a, ¨o, ¨u,ß enthalten, wenn die Programme auch im nichtdeutschsprachigen Raum eingesetzt

5.3 Wavelet-Transformation 169

oder Soft Thresholding

XDTWT (k, n) =

sign(XDTWT (k, n))(|XDTWT (k, n)| − th) |XDTWT (k, n)| ≥ th0 |XDTWT (k, n)| < th

(5.41)eingesetzt. Fur die Berechnung der Schwelle wird als einziger Parameter die Lei-stung (Varianz) σ2

w des weißen Rauschsignals w(n) benotigt. Damit ergibt sich furSignale endlicher Dauer N ein erstaunlich einfacher Schwellwert [41]:

th = σw√

2 logN. (5.42)

Ein MATLABr-Programm wt_dn() zum Wavelet Shrinkage steht auf der In-ternetseite des Autors zur Verfugung. So kann beispielsweise mit

xc = sin(4e-5*[0:2047].^2); % chirp signal

[y,xn] = wt_dn(xc,6,15); % y = denoised signal, xn = noisy signal

% DTWT with 6 channels, SNR = 15 dB

% orthonormal wavelet (Coiflet), length = 24

% hard thresholding

% DTWT of last channel (no. 6) not modified

ein verrauschtes Chirp-Signal weitgehend entstort werden. Das Ergebnis ist inAbb. 5.22 dargestellt. Dieses gute Resultat ist naturlich nicht mit einer konventio-nellen (linearen, frequenzselektiven) Filterung erreichbar, da sich das Chirp-Signaluber einen weiten Frequenzbereich erstreckt.

Das Programm wt_dn() setzt sich aus der bereits vorgestellten DTWT- undIDTWT-Implementierung von Seite 162 (allerdings mit Lattice-Filtern) und derzwischen Analyse- und Syntheseseite der Wavelet-Filterbank zwischengeschalte-ten Nichtlinearitaten zusammen. Die Erfahrung zeigt, daß bessere Resultate er-zielt werden, wenn XDTWT (N − 1, n) (Kanal mit der kleinsten Bandbreite) nichtverandert wird. Dieses Teilbandsignal ist normalerweise fur den Hauptanteil desSignals zustandig und weist die großten DTWT-Werte und die geringste Storungauf (kleinste Bandbreite). Die Anwendung einer Nichtlinearitat auf dieses Teil-bandsignal fuhrt daher eher zu Signalverzerrungen, als zu einer Verbesserung desEntstorverhaltens.

Als Wavelets kommen orthonormierte Funktionen zum Einsatz, die eine beson-ders gute Konzentration der DTWT-Koeffizienten fur eine große Klasse von Signa-len (ausgenommen weißes Rauschen) besitzen. Die Impulsantworten der Filter derZweikanalfilterbank fur diese Wavelets sind relativ kurz (typisch L = 24) und dieBetragsfrequenzgange von Tiefpaß und Hochpaß weisen eine sehr starke Uberlap-pung auf. Es sind also fur die Wirkung der Entstorung keine sonderlich guten Filternotwendig. Dieser Sachverhalt erstaunt nur, wenn die Wavelet-Transformation inihrer Funktion als klassische Filterbank gesehen wird und nicht, wenn man Wave-lets als Mittel zur kompakten Signaldarstellung, die nur wenige Koeffizienten und

Page 178: MATLABr-Programmierung · 1Eingaben in MATLABr sollten keine deutschen Sonderzeichen wie ¨a, ¨o, ¨u,ß enthalten, wenn die Programme auch im nichtdeutschsprachigen Raum eingesetzt

170 5 Multiratenfilterbanke und Wavelets

Basisfunktionen benotigt, betrachtet. Der Anreiz fur die Anwendung von Waveletsliegt in der Kombination dieser guten Eigenschaften mit der Moglichkeit einer sehreffizienten Implementierung mit kritisch abgetasteten Filterbanken!

Die Wavelet-Transformation ist naturlich kein universelles Heilmittel fur allegestorten Signale. So konnen beispielsweise Sprachsignale, die selbst rauschartigeKomponenten enthalten, nur schlecht mit Wavelet Shrinkage entstort werden. DieAnwendbarkeit beschrankt sich hauptsachlich auf relativ glatte Nutzsignale, diejedoch auch Sprungstellen enthalten konnen.

Aufgabe 5.9

Wenn Sie sich selbst ein Bild von der Leistungsfahigkeit des Wavelet-Schrumpfens machen wollen, dann sind Experimente mit der Funktionwt_dn() und verschiedenen Signalen und Storpegeln empfehlenswert.Versuchen Sie die folgenden, mit weißem Rauschen uberlagerten Signalezu entstoren. Variieren Sie dabei die Kanalanzahl N und die Leistungdes Storsignals.

a) Vokalische Sprachlaute oder eine Singstimme.

b) Signale mit Sprungstellen.

c) Tiefpaß- oder bandpaßgefiltertes weißes Rauschen.

d) Random Walk Signal:

x(n) = x(n− 1) + r(n)σ(n), n = 0, 1, 2, . . .

(x(−1) = 0, r(n) ist ein mittelwertfreies, gaußsches Rauschen, σ(n)ist die zeitdiskrete Sprungfunktion).

Page 179: MATLABr-Programmierung · 1Eingaben in MATLABr sollten keine deutschen Sonderzeichen wie ¨a, ¨o, ¨u,ß enthalten, wenn die Programme auch im nichtdeutschsprachigen Raum eingesetzt

5.3 Wavelet-Transformation 171

Noisy Chirp-Signal x(n)

Index n

2000180016001400120010008006004002000

1

0

-1

Denoised Chirp-Signal y(n)

Index n

2000180016001400120010008006004002000

1

0

-1

Abbildung 5.22: Sinusformiges, verrauschtes Chirp-Signal und mit DTWT-Analyse/Synthesebank entstortes Signal (SNR = 15 dB, N = 6 Filterbankkanale)

Page 180: MATLABr-Programmierung · 1Eingaben in MATLABr sollten keine deutschen Sonderzeichen wie ¨a, ¨o, ¨u,ß enthalten, wenn die Programme auch im nichtdeutschsprachigen Raum eingesetzt

172 5 Multiratenfilterbanke und Wavelets

Page 181: MATLABr-Programmierung · 1Eingaben in MATLABr sollten keine deutschen Sonderzeichen wie ¨a, ¨o, ¨u,ß enthalten, wenn die Programme auch im nichtdeutschsprachigen Raum eingesetzt

6

Anwendungen aus demBereich der Audiotechnik

In diesem Kapitel werden ausgewahlte Anwendungen der digitalen Verarbeitungvon Audiosignalen behandelt, die in erster Linie als Anregungen zu umfangrei-cheren Projektarbeiten in MATLABr-Seminaren oder Vertiefungsfachern auf demGebiet der digitalen Signalverarbeitung zu verstehen sind. Ein wesentlicher Grundfur die Beschrankung auf Audioanwendungen ist die Erfahrung, daß diese aufStudenten einen besonderen Reiz und eine starkere Motivation zum Erlernen derMethoden ausuben, als z.B. der Entwurf digitaler Filter. Die Beurteilung der Qua-litat einer Problemlosung in der Audiotechnik durch das menschliche Gehor ist einsehr uberzeugender Maßstab. Vorfuhrungen von interessanten Verfahren der Au-diosignalverarbeitung ziehen daher meist ein großeres Publikum an, als etwa diePrasentation der Ergebnisse eines geschickten Filterentwurfs.

Der Nachteil der Implementierung von Audioanwendungen mit MATLABr istdie relativ lange Rechenzeit. Das konnte aber auch der Anlaß sein, sich Simulatio-nen genau zu uberlegen und bei der Auswahl der Parameter auch eine vereinfachteAnalyse per Hand vorzunehmen. Zusatzlich ist der Anreiz gegeben, ausgehend vonder Losung mit MATLABr auch eine andere Programmierung, z.B. in C, anzustre-ben. Der Schritt von MATLABr zu C (oder C++) ist nicht allzu groß und hat beider Programmentwicklung den Vorteil, daß die MATLABr-Simulationsergebnisseals Referenz zum Testen des C-Programms dienen konnen.

Die Einfuhrung in die einzelnen Problemstellungen beschrankt sich auf diewesentlichen Erlauterungen und soll zum Studium der angefuhrten Fachliteraturanimieren, wo die Details zu den eingesetzten Algorithmen dargestellt werden.Fur alle Aufgaben gibt es Losungen des Autors, die uber das Internet zuganglich

Page 182: MATLABr-Programmierung · 1Eingaben in MATLABr sollten keine deutschen Sonderzeichen wie ¨a, ¨o, ¨u,ß enthalten, wenn die Programme auch im nichtdeutschsprachigen Raum eingesetzt

174 6 Anwendungen aus dem Bereich der Audiotechnik

sind. Die Anwendungen zeigen in erster Linie den Einsatz von uberabgetastetenDFT-Filterbanken und bieten ein weites Betatigungsfeld zur Vertiefung der Pro-grammierkunste in MATLABr. Die sehr effizienten DFT-Filterbanke beruhen aufder Kurzzeit-Fouriertransformation (STFT) und sind im Abschnitt 5.2 ausfuhr-lich dargestellt. Die Grundstruktur, dessen Blockdiagramm in Abb. 6.1 gezeigtist, ist fur alle vorgestellten Anwendungen gleich. Die Modifikationen der spektra-len Komponenten Xk(m) werden der jeweiligen Anwendung angepaßt.

x(n)

DFT

(Analyse)

IDFT

(Synthese)

x(n)Modifi-kation

Xk(m) Xk(m)

k = 0, 1, . . . , N − 1

Abbildung 6.1: Blockschaltbild der DFT-Analyse- und Synthesefilterbank mit Mo-difikation der spektralen Komponenten Xk(m) in N Kanalen

6.1 Pitch- und Zeitskalierung mit der DFT-Filterbank

6.1.1 Pitch-Skalierung

Die Veranderung der Tonhohe von Audiosignalen hat zahlreiche Anwendungenund ist aus der Sicht der Signalverarbeitung eine durchaus anspruchsvolle Pro-blemstellung. Einen Uberblick und eine einheitliche Darstellung der verschiede-nen Methoden kann in [42] nachgelesen werden. An naheliegendsten ware eineModifikation des Signals durch eine Verschiebung des Signalspektrums entlangder Frequenzachse, die mit Hilfe einer Einseitenbandmodulation digital einfach zurealisieren ist. Leider zerstort die Translation entlang der Frequenzachse die Ober-wellenstruktur vokalischer Sprachlaute oder den Klang von Musikinstrumenten.Besser ist eine Tonhohenanderung durch eine Dehnung oder Kompression der Fre-quenzachse (Pitch-Skalierung). Unter Pitch versteht man in der Audiotechnik dieTonhohe, also z.B. die Grundfrequenz der Stimmbandschwingungen, aber auch dieStimmung eines Musikinstruments.

Aus der Sicht der Signalverarbeitung bedeutet Pitch-Scaling demnach eineMultiplikation aller Frequenzen eines Spektrums mit einem (konstanten) Faktor.Diese Frequenzskalierung entspricht bei Sprache oder Gesang nicht exakt einer

Page 183: MATLABr-Programmierung · 1Eingaben in MATLABr sollten keine deutschen Sonderzeichen wie ¨a, ¨o, ¨u,ß enthalten, wenn die Programme auch im nichtdeutschsprachigen Raum eingesetzt

6.1 Pitch- und Zeitskalierung mit der DFT-Filterbank 175

Pitch-Skalierung, da neben den Stimmbandschwingungen auch noch die Resonan-zen des Vokaltrakts verandert werden. Man erhalt daher bei starker Dehnung derFrequenzachse nicht unbedingt eine attraktive weibliche Stimme aus einer mann-lichen Stimme.

Die Frequenzskalierung, wie sie hier verwendet werden soll, kann z.B. nichtdurch Abspielen einer Tonbandaufzeichnung mit großerer oder kleinerer Geschwin-digkeit erzielt werden, da dabei auch die Zeitachse skaliert wird. Will man nur dieZeitachse skalieren (Schnell- oder Langsamsprechen), so kann das bei gespeichertenSignalen ebenfalls sehr einfach mit einer FFT-Filterbank realisiert werden (sieheAbschnitt 6.1.2).

Sollen bei der Frequenzskalierung alle Frequenzen mit einem konstanten Faktorim sinnvollen Bereich [0.5, 2] multipliziert werden, dann ist bei der FFT-Filterbankzu beachten, daß die neuen Frequenzen nicht mehr auf dem Frequenzraster derFFT liegen, also an Vielfachen von fs/N (Abtastfrequenz fs, FFT-Lange N) auf-treten. Um Frequenzen um beliebige Faktoren im Intervall [0.5, 2] zu modifizieren,bedarf es der Darstellung der Spektralkomponenten Xk(m) am Ausgang der Ana-lysefilterbank nach Betrag und Phase in der Form

Xk(m) = |Xk(m)| ejϕk(m), (6.1)

mit dem Frequenzindex k = 0, 1, . . . , N − 1 (bzw. N/2 bei reellwertigen Signa-len) und dem Frame-Zeitindex m. ϕk(m) wird auch als Augenblicksphase oderMomentanphase (Instantaneous Phase) der k-ten Frequenzkomponente be-zeichnet. Der Vorteil dieser Darstellung ist, daß bei kurzzeitstationaren Signalendie Phasenanderung von Frame zu Frame fur den Fall, daß der Abstand M derFrames klein ist (große Blockuberlappung), linearisiert werden kann:

ϕk(m) = ϕk(m− 1) + ωk(m)M + 2πl, (6.2)

mit der sogenannten Momentanfrequenz (Instantaneous Frequency) ωk(m)und einem (zunachst unbekannten) Vielfachen von 2π. Zur Bestimmung der Mo-mentanfrequenz wird angenommen, daß sich im Filterbankkanal mit dem Indexk eine Pitch-Harmonische befindet. Dann entspricht ωk(m) der Frequenz dieserHarmonischen. Andert sich die Pitch-Frequenz von Frame zu Frame nur langsam,dann wird auch die Momentanfrequenz im betreffenden Filterbankkanal nur einegeringe zeitliche Anderung aufweisen. Jeder Filterbankkanal stellt einen Bandpaß-kanal dar, so daß die Abweichung der Momentanfrequenz von der Mittenfrequenzθk = 2πk/N des Kanals beschrankt ist:

|ωk(m)− θk| <π

M. (6.3)

Diese Bedingung ist fur M ≤ N/4 (75% Blockuberlappung) sicher erfullt (siehedazu auch die Bemerkungen auf Seite 147). Mit ∆ϕk(m) = ϕk(m) − ϕk(m − 1)

Page 184: MATLABr-Programmierung · 1Eingaben in MATLABr sollten keine deutschen Sonderzeichen wie ¨a, ¨o, ¨u,ß enthalten, wenn die Programme auch im nichtdeutschsprachigen Raum eingesetzt

176 6 Anwendungen aus dem Bereich der Audiotechnik

und Gl. 6.2 ergibt sich damit

|∆ϕk(m)− 2πl − θkM | = |ωk(m)− θk|M︸ ︷︷ ︸

< π

. (6.4)

Das unbekannte Vielfache von 2π in Gl. 6.4, kann durch eine Art Modulo-2πOperation eliminiert werden:

∆ϕk(m) = (∆ϕk(m)− θkM)⊕ 2π mit |∆ϕk(m)| < π. (6.5)

Tabelle 6.1: Algorithmus zur Bestimmung der Momentanfrequenz ωk(m)

ϕk(m) = arctan

(ℑm Xk(m)ℜe Xk(m)

)

k = 0, 1, 2, . . . ,N

2

∆ϕk(m) = ϕk(m)− ϕk(m− 1)

∆ϕk(m) = (∆ϕk(m)− θkM)⊕ 2π, so daß |∆ϕk(m)| < π

ωk(m) = θk +∆ϕk(m)

M, mit θk =

2πk

N

Man erhalt also den in Tabelle 6.1 angegebenen Algorithmus zur Bestimmungder Momentanfrequenz fur jeden Filterbankkanal.1 Die nach Tabelle 6.1 berechneteMomentanfrequenz, die bei stimmhaften Lauten etwa einer Pitch-Harmonischenentspricht und nicht notwendigerweise auf dem Frequenzraster der FFT liegenmuß, kann nun einfach frequenzskaliert werden. Dazu werden die Frequenzindizesk mit dem Skalierungsfaktor sc ∈ [0.5, 2] nach der Beziehung

ks = round

(k

sc

)

, k = 0, 1, 2, . . . , kmax (6.6)

berechnet, mit kmax = min(N2 ,⌊sc

N2

⌋). Mit den neuen Frequenzindizes ks konnen

nun die skalierten Momentanfrequenzen

ωk(m) = sc ωks(m) (6.7)

bestimmt werden. Aus diesen Momentanfrequenzen lassen sich durch Akkumula-tion (siehe Gl. 6.2) die neuen Momentanphasen ermitteln:

ϕk(m) = (ϕk(m− 1) +Mωk(m))⊕ 2π. (6.8)

1Fur die Berechnung der Phase wird in MATLABr die Funktion angle() oder atan2() ver-wendet.

Page 185: MATLABr-Programmierung · 1Eingaben in MATLABr sollten keine deutschen Sonderzeichen wie ¨a, ¨o, ¨u,ß enthalten, wenn die Programme auch im nichtdeutschsprachigen Raum eingesetzt

6.1 Pitch- und Zeitskalierung mit der DFT-Filterbank 177

Die Modulo-2π Operation verhindert ein Anwachsen der Phasen uber alle Gren-zen. Die neuen Momentanphasen konnen jetzt zur Berechnung der modifiziertenSpektralkomponenten am Eingang der Synthesefilterbank von Abb. 6.1 heran-gezogen werden:

Xk(m) = |Xk(m)| ejϕk(m). (6.9)

(Die modifizierten Betrage erhalt man sinngemaß mit |Xk(m)| = |Xks(m)|).

Das folgende MATLABr-Programm verwendet den vorgestellten Algorithmuszur Modifikation der STFT. Es konnte durch Zusammenfassen von Variablen nochkompakter und mit geringerem Speicheraufwand gestaltet werden, allerdings aufKosten der Lesbarkeit. Zum Testen des Programms konnen Sprach- oder Musik-signale eingesetzt werden. Bei einer Abtastfrequenz von 16 kHz ist eine Zeitfen-sterlange N = 512 empfehlenswert, die die Kurzzeitstationaritat von Sprachsigna-len berucksichtigt. Bei Musiksignalen liefern langere Zeitfenster bessere Ergebnisse.Abweichend vom Filterbankprogramm auf Seite 148 wird hier eine FFT-Lange ver-wendet, die mindestens doppelt so lang wie das Zeitfenster ist. Dadurch wird einegenugend feine Darstellung der STFT, auch bei skalierter Frequenzachse, erzielt.

function y = pitch_scale(x,scale,N)

% function y = pitch_scale(x,scale,N)

%

% pitch scaling of audio signals using an FFT filter bank

% x real-valued input signal

% scale pitch scale factor in [0.5,2]

% N time window length

% y output signal

%

% G. Doblinger, TU-Wien, 02-2001

M = round(N/4); % decimation factor (frame hop size)

h = hanning(N); % time window function

h = 2*sqrt(M/N)*h(:);

Nf = 2^(1+ceil(log2(N))); % FFT length (power of 2 >= 2*N)

Nh = Nf/2+1;

x = [x(:) ; zeros(N-length(x),1)]; % append zeros, if necessary

nsig = length(x);

% initialize pitch scaling variables

ana_phase = zeros(Nh,1); % instantaneous phase phi(k)

freq = 2*pi/Nf*[0:Nh-1]’; % FFT frequency grid theta(k)

c1 = 1/M;

c2 = M;

diffph0 = c2*freq; % theta(k)*M

if scale < 1

Page 186: MATLABr-Programmierung · 1Eingaben in MATLABr sollten keine deutschen Sonderzeichen wie ¨a, ¨o, ¨u,ß enthalten, wenn die Programme auch im nichtdeutschsprachigen Raum eingesetzt

178 6 Anwendungen aus dem Bereich der Audiotechnik

nmax = floor(scale*Nh);

Zpad = zeros(Nh-nmax,1);

else

nmax = Nh;

Zpad = [];

end

syn_phase = zeros(nmax,1); % phi_hat(k)

ks = round([1:nmax]’/scale); % resampled frequency indices

y = zeros(nsig,1);

for m = 1:M:nsig-N+1 % frame index loop

% analysis filter bank

X = fft(x(m:m+N-1).*h,Nf);

X = X(1:Nh);

% compute instantaneous phase ana_phase

ph = atan2(imag(X),real(X));

diffph = ph - ana_phase - diffph0;

ana_phase = ph;

% limit differential phase to [-pi,pi]

diffph = rem(diffph,2*pi); % MATLAB modulo operation

ii = find(diffph > pi);

diffph(ii) = diffph(ii) - 2*pi;

ii = find(diffph < -pi);

diffph(ii) = diffph(ii) + 2*pi;

% compute instantaneous frequencies

ana_freq = freq + c1*diffph;

% pitch scaling by decimating/interpolating of frequency bins

ana_mag = abs(X);

syn_mag = ana_mag(ks);

syn_freq = scale*ana_freq(ks);

% synthesis step, and synthesis filter bank

syn_phase = rem(syn_phase + M*syn_freq,2*pi);

Page 187: MATLABr-Programmierung · 1Eingaben in MATLABr sollten keine deutschen Sonderzeichen wie ¨a, ¨o, ¨u,ß enthalten, wenn die Programme auch im nichtdeutschsprachigen Raum eingesetzt

6.1 Pitch- und Zeitskalierung mit der DFT-Filterbank 179

X = syn_mag .* exp(j*syn_phase);

X = [X ; Zpad];

X = [X ; conj(X(Nh-1:-1:2))];

y1 = real(ifft(X,Nf));

y(m:m+N-1) = y(m:m+N-1) + y1(1:N).*h;

end

6.1.2 Zeitskalierung

Bei der Zeitskalierung wird die Zeitachse gedehnt oder komprimiert, so daß sichdie Signallange andert. Im Gegensatz zur Pitch-Skalierung ist diese Modifikati-on daher nur bei gespeicherten Signalen moglich. Die naheliegende Modifikationder Zeitachse ware eine Veranderung der Abtastrate. Dieser Schritt entsprichtder Wiedergabe einer Tonbandaufzeichnung mit einer Geschwindigkeit, die vonder Aufnahmegeschwindigkeit abweicht. Der bekannte Effekt dabei ist jedoch diegleichzeitige Veranderung der Frequenzlage.2

Bei der DFT-Filterbank laßt sich diese Frequenzanderung (ahnlich wie die ge-wollte Anderung bei der Pitch-Skalierung) sehr einfach kompensieren. Die Frageist nur, wie man bei der DFT-Filterbank die Zeitachse verandert. Die Antwortist einfach: Die Zeitskala wird durch die Uberlappung der Blocke bestimmt (siehedazu Abb. 5.6 auf Seite 145 bzw. Abb. 5.7 auf Seite 146). Wird nun eine unter-schiedliche Blockuberlappung fur Analyse- und Synthesefilterbank gewahlt,dann kann die Signaldauer entsprechend dem Zeitskalierungsfaktor verandert wer-den. Die Eingriffe in das bereits vorgestellte Programm zur Pitch-Skalierung sindgering und im nachfolgenden Programmausdruck angegeben. Damit auch bei ei-ner Zeitdehnung um den Faktor 2 noch eine genugende Blockuberlappung in derSyntheseseite vorhanden ist, wird die DFT-Filterbank um den Faktor 8 uberabge-tastet. Bei der Zeitkompression konnte man die Uberabtastung auf den Faktor 4reduzieren und damit die Rechenzeit verkurzen.

function y = time_scale(x,scale,N)

% function y = time_scale(x,scale,N)

%

% time scaling of audio signals using an FFT filter bank

%

% x real-valued input signal (row, or column vector)

% scale pitch scale factor in [0.5,2]

% N time window length

% y output signal

2Wenn Ihr MATLABr-Rechner eine Audioausgabe unterstutzt, dann konnen Sie sich mit derFunktion sound(x,Fs) ein Signal x mit verschiedenen Abtastraten Fs anhoren.

Page 188: MATLABr-Programmierung · 1Eingaben in MATLABr sollten keine deutschen Sonderzeichen wie ¨a, ¨o, ¨u,ß enthalten, wenn die Programme auch im nichtdeutschsprachigen Raum eingesetzt

180 6 Anwendungen aus dem Bereich der Audiotechnik

%

% G. Doblinger, TU-Wien, 02-2001

M = round(N/8); % decimation factor (frame hop size)

Ms = round(scale*M); % synthesis stage decimation factor

disp(sprintf(’actual scaling factor = %d/%d = %f’, Ms, M, Ms/M));

h = hanning(N); % time window function

h = 2*sqrt(sqrt(M*Ms)/N)*h(:);

Nf = 2^ceil(log2(N)); % FFT length (power of 2 >= N)

Nh = Nf/2+1;

x = [x(:) ; zeros(N-length(x),1)]; % append zeros, if necessary

nsig = length(x);

% initialize variables

ana_phase = zeros(Nh,1);

syn_phase = zeros(Nh,1);

freq = 2*pi/N*[0:Nh-1]’;

c1 = 1/M;

diffph0 = M*freq;

Ny = N+ceil((nsig-N)/M*Ms); % length of output signal

y = zeros(Ny,1);

ms = 1; % ms = synthesis stage frame index

for m = 1:M:nsig-N+1 % analysis frame index loop

% analysis filter bank

X = fft(x(m:m+N-1).*h,Nf);

X = X(1:Nh);

% compute instantaneous phase ana_phase

ph = atan2(imag(X),real(X));

diffph = ph - ana_phase - diffph0;

ana_phase = ph;

% limit differential phase to [-pi,pi]

diffph = rem(diffph,2*pi); % MATLAB modulo operation

ii = find(diffph > pi);

Page 189: MATLABr-Programmierung · 1Eingaben in MATLABr sollten keine deutschen Sonderzeichen wie ¨a, ¨o, ¨u,ß enthalten, wenn die Programme auch im nichtdeutschsprachigen Raum eingesetzt

6.1 Pitch- und Zeitskalierung mit der DFT-Filterbank 181

diffph(ii) = diffph(ii) - 2*pi;

ii = find(diffph < -pi);

diffph(ii) = diffph(ii) + 2*pi;

% compute instantaneous frequencies

inst_freq = freq + c1*diffph;

% compute synthesis phase and modified spectrum

syn_phase = rem(syn_phase + Ms*inst_freq,2*pi);

X = abs(X) .* exp(j*syn_phase);

X = [X ; conj(X(Nh-1:-1:2))];

% synthesis filter bank

y1 = real(ifft(X,Nf));

y(ms:ms+N-1) = y(ms:ms+N-1) + y1(1:N).*h;

ms = ms + Ms; % update synthesis stage frame index

end

Aufgabe 6.1

Die vorgestellten Algorithmen bieten ein weites Feld fur Experimen-te und Verbesserungen. Bei den Tests mit Sprachsignalen werden Siefeststellen, daß neben der Zeit- oder Frequenzskalierung auch ein gerin-ger Nachhall zu horen ist. Bei Musiksignalen fallt dieser Effekt nicht sostark auf. Der Effekt wird deutlicher, wenn die Lange des Zeitfensterserhoht wird. Um die Ursachen dieser Beobachtung aufzuspuren, bestim-men Sie die Impulsantworten der Systeme. Da die Systeme zeitvariantsind, mussen dabei die Antworten auf δ(n−k)-Impulsen mit verschiede-nen Verzogerungszeiten k gemessen werden, um die zweidimensionaleImpulsantwort h(n, k) zu erhalten (siehe Gl. 2.4 auf Seite 28).Testen Sie die Systeme mit Sinussignalen und prufen Sie, ob die Amplitu-den der Ausgangssignale konstant sind oder eine Modulation aufweisen.Wiederholen Sie dieses Experiment mit Chirp-Signalen und versuchenSie eine optimale Zeitfensterlange zu bestimmen. Versuchen Sie die Er-gebnisse der Experimente zu interpretieren.

Page 190: MATLABr-Programmierung · 1Eingaben in MATLABr sollten keine deutschen Sonderzeichen wie ¨a, ¨o, ¨u,ß enthalten, wenn die Programme auch im nichtdeutschsprachigen Raum eingesetzt

182 6 Anwendungen aus dem Bereich der Audiotechnik

6.2 Entstorung verrauschter Audiosignale

Ein vielfacher Wunsch von Liebhabern alter Tonaufzeichnungen ist die Unter-druckung von Storungen, die der Musikaufnahme zwar eine gewisse “Patina” ge-ben, das Abhoren aber doch mehr oder weniger stark beeintrachtigen. Vereinzelteimpulsformige Storungen (Knacklaute) kann ein Signalverarbeiter auch manuellmit einem guten Signaleditor entfernen.3 Bei rauschartigen Storungen geht dieStorungsunterdruckung nur mehr mit ausgefeilten Algorithmen der digitalen Si-gnalverarbeitung. Im folgenden Abschnitt wird daher ein Verfahren behandelt, dasbesonders bei Musiksignalen, die mit maßig starkem Platten- oder Tonbandrau-schen gestort sind, sehr gute Ergebnisse liefert. Diese Ergebnisse lassen sich jedochnur dann erzielen, wenn die Storung einigermaßen stationar ist und man die Storsi-gnalparameter (Leistungsdichtespektrum) z.B. in einem Pausenintervall schatzenkann. Dieser Fall ist bei alten Tonaufzeichnungen haufig gegeben, da Platten- oderTonbandrauschen ziemlich konstant ist und fur die Messung des Rauschspektrumseinige 100 ms am Beginn der Aufzeichnung ausreichen. Das Verfahren ist mit we-niger guten Ergebnissen auch fur Sprache geeignet. Allerdings sind Sprachsignalemeistens durch Umgebungsgerausche gestort, die stark nichtstationar sind. DieMessung der Storspektren ist daher nur mit relativ großen Fehlern moglich undbeeintrachtigt daher die Qualitat der Entstorung.

Das hier behandelte Verfahren beruht wieder auch der STFT, die effizient mitder DFT-Filterbank realisiert wird. Zur Unterdruckung von Storungen wird dieSTFT XST (k,m) = Xk(m) des verrauschten Signals mit reellwertigen, positivenFaktoren gk(m) multipliziert. Mit diesen modifizierten spektralen Komponentenwird danach das Zeitsignal rekonstruiert (siehe Abb. 6.2).

s(n)

DFT

(Analyse)

IDFT

(Synthese)

s(n) + w(n)

k = 0, 1, . . . , N − 1

gk(m)

Xk(m) Xk(m)

Abbildung 6.2: Blockschaltbild derN -Kanal DFT-Analyse- und Synthesefilterbankzur Signalentstorung

Die Faktoren gk(m) werden fur jeden Block (Frame) m und Kanal k berechnetund nehmen dort Werte nahe 1 an, wo das Nutzsignal s(n) stark vertreten ist. In

3Eine sehr gute Darstellung verschiedener automatischer Verfahren zur Unterdruckung vonImpulsstorungen (und anderer unerwunschter Einflusse) findet man in [43].

Page 191: MATLABr-Programmierung · 1Eingaben in MATLABr sollten keine deutschen Sonderzeichen wie ¨a, ¨o, ¨u,ß enthalten, wenn die Programme auch im nichtdeutschsprachigen Raum eingesetzt

6.2 Entstorung verrauschter Audiosignale 183

Bereichen der Zeit-Frequenzebene mit starken Storanteilen wird gk(m) hingegenkleine Werte aufweisen. Dabei wird der Ubergang von gk(m) ≈ 1 auf gk(m) ≈ 0nicht abrupt, sondern graduell nach einer bestimmten Abschwachungscharakteri-stik erfolgen. Diese plausiblen Vermutungen werden durch eine eingehende Analy-se mit Methoden der Parameterschatzung bestatigt, die hier in den Grundzugenerlautert werden sollen.

Die Aufgabe besteht in einer moglichst guten Schatzung des Betrags (Am-plitude) Ak(m) der STFT des Nutzsignals s(n) anhand der STFT des gestortenSignals

Xk(m) = Ak(m)ejϕk(m) +Wk(m), k = 0, 1, . . . , N − 1. (6.10)

(Wk(m) ist die STFT des additiven Storsignals). Bei diesem Ansatz wird nur dieAmplitude Ak(m) der STFT modifiziert und die Phase ϕk(m) bleibt unverandert,da bei der gehormaßigen Wahrnehmung in erster Linie die Amplitudeninformationmaßgebend ist. Fur die Schatzung Ak(m) der STFT-Amplitude kann eine Rei-he statistischer Verfahren angewendet werden, von denen sich Bayes-Schatzerbesonders hervorheben [44]. Bayes-Schatzer (MMSE-Schatzer) minimieren denmittleren quadratischen Fehler

E

(

Ak(m)− Ak(m))2

(6.11)

fur jeden Frame m und Kanal k unter Verwendung von Vorausinformation in Formvon Wahrscheinlichkeitsdichtefunktionen. Diese Vorausinformation (a priori Wis-sen) kann in der Praxis nur in wenigen Fallen bestimmt werden, so daß man gerneauf ein statistisches Modell mit unabhangigen, gaußschen Zufallsvaria-blen zuruckgreift. In diesem Fall kann der MMSE-Schatzer Ak(m) auch analy-tisch berechnet werden. Die Ergebnisse der Herleitung, die in [45] durchgefuhrtist, sollen hier kurz angegeben werden. Sie bilden die Grundlage des verwende-ten Entstorungsverfahrens. In den folgenden Beziehungen wird aus Grunden derUbersichtlichkeit die Zeitabhangigkeit (Frame-Index m) der Variablen weggelas-sen. Nach [45] ist der optimale Amplitudenschatzer

Ak = E Ak|Xk =

∫ ∞

0

∫ 2π

0

akp(Xk|ak, ϕk)p(ak, ϕk)dϕkdak∫ ∞

0

∫ 2π

0

p(Xk|ak, ϕk)p(ak, ϕk)dϕkdak

(6.12)

mit den bedingten Wahrscheinlichkeitsdichtefunktionen

p(Xk|ak, ϕk) =1

πPw(k)e−

|Xk−akejϕk |2

Pw(k) (6.13)

und

p(ak, ϕk) = p(ak) =ak

πPs(k)e−

a2k

Ps(k) (6.14)

Page 192: MATLABr-Programmierung · 1Eingaben in MATLABr sollten keine deutschen Sonderzeichen wie ¨a, ¨o, ¨u,ß enthalten, wenn die Programme auch im nichtdeutschsprachigen Raum eingesetzt

184 6 Anwendungen aus dem Bereich der Audiotechnik

Pw(k) bzw. Ps(k) sind die Leistungen (Varianzen) der spektralen Rausch- bzw.Nutzsignalkomponenten in den einzelnen Kanalen. Eine geduldige Auswertung derIntegrale liefert nach langeren Manipulationen die gesuchten Gewichtungsfaktorengk(m) der Filterbank in Abb. 6.2:

gk(m) = f(Rpostk(m), Rpriok(m)

)

=

√π

2

1

1 +Rpostk(m)

Rpriok(m)

1 +Rpriok(m)G (vk(m)) ,

(6.15)

mit

G (vk(m)) = e−vk(m)

2

[

(1 + vk(m))I0

(vk(m)

2

)

+ vk(m)I1

(vk(m)

2

)]

(6.16)

und

vk(m) =(1 +Rpostk(m)

) Rpriok(m)

1 +Rpriok(m). (6.17)

I0 bzw. I1 sind die modifizierten Besselfunktionen nullter und erster Ordnung. DieVariablen Rprio = Ps

Pwbzw. Rpost = Px

Pw− 1 werden nach [45] als a prior SNR

bzw. a posteriori SNR bezeichnet. Die Bezeichnungen fur diese Großen und de-ren Interpretation in [45] sind etwas verwirrend. Mehr Durchblick verschafft dieAnalyse der Bedeutung dieser Variablen in [46]. In Abb. 6.3 sind die Kurvenscha-ren von gk(m) nach Gl. 6.15 dargestellt. Alle Parameter sind im logarithmischenMaßstab (dB) aufgetragen. Der Kurvenparameter Rpost umfaßt 18 Werte, die imlinearen Maßstab die Werte

Rpost ∈ 0.1, 0.3, 0.7, 1, 1.5, 2, 2.5, 3, 4, 5, 6, 8, 10, 12, 14, 16, 20, 30(6.18)

annehmen. Diese Skala uberdeckt den fur die Praxis relevanten Wertebereich. Diedominante Variable fur den Faktor gk ist nach Abb. 6.3 Rprio = Ps

Pw. Wird die

Nutzsignalleistung Ps im Kanal kleiner, dann wird auch gk reduziert. Die Feinab-stimmung erfolgt durch den Parameter Rpost = Px

Pw− 1, der ein zu Rprio umge-

kehrtes Verhalten aufweist: Bei kleineren Nutzsignalleistungen wird eine flachereAbschwachungscharakteristik ausgewahlt. Die Bedeutung dieses ungewohnlichenVerhaltens ist in [46] genau analysiert. Wesentlich dabei ist der Unterschied zwi-schen Rprio und Rpost, die ja beide das SNR in jedem Kanal messen. In Rprio wirddie unbekannte Leistung Ps der Nutzsignalkomponente verwendet, die im prak-tischen Einsatz anhand der Daten des vorhergegangenen Frames (Index m − 1)geschatzt wird. Hingegen wird Rpost mit der aktuellen Leistung Px der gestortenSTFT-Komponente im aktuellen Frame (Index m) bestimmt. In [45] werden beideParameter folgendermaßen geschatzt:

Rpost(k,m) =

|Xk(m)|2

Pw(k,m) − 1 |Xk(m)|2 > Pw(k,m)

0 sonst(6.19)

Page 193: MATLABr-Programmierung · 1Eingaben in MATLABr sollten keine deutschen Sonderzeichen wie ¨a, ¨o, ¨u,ß enthalten, wenn die Programme auch im nichtdeutschsprachigen Raum eingesetzt

6.2 Entstorung verrauschter Audiosignale 185

−30 −20 −10 0 10 20 30−50

−40

−30

−20

−10

0

10

Rprio

= Ps / P

w in dB

gk in

dB

Kurvenparameter Rpost

= Px / P

w − 1 in dB

14.7712

−10

Abbildung 6.3: Beispiel der Abschwachungscharakteristik fur die Faktoren gk(m)bei der Signalentstorung mit der DFT-Filterbank (Kurvenparameter 10 log10Rpost

mit Rpost aus Gl. 6.18)

und

Rprio(k,m) = (1− α)Rpost(k,m) + αgk(m− 1) |Xk(m− 1)|2

Pw(k,m− 1). (6.20)

Der Faktor α ≈ 0.97 . . . 0.99 in Gl. 6.20 gewichtet die Einflusse des SNR-Schatzwer-tes im vorangegangenen Frame und im aktuellen Frame. Durch die Berucksichti-gung aufeinanderfolgender Frames erfahrt Rprio(k,m) eine zeitliche Mittelung und

wird im Gegensatz zu Rpost(k,m) weniger stark schwanken.

In Tabelle 6.2 sind die Gleichungen des Algorithmus zur Berechnung der Fak-toren gk(m) zusammengestellt. Der Algorithmus muß in jedem Frame m fur dieFrequenzindizes k = 0, 1, . . . , N2 ausgefuhrt werden. Dabei ist der großte Rechen-aufwand naturlich die Berechnung der Abschwachungskurven. Fur den praktischenEinsatz ist es jedoch vollkommend ausreichend, diese Kurven als Tabellen voraus-zuberechnen. Die Funktion f(·) (siehe auch Gl. 6.15) wird daher als Tabelle gespei-chert, mit typisch 128 Werten fur rk und 18 Werten von Rpost(k) (siehe Gl. 6.18).Dabei wird abweichend zu Abb. 6.3 rk anstelle von Rprio(k) als Variable verwen-det, da rk stets zwischen 0 und 1 liegt. Zur Steuerung der Rauschunterdruckungwird in Tabelle 6.2 rk(m) nach unten auf ρ ≈ 0.01 . . . 0.05 begrenzt. Damit wirderreicht, daß ein geringfugiges Restrauschen am Systemausgang vorhanden ist, das

Page 194: MATLABr-Programmierung · 1Eingaben in MATLABr sollten keine deutschen Sonderzeichen wie ¨a, ¨o, ¨u,ß enthalten, wenn die Programme auch im nichtdeutschsprachigen Raum eingesetzt

186 6 Anwendungen aus dem Bereich der Audiotechnik

Tabelle 6.2: Algorithmus zur Berechnung der Gewichtungsfaktoren gk(m)

Px(k,m) = |Xk(m)|2 k = 0, 1, . . . ,N

2

Rpost(k,m) = max

(

0,Px(k,m)

Pw(k,m)− 1

)

Rprio(k,m) = (1− α)Rpost(k,m) + αgk(m− 1)Px(k,m− 1)

Pw(k,m− 1)

rk(m) = max

(

ρ,Rprio(k,m)

1 + Rprio(k,m)

)

gk(m) = f(

Rpost(k,m), rk(m))

einerseits Artefakte (“Musical Tones”) im entstorten Signal verdeckt. Andererseitswird durch die Begrenzung von rk(m) (und damit auch von gk(m)) das Nutzsignalnicht zu stark beeintrachtigt.

Das folgende Programm zeigt die Implementierung des Signalentstorungssy-stems mit MATLABr. Nach der Berechnung der Tabelle (Matrix G) fur die Ab-schwachungskurven wird die spektrale Rauschleistung Pw(k) fur jeden Frequenz-punkt durch Mittelung der STFT-Betragsquadrate uber alle Frames bestimmt.Dazu muß mit w ein Stuck Rauschsignal zur Verfugung stehen, das z.B. einer Pau-se entnommen werden kann. Fur den Entstorungsalgorithmus wird als Rauschin-formation nur mehr Pw(k) (evt. geringfugig verstarkt mit A2

w) weiterverwendet,d.h. das Rauschen wird als stationar angenommen. Das Rauschspektrum kannweißes oder gefarbtes Rauschen (Rosarauschen, z.B. 1/f -Rauschen) umfassen.

In der Filterbankroutine des Programms, die in der Grundstruktur jener derProgramme fur die Pitch- und Zeitskalierung entspricht, erfolgt die Modifikationder spektralen Amplituden nach Tabelle 6.2. Fur die Berechnung der Faktorengk(m) werden zunachst mit r (rk(m)) die Spaltenindizes von G ermittelt, da dieAbschwachungskurven als Zeilen von G gespeichert sind. Im Anschluß daran wirdanhand des gemessenen SNR (Rpost(k,m)) der Index des am nachsten liegendenWertes zum Vektor Rpost (Rpost nach Gl. 6.18) berechnet. Dieser Index selektiertdie entsprechende Zeile in G und wahlt damit die passende Abschwachungscharak-teristik aus der gespeicherten Kurvenschar aus.

Page 195: MATLABr-Programmierung · 1Eingaben in MATLABr sollten keine deutschen Sonderzeichen wie ¨a, ¨o, ¨u,ß enthalten, wenn die Programme auch im nichtdeutschsprachigen Raum eingesetzt

6.2 Entstorung verrauschter Audiosignale 187

function y = enhance(x,w,N,alpha,rho,Aw)

% function y = enhance(x,w,N,alpha,rho,Aw)

%

% signal enhancement using an FFT-filter bank and Ephraim-Malah gain curves

% (assuming stationary, additive noise)

%

% x noisy, real-valued input signal

% w noise sequence used to estimate noise spectral power density

% N time window length

% alpha parameter in [0,1] for a priori SNR estimate (typ. 0.985)

% rho minimum of a priori parameter r = SNR/(1+SNR) (typ. 0.015)

% Aw gain for noise spectral power density (typ. 1...1.2)

% y de-noised signal

%

% G. Doblinger, TU-Wien, 12-1994

if nargin == 0

help enhance

return

end

if alpha < 0 | alpha > 1

error(’alpha must be in [0,1]’);

end

alpha1 = 1-alpha;

M = round(N/4); % decimation factor (frame hop size)

h = hanning(N); % time window function

h = 2*sqrt(M/N)*h(:);

Nf = 2^ceil(log2(N)); % FFT length (power of 2 >= N)

Nh = Nf/2+1;

x = [x(:) ; zeros(N-length(x),1)]; % append zeros, if necessary

Nx = length(x);

w = [w(:) ; zeros(N-length(w),1)];

Nw = length(w);

% compute gain factor matrix G of Ephraim-Malah gain curves

Nrp = 18; % number of gain curves

Nr = 128; % number of points per gain curve

Nr1 = Nr-1;

Rprio_min_dB = -30; % min, max dB-values for Rprio

Rprio_max_dB = 30;

Rprio_min = 10^(Rprio_min_dB/10);

Rprio_max = 10^(Rprio_max_dB/10);

Rpost = [0.1;0.3;0.7;1;1.5;2;2.5;3;4;5;6;8;10;12;14;16;20;30];

r = linspace(Rprio_min/(1+Rprio_min),Rprio_max/(1+Rprio_max),Nr);

% r = Rprio/(1+Rprio)

Page 196: MATLABr-Programmierung · 1Eingaben in MATLABr sollten keine deutschen Sonderzeichen wie ¨a, ¨o, ¨u,ß enthalten, wenn die Programme auch im nichtdeutschsprachigen Raum eingesetzt

188 6 Anwendungen aus dem Bereich der Audiotechnik

V = (1+Rpost)*r;

G = 0.5*sqrt(pi*(1./(1+Rpost))*r).*exp(-0.5*V).*...

real((1+V).*besseli(0,0.5*V) + V.*besseli(1,0.5*V));

G = G/max(max(G’));

% compute estimate of noise spectral power density

Pw = zeros(Nh,1);

for m = 1:M:Nw-N+1 % frame index loop

X = fft(w(m:m+N-1).*h,Nf);

Pw = Pw + abs(X(1:Nh)).^2; % sum of squared magnitudes

end

Nfr = ceil(Nw/M);

Pw = Aw^2/Nfr*Pw + eps; % apply gain and number of frames

y = zeros(Nx,1);

gain = zeros(Nh,1);

Px = zeros(Nh,1);

% enhancement of signal frames

for m = 1:M:Nx-N+1

% analysis filter bank

X = fft(x(m:m+N-1).*h,Nf);

% compute gain factor, modify STFT

Pprio = alpha*Px.*gain.^2;

Px = abs(X(1:Nh)).^2; % new STFT squared magnitude

Ppost = max(0,Px - Pw);

Pprio = Pprio + alpha1*Ppost; % estimated power for a priori SNR

r = max(rho,Pprio./(Pprio+Pw));

ic = 1 + round(Nr1*r); % column index for gain matrix

SNR = Ppost ./ Pw; % estimated a posteriori SNR

for k=1:Nh % gain factor table look-up

[dum,ir] = min(abs(SNR(k)-Rpost)); % find index of nearest Rpost

% (row index of gain matrix)

gain(k) = G(ir,ic(k));

end

X = X .* [gain ; gain(Nh-1:-1:2)]; % apply gain factor

y1 = real(ifft(X,Nf)); % DFT synthesis filter bank

y(m:m+N-1) = y(m:m+N-1) + y1(1:N).*h;

end

Page 197: MATLABr-Programmierung · 1Eingaben in MATLABr sollten keine deutschen Sonderzeichen wie ¨a, ¨o, ¨u,ß enthalten, wenn die Programme auch im nichtdeutschsprachigen Raum eingesetzt

6.2 Entstorung verrauschter Audiosignale 189

Das Testen des Programms kann beispielsweise mit den folgenden MATLABr-Befehlen durchgefuhrt werden:

[x,Fs] = wavread(’quanto_e_bella.wav’); % load a piece of music

N = 1024; % FFT window size (suitable for

% sampling freq. Fs = 16 kHz)

SNR = 20; % SNR in dB of noisy signal

w = randn(size(x));

w = (norm(x)/norm(w)) *10^(-SNR/20) * w;

xn = x + w; % add noise

y = enhance(xn,w,N,0.985,0.015,1);

sound(xn,Fs) % play noisy signal

sound(y,Fs) % play enhanced signal

Aufgabe 6.2

Mit dem angegebenen Signalentstorungsverfahren konnen eine Reihe vonExperimenten ausgefuhrt werden. Speziell die richtige Wahl der Parame-ter hat einen starken Einfluß auf die Qualitat des entstorten Signals. DieParameterwahl sollte mit einer Auswahl einiger Musik- oder Sprachsi-gnalproben vorgenommen werden. Abtastfrequenzen von 11.025 kHz, 16kHz oder maximal 22.05 kHz sind gegenuber 44.1 kHz zu bevorzugen,um die Signallangen (und damit die Rechenzeit) relativ kurz zu halten.Bei Musiksignalen wird man ein Zeitfenster im Bereich von 40 ms bis 60ms wahlen, wahrend bei Sprachsignalen die Dauer des Zeitfensters um 20ms liegt. Dementsprechend sind die Fensterlangen N an das Testmaterialanzupassen. Folgende Untersuchungen konnen als Anregung dienen:

a) Bei welchem SNR am Eingang des Systems verschlechtert sich dasSystemverhalten drastisch?

b) Berechnen Sie mit der MATLABr-Funktion specgram() die Spek-trogramme des verrauschten Eingangssignals und des entstortenSignals. Beobachten Sie dabei die zeitvariante Filterfunktion desSystems.

c) Wie ist das Systemverhalten, wenn Sie ahnlich wie mit der Wavelet-Transformation auf Seite 169 ein verrauschtes Chirp-Signal verar-beiten?

Page 198: MATLABr-Programmierung · 1Eingaben in MATLABr sollten keine deutschen Sonderzeichen wie ¨a, ¨o, ¨u,ß enthalten, wenn die Programme auch im nichtdeutschsprachigen Raum eingesetzt

190 6 Anwendungen aus dem Bereich der Audiotechnik

Aufgabe 6.3

In dieser Aufgabe sollen drei Experimente zur Bestimmung der Verfor-mung des entstorten Signals durch den Rauschunterdruckungsalgorith-mus durchgefuhrt werden. Diese Untersuchungen sind insbesondere beider Restaurierung gestorter Musikaufnahmen von Bedeutung. Die Ergeb-nisse sollen in erster Linie der richtigen Wahl der Parameter N , α undρ des Algorithmus von Tabelle 6.2 dienen. Eine analytische Behandlungzu dieser Problematik kann in [47] nachgelesen werden.

a) Verwenden Sie verrauschte Sinussignale mit konstanter Amplitudeund Frequenzen von 400 Hz, 1 kHz und 3 kHz zur Bestimmungder jeweiligen Grenze, ab der das System diese Tone unterdruckt,obwohl sie im verrauschten Signal noch horbar sind. Versuchen Sieeine optimale Wahl der Parameter zu finden und testen Sie dasErgebnis mit leiser Musik (z.B. zarte Geigen- oder langgezogeneFlotentone).

b) Mit diesem Experiment soll das Einschwingverhalten des Ent-storverfahrens analysiert werden. Dazu werden eingeschaltete, ver-rauschte Sinussignale mit den Frequenzen aus der vorhergehendenTeilaufgabe eingesetzt. Messen Sie das Ein- und Ausschwingver-halten (Dauer) des Systems in Abhangigkeit von der Amplitudedes Sinussignals und der Fensterdauer N . Testen Sie die Horbar-keit der transienten Verzerrungen mit hart angeschlagenen Klavier-oder Gitarrenklangen.

c) Untersuchen Sie die Modulation von Sinussignalen mit dem im be-treffenden Filterbankkanal liegenden Rauschen. Ab welchem SNRam Systemeingang wird eine Klanganderung durch das Restrau-schen horbar?

Page 199: MATLABr-Programmierung · 1Eingaben in MATLABr sollten keine deutschen Sonderzeichen wie ¨a, ¨o, ¨u,ß enthalten, wenn die Programme auch im nichtdeutschsprachigen Raum eingesetzt

A

Kurzbeschreibung derMATLABr Syntax

In diesem Abschnitt werden die wesentlichen Merkmale der MATLABr-Syntaxerlautert, um fur Anfanger das Verstandnis der Programmbeispiele dieses Bu-ches in einem raschen ersten Uberblick zu fordern. Fur eine ausfuhrliche Beschrei-bung und fur die Referenz der einzelnen Befehle ist naturlich die MATLABr-Dokumentation vorzuziehen. Die Kurzfassung ist auf den MATLABr-Kern be-schrankt, also auf jenen Teil der Programmiersprache, der fur die Umsetzung vonAlgorithmen in die MATLABr-Sprache erforderlich ist. Die Ein- und Ausgabevon Daten mit Files entspricht sehr gut der C-Syntax und wird hier nicht be-handelt. Ebenso wird nicht auf die umfangreichen Moglichkeiten zur graphischenDarstellung von Daten und auf die Programmierung graphischer Benutzerober-flachen eingegangen. Hier muß auf die umfangreiche MATLABr-Dokumentationverwiesen werden. Ferner muß auch auf die Darstellung der Beschleunigung vonMATLABr-Programmen durch Anwendung von MEX-Files und MATLABr-Com-piler zur Generierung eigenstandiger Programme verzichtet werden. Diese Erwei-terungen von MATLABr sollten erst mit ausreichenden MATLABr-Kenntnisseneingesetzt werden. Außerdem mussen diese Programme an die jeweils eingesetz-te Rechnerarchitektur angepaßt werden, so daß der große Vorteil von MATLABr,namlich die unmittelbare Ausfuhrbarkeit von M-Files auf allen unterstutzten Rech-nern, verloren geht.

Page 200: MATLABr-Programmierung · 1Eingaben in MATLABr sollten keine deutschen Sonderzeichen wie ¨a, ¨o, ¨u,ß enthalten, wenn die Programme auch im nichtdeutschsprachigen Raum eingesetzt

192 A Kurzbeschreibung der MATLABr Syntax

A.1 Vektoren und Matrizen

In MATLABr sind die grundlegenden Datentypen (Objekte) im allgemeinen Fallzweidimensionale, komplexwertige Matrizen. Daruber hinaus gibt es wie in derProgrammiersprache C auch mehrdimensionale Arrays und Strukturen. Die Re-chenregeln sind automatisch auf diese Objekte zugeschnitten und entsprechen denin der Mathematik gewohnten Operationen. Objekte unterschiedlicher Dimensionkonnen verknupft werden (z.B. Skalare mit Vektoren etc.), sofern die Operationarithmetisch sinnvoll ist. Bei nichterlaubten Verknupfungen antwortet MATLABr

mit Fehlermeldungen. Meistens genugt dann die Kontrolle der Dimensionen mitsize(), um z.B. festzustellen, daß irrtumlich eine 2 × 2 Matrix zu einer 3 × 3Matrix addiert werden soll. Die Eingabe einer Matrix erfolgt beispielsweise in derForm

A = [1 2 3; 4 5 6; 7 8 9]

Wird die Eingabezeile nicht mit einem Strichpunkt abgeschlossen, dann erscheintdie Matrix am Bildschirm:

A =

1 2 3

4 5 6

7 8 9

Mit einem Strichpunkt am Ende der Eingabezeile wird die Matrix erzeugt, jedochnicht ausgegeben. Es gibt einige spezielle Matrizen, die haufig in den Beispielenvorkommen:

A = eye(3); 3× 3 Einheitsmatrix

A = zeros(2,4); 2× 4 Matrix aus Nullen

A = ones(5,1); 5× 1 Matrix (Spaltenvektor) aus Einsen

A = ones(1,3); 1× 3 Matrix (Zeilenvektor) aus Einsen

A = []; leere Matrix

Die Dimension einer Matrix wird mit size(A) festgestellt, wobei der ersteausgegebene Wert die Anzahl der Zeilen und der zweite Wert jene der Spalten ist.Bei Vektoren kann deren Lange auch mit length(x) bestimmt werden.

Die Selektion einzelner Matrixelemente erfolgt z.B. mit A(2,3). Wichtigist dabei, daß Indizes nicht negativ oder null sind, d.h. die Zahlung beginntin MATLABr stets mit eins! Bei nichtganzzahligen Indizes wird gerundet undeine Warnung am Bildschirm ausgegeben. Im Fall komplexwertiger Indizes wirdnur der Realteil verwendet und ebenfalls eine Warnung angezeigt. Indizes konnenauch Vektoren sein, um Gruppen von Matrixelementen auszuwahlen:

Page 201: MATLABr-Programmierung · 1Eingaben in MATLABr sollten keine deutschen Sonderzeichen wie ¨a, ¨o, ¨u,ß enthalten, wenn die Programme auch im nichtdeutschsprachigen Raum eingesetzt

A.1 Vektoren und Matrizen 193

i1 = [1 3 2];

x = A(i1,1);

Mit dem Indexvektor i1 werden aus A die Elemente A(1,1), A(3,1) und A(2,1)

entnommen und in dieser Reihenfolge im Spaltenvektor x gespeichert. Man kannauch ganze Spalten oder Zeilen mit dem : Operator auswahlen, z.B. ergibt x =

A(:,1) die erste Spalte von A, oder x = A(3,:) liefert die dritte Zeile von A.

Der : Operator kann aber auch zum Inkrementieren eingesetzt werden, um ineinfacher Weise Vektoren mit Zahlenwerten zu belegen. So erzeugt x = 1:10 einenZeilenvektor mit den Zahlen 1 bis 10 als Elemente. Die Anweisung x = 0:2:10 lie-fert die geraden Zahlen von 0 bis einschließlich 10. Hingegen ergibt x = -1:0.1:1

die Zahlenfolge −1− 0.9− 0.8 . . . 1, gespeichert im Zeilenvektor x. Selbstverstand-lich kann das Inkrement auch negativ sein. Fur die Initialisierung von Vektoren miteiner vorgegebenen Anzahl von Werten ist die Funktion x = linspace(0,1,50)

(50 aquidistante Werte von 0 . . . 1) oder x = logspace(0,5,50) (50 Werte in lo-garithmischer Unterteilung von 100 . . . 105) vorgesehen.

Der : Operator hat schließlich noch eine weitere Aufgabe, namlich das An-einanderfugen aller Spalten einer Matrix zu einem langen Spaltenvektor. So kannmit x = A(:) der Spaltenvektor x erzeugt werden, indem an die erste Spalte vonA die zweite angefugt wird usw. und das Ergebnis im Spaltenvektor x gespeichertwird. Ist y ein beliebiger Vektor, dann ist x = y(:) zwingend ein Spaltenvektor.

Durch Verwendung von eckigen Klammern konnen Matrizen zu großerenMatrizen kombiniert werden, also Blockmatrizen erzeugt werden. So wird mit A

= eye(10) B = zeros(5,10) und der Anweisung A = [A ; B] an die 10 × 10dimensionale Einheitsmatrix A die 5 × 10 dimensionale Nullmatrix B angefugt (Aist dann eine 15× 10 Matrix).

Bei der Matrizenmultiplikation muß die innere Dimension ubereinstimmen,d.h. die Anzahl der Spalten der ersten Matrix muß gleich der Anzahl der Zeilen derzweiten Matrix sein. Die Addition und Subtraktion erfordert fur beide Matrizendie gleichen Dimensionen, mit der Ausnahme, daß skalare Großen mit jeder Ma-trix verknupft werden konnen (und zwar elementweise). Auch fur Multiplikation,Division (/) und Potenzoperation (^) gibt es in MATLABr die elementweiseVerknupfung. So bedeutet z.B. C = A .* B, daß jeweils Elemente mit gleichenIndizes miteinander multipliziert werden. Im Gegensatz dazu wird mit C = A *

B die ubliche Matrizenmultiplikation (Zeilenvektor mal Spaltenvektor fur jedesElement) ausgefuhrt. Die Potenzoperation kann z.B. mit x = 10.^[0:6] oderA = [1 2 3;4 5 6].^ [1 2 3;4 5 6] ebenfalls elementweise ausgefuhrt werden.Ganzzahlige Potenzen von Matrizen werden in MATLABr durch wiederholte Mul-tiplikation berechnet. Fur andere Potenzen erfolgt die Berechnung uber die Eigen-wertzerlegung der Matrix.

Die Vergleichsoperationen < ≤ > ≥ ≡ 6≡ (< <= > >= == ~=) wirken ele-mentweise auf Matrizen. Das Ergebnis ist eine Matrix gleicher Dimension mit

Page 202: MATLABr-Programmierung · 1Eingaben in MATLABr sollten keine deutschen Sonderzeichen wie ¨a, ¨o, ¨u,ß enthalten, wenn die Programme auch im nichtdeutschsprachigen Raum eingesetzt

194 A Kurzbeschreibung der MATLABr Syntax

Einselementen dort, wo die Bedingung erfullt ist und null sonst. In ahnlicher Weisearbeiten die Logikoperationen UND ODER NICHT (& | ~) von MATLABr.Ferner gibt es auch Funktionen wie find(), any(), all(), mit denen Matrizennach bestimmten Elementeigenschaften durchsucht werden konnen:

A = [1 2 3;4 5 6];

[i,j] = find(A >= 2 & A <= 5)

i =

2

1

2

1

j =

1

2

2

3

Fur die Transposition von Matrizen gibt es in MATLABr zwei Moglich-keiten: Mit B = A.’ werden Spalten mit Zeilen vertauscht. Im Gegensatz dazubewirkt B = A’ (also kein . vor ’), daß zusatzlich die Elemente konjugiert kom-plex genommen werden. Wenn also nur Zeilen mit Spalten vertauschen werdensollen, dann ist es ratsam, generell die erste Variante zu verwenden, da diese auchbei komplexen Zahlen das gewunschte Ergebnis liefert!

In MATLABr konnen Variable von mathematischen Funktionen auch Vekto-ren oder Matrizen sein, so daß mit einem einzigen Befehl der Verlauf einer ein-oder zweidimensionalen Funktion berechnet werden kann. So erhalt man z.B. mitx=sin([0:pi/10:2*pi]) alle Sinuswerte fur Argumente 0 . . . 2π (Inkrement π

10 )auf einmal. Durch diese Eigenschaft von MATLABr ist es z.B. moglich, einfacheAufgaben ohne Programmschleifen zu losen.

A.2 Cell-Arrays und Strukturen

Cell-Arrays in MATLABr sind ubergeordnete Variable in Form von Arrays, diein ihren Elementen die unterschiedlichsten Objekte, wie Matrizen, Vektoren, Zei-chenketten (Strings), speichern konnen. Die einzelnen Zellelemente konnen wie dieElemente von Matrizen adressiert werden. Anstelle von runden Klammern werdengeschweifte Klammern verwendet.

clear A

A1,1 = [1 2 3; 4 5 6];

A1,2 = ’Besetzt’;

Page 203: MATLABr-Programmierung · 1Eingaben in MATLABr sollten keine deutschen Sonderzeichen wie ¨a, ¨o, ¨u,ß enthalten, wenn die Programme auch im nichtdeutschsprachigen Raum eingesetzt

A.2 Cell-Arrays und Strukturen 195

A2,1 = sin(pi/2*[0:4]);

A2,2 = [];

celldisp(A)

A1,1 =

1 2 3

4 5 6

A2,1 =

0 1.0000 0.0000 -1.0000 -0.0000

A1,2 =

Besetzt

A2,2 =

[]

x = A1,1(2,2)

x = 5

x = A2,1(4)

x =

-1

In diesem Beispiel wird zunachst mit clear A sichergestellt, daß die Variable A

nicht bereits fur andere Daten (z.B. eine Matrix) verwendet wird. Als Alterna-tive kann A mit A = cell(2,2) als (leeres) Cell-Array reserviert werden. Mitcelldisp() wird der Inhalt des Cell-Array angezeigt (die Eingabe von A stelltden Inhalt in kompakter Form dar). Die letzten Befehle zeigen, wie einzelne Datenaus Cell-Arrays ausgelesen werden konnen. Cell-Arrays verhalten sich also wie Ma-trizen und konnen auch Funktionsargumente sein. Dadurch lassen sich MATLABr-Funktionen universell gestalten und lange Parameterlisten bei Funktionen vermei-den. Beispielsweise konnte der Aufruf der Funktion enhance() auf Seite 189 miteinem Cell-Array X als Argumentliste wie folgt aussehen:

% call of y = enhance(xn,w,N,0.985,0.015,1) with a cell argument

X = cell(6,1);

X1 = xn;

X2 = w;

X3 = N;

X4 = 0.985;

X5 = 0.015;

X6 = 1;

y = enhance(X(:)); % call function with all 6 arguments

In diesem Zusammenhang sei auf die sehr praktischen Cell-Arrays varargin undvarargout hingewiesen, mit denen Funktionsargumente mit variabler Lange mog-lich sind. Nahere Einzelheiten konnen mit help varargin in Erfahrung gebrachtwerden.

Page 204: MATLABr-Programmierung · 1Eingaben in MATLABr sollten keine deutschen Sonderzeichen wie ¨a, ¨o, ¨u,ß enthalten, wenn die Programme auch im nichtdeutschsprachigen Raum eingesetzt

196 A Kurzbeschreibung der MATLABr Syntax

Strukturen in MATLABr bestehen aus Feldern, die wie Cell-Arrays unter-schiedliche Objekte enthalten konnen. Strukturen erlauben eine ubersichtliche Or-ganisation von Variablen, die aus mehreren zusammengehorenden Datensatzenbestehen. Ein Beispiel einer solchen Struktur ware ein abgetastetes Signal, zu demneben den Abtastwerten auch die Abtastrate und die Quantisierungswortlangegehoren. Diese drei Angaben beschreiben das Signal und konnen zu einer Strukturzusammengefaßt werden. Mit Strukturen kann man Variable mit ubersichtlichenNamen versehen.

% create structure signal

signal.name = ’unit impulse’;

signal.data = [1 zeros(1,99)];

signal.length = length(signal.data);

% add other signals

signal(2).name = ’unit step’;

signal(2).data = ones(1,200);

signal(2).length = length(signal(2).data);

signal(3).name = ’Quanto e bella’;

[signal(3).data, signa(3).Fs] = wavread(’quanto_e_bella.wav’);

signal(3).length = length(signal(3).data);

signal

signal =

1x3 struct array with fields:

name

data

length

Fs

sig3 = signal(3)

sig3 =

name: ’Quanto e bella’

data: [368603x1 double]

length: 368603

Fs: 16000

Mit diesen Befehlen wird die Struktur signal mit der Dimension 1 × 3 erzeugt.Neue Datensatze konnen zur Struktur hinzugefugt werden, indem einfach ein neuerIndex, etwa signal(2), beim Strukturnamen verwendet wird. Adressiert werden

Page 205: MATLABr-Programmierung · 1Eingaben in MATLABr sollten keine deutschen Sonderzeichen wie ¨a, ¨o, ¨u,ß enthalten, wenn die Programme auch im nichtdeutschsprachigen Raum eingesetzt

A.3 Steuerung des Programmablaufs 197

Strukturen durch die Angabe des Strukturnamens, gefolgt vom Feldnamen (ge-trennt durch einen Punkt). Mit Strukturelementen kann wie mit anderen Variablengerechnet werden:

RMS = norm(signal(3).data);

Tsig = signal(3).length/signal(3).Fs;

y = conv(signal(2).data,signal(3).data);

Strukturen konnen als Funktionsargumente verwendet werden, indem der Struk-turname der Funktion ubergeben wird. Damit lassen sich wie mit Cell-Arrays langeListen von Parametern vermeiden. Strukturen eignen sich auch hervorragend zurubersichtlichen Verwaltung umfangreicher Datensatze. So konnen z.B. alle Signa-le und Parameter eines Experiments in einer Struktur gespeichert werden. Mitsave pitch_scaled_pavarotti signal wird die Struktur signal in der Dateipitch_scaled_pavarotti.mat gespeichert. Mit load pitch_scaled_pavarotti

kann diese Struktur wieder in den MATLABr-Arbeitsspeicher geladen werden.

In den MATLABr-Beispielen im Hauptteil des Buches wurde auf die Verwen-dung von Cell-Arrays und Strukturen aus Grunden der leichteren Lesbarkeit derProgramme verzichtet. Beim Einsatz von Strukturen erkennt man zwar meistenssofort die Bedeutung der Variable anhand des Namens, die meist langen Namenmachen jedoch Formeln unubersichtlich. Das soll aber nicht davon abhalten, beiumfangreicheren MATLABr-Programmen sich die Datenorganisation mit Cell-Arrays und Strukturen genau zu uberlegen. Eine Ubungsaufgabe in diesem Zusam-menhang ware das Erstellen einiger Programme mit Cell-Arrays und Strukturenfur die Aufgaben dieses Buches.

A.3 Steuerung des Programmablaufs

Die Kontrolle des Programmflusses in MATLABr wird mit Verzweigungen wieif-elseif-else, switch-case und Schleifen der Form for und while durch-gefuhrt. Zusatzlich gibt es noch break und return zum vorzeitigen Ausstiegaus Schleifen bzw. Programmen und continue zum Uberspringen von Schleifen-durchlaufen. Fur einen ersten Uberblick genugen die folgenden Beispiele:

if abs(err) <= 1e-5

disp(’algorithm successfully completed’);

return

elseif ~isfinite(err) % error is NaN or Inf or -Inf ?

disp(’WARNING: algorithm is unstable’);

return

else

disp(’WARNING: error limit exceeded’);

Page 206: MATLABr-Programmierung · 1Eingaben in MATLABr sollten keine deutschen Sonderzeichen wie ¨a, ¨o, ¨u,ß enthalten, wenn die Programme auch im nichtdeutschsprachigen Raum eingesetzt

198 A Kurzbeschreibung der MATLABr Syntax

return

end

switch wintype

case 1

h = hanning(N);

case 2

h = blackman(N);

case 3

h = kaiser(N,beta);

otherwise

error(’invalid window typ’);

end

n = 1;

y = zeros(size(x));

while n <= N

b = h(n,:);

if isempty(b)

continue % skip rest of loop, goto next iteration

end

y = y + filter(b,1,x);

n = n + 1;

end

y = zeros(size(x));

for n = 1:N

b = h(n,:);

if isempty(b)

break % exit loop

end

y = y + filter(b,1,x);

end

Schleifen verlangsamen den Programmablauf in MATLABr signifikant und solltendaher nach Moglichkeit durch Vektorisierung vermieden werden. Viele Funktio-nen, wie z.B. fft(X), konnen auf Spalten von Matrizen angewendet werden, sodaß mit einem einzigen Befehl gleich eine Schar von Datenvektoren verarbeitetwerden kann. Die Vektorisierung erschwert jedoch am Anfang die Lesbarkeit, sodaß fur den ersten Entwurf eines Programms Schleifen vorzuziehen sind. Erst nacherfolgreichen Tests sollte die schrittweise Entfernung der Schleifen vorgenommenwerden. Da eine Vektorisierung meistens mit einem erhohten Speicheraufwand ver-bunden ist, kann mit einer Zeitmessung (Funktion etime()) beobachtet werden,

Page 207: MATLABr-Programmierung · 1Eingaben in MATLABr sollten keine deutschen Sonderzeichen wie ¨a, ¨o, ¨u,ß enthalten, wenn die Programme auch im nichtdeutschsprachigen Raum eingesetzt

A.4 MATLABr-Funktionen 199

ob die Vektorisierung eine Beschleunigung des Programmablaufs bringt.

Eine beschleunigte Ausfuhrung von Schleifen in MATLABr wird auch dadurcherreicht, daß Arrays vor der Schleife bereits auf die maximal benotigte Dimensioninitialisiert werden. Dadurch wird eine laufende Vergroßerung der Dimension desArrays in der Schleife und eine Fragmentierung des Speichers vermieden.

A.4 MATLABr-Funktionen

Die automatische Verarbeitung von MATLABr-Befehlen erfolgt in Dateien, dieals M-Files bezeichnet werden. Diese Dateien haben “m” oder “M” als Dateier-weiterung und konnen als MATLABr-Skript oder als MATLABr-Funktionaufgebaut sein. Ein MATLABr-Skript verwendet keine Argumente und beziehtalle Variablen aus dem MATLABr-Arbeitsspeicher. Es ist als Automatisierung(Stapelverarbeitung) der sonst interaktiven Befehlseingabe gedacht.

MATLABr-Funktion enthalten eine FUNCTION-Anweisung am Beginn desM-Files. Sie konnen Daten uber Eingabeargumente erhalten und Ergebnisse uberAusgabeargumente zuruckliefern.

function y = firfilter(h,x)

%

% y = firfilter(h,x)

% FIR filter implementation

y = filter(h,1,x);

Kommentare am Beginn der Funktion werden mit help firfilter bis zur erstenLeerzeile ausgegeben. Variable, die innerhalb der Funktion verwendet werden, sindlokale Variable und haben (mit Ausnahme der Ausgabeargumente) ihren Gultig-keitsbereich nur in der Funktion. Funktionen konnen Daten auch uber globaleVariable erhalten, die mit der GLOBAL-Anweisung innerhalb und außerhalb derFunktion deklariert werden mussen.

function y = firfilter(x)

%

% y = firfilter(x)

% FIR filter implementation

global G_h

y = filter(G_h,1,x);

Globale Variable sollten durch ihren Namen besonders gekennzeichnet sein (G_hstatt h im Beispiel), um keine Konflikte mit bereits definierten Variablen zu er-zeugen. Eine Anwendung der Beispielfunktion im MATLABr-Kommandofensterware folgende Befehlsfolge:

Page 208: MATLABr-Programmierung · 1Eingaben in MATLABr sollten keine deutschen Sonderzeichen wie ¨a, ¨o, ¨u,ß enthalten, wenn die Programme auch im nichtdeutschsprachigen Raum eingesetzt

200 A Kurzbeschreibung der MATLABr Syntax

global G_h

G_h = hanning(100);

x = ones(1,200);

y = firfilter(x);

Der Einsatz globaler Daten sollte sparsam erfolgen, da Funktionen damit keine“geschlossenen Systeme” mehr sind, die uber unmittelbar ersichtliche Schnittstel-len Daten mit der Außenwelt austauschen. Auch konnen schwer lokalisierbare Feh-ler entstehen, wenn globale Variable durch Funktionen unbeabsichtigt verandertwerden.

In einem M-File konnen mehrere Funktionen hintereinander definiert wer-den. Nach außen sichtbar ist dabei nur die erste Funktion (Hauptfunktion). Dierestlichen Funktionen sind Unterfunktionen, Subfunctions und konnen nur in-nerhalb des M-Files verwendet werden. Ein Beispiel ist das Wavelet-ProgrammDTWT_IDTWT() auf Seite 162, das zwei Unterfunktionen polyafib2(), polysfib2()verwendet.

Werden Funktionen von mehreren anderen Funktionen benotigt, dann konnendiese Funktionen in einem Unterverzeichnis mit dem speziellen Namen privat ge-speichert werden. Diese Private Functions sind nur fur Funktionen im uberge-ordneten Verzeichnis (Hauptverzeichnis) sichtbar. MATLABr sucht bei der Funk-tionsauflosung zuerst nach privaten Funktionen, so daß diese Funktionen auchNamen bereits vorhandener Funktionen in anderen Verzeichnissen haben konnen.Bei großeren MATLABr-Projekten sollte man von der Organisation der M-Filesim privat-Ordner unbedingt Gebrauch machen. Speziell in der Entwicklungsphasevon Programmen wird man mehrere Versionen eines M-Files anlegen. Beim Testenkann dabei eine Version im privat-Ordner gespeichert werden und dort verandertwerden. Die ursprungliche Version im Hauptverzeichnis bleibt unberuhrt.

A.5 Verwendung von eval() und feval()

Fur die Auswertung von Zeichenketten (Strings), die MATLABr-Ausdrucke ent-halten, gibt es die Funktion eval().

Nx = length(x);

if Nx <= 50

plotstring = ’stem’;

else

plotstring = ’plot’;

end

eval([plotstring,’(x)’])

In diesem Beispiel wird abhangig von der Datenanzahl der Vektor x entwederin einem zeitdiskreten Diagramm (Funktion stem()) oder zeitkontinuierlich mit

Page 209: MATLABr-Programmierung · 1Eingaben in MATLABr sollten keine deutschen Sonderzeichen wie ¨a, ¨o, ¨u,ß enthalten, wenn die Programme auch im nichtdeutschsprachigen Raum eingesetzt

A.5 Verwendung von eval() und feval() 201

plot() dargestellt. Diese Auswertung von Strings verlangsamt in MATLABr dieAusfuhrzeit. Fur zeitkritische Routinen ist dazu die Funktionsauswertung mitfeval() besser geeignet.

Nx = length(x);

plotfunct = [@stem, @plot]; % array of function handles

if Nx <= 50

k = 1;

else

k = 2;

end

feval(plotfunct(k),x)

Die Funktion stem() kann bei feval() als String ’stem’ oder als Function-Handle @stem ubergeben werden.1 Die zweite Moglichkeit entspricht der Verwen-dung eines Function-Pointer in der Programmiersprache C. Mit Function-Handleskann man Funktionen in Arrays organisieren und die benotigte Funktion durcheinen Index aus diesem Array auswahlen. Damit lassen sich allgemeine Funktio-nen (wie plotfunct im Beispiel) generieren, die bei ihrer Anwendung dann an denspeziellen Fall angepaßt werden.

1Function-Handles werden ab MATLABr-Version 6.0 unterstutzt.

Page 210: MATLABr-Programmierung · 1Eingaben in MATLABr sollten keine deutschen Sonderzeichen wie ¨a, ¨o, ¨u,ß enthalten, wenn die Programme auch im nichtdeutschsprachigen Raum eingesetzt

202 A Kurzbeschreibung der MATLABr Syntax

Page 211: MATLABr-Programmierung · 1Eingaben in MATLABr sollten keine deutschen Sonderzeichen wie ¨a, ¨o, ¨u,ß enthalten, wenn die Programme auch im nichtdeutschsprachigen Raum eingesetzt

B

Formeln fur Fourier- undZ-Transformation

Zur Kontrolle der Simulationsergebnisse und zur Losung einzelner Aufgaben die-ses Buches mit Papier und Bleistift werden in diesem Abschnitt die wichtig-sten Zusammenhange fur die gebrauchlichsten Transformationen zusammenge-stellt. Diese Beziehungen werden haufig bei der Signalanalyse, Signalsynthese undbei der Beschreibung von Systemen im Frequenzbereich benotigt. Die Kenntnisdieser Zusammenhange erspart vielfach ein muhevolles Auswerten von Integra-len oder Summen. Auch die Losung von Differenzengleichungen mit gegebenenAnfangsbedingungen wird durch den Einsatz grundlegender Beziehungen fur dieZ-Transformation erheblich erleichtert.

In vielen Fallen kann auch durch Ausnutzung der Symmetrieeigenschaften derFouriertransformation der Rechenaufwand erheblich reduziert werden. Fur eine ef-fiziente Programmierung sollten daher beispielsweise die elementaren Eigenschaf-ten der diskreten Fouriertransformation (DFT) immer ausgenutzt werden. Bei-spiele sind gerade (ungerade) Signale, deren DFT rein reell (imaginar) ist, oderreelle N -Punkte Signale, bei denen wegen der Symmetrie der DFT das Spektrumnur bis zur halben Abtastfrequenz berechnet werden muß.

Bei Berucksichtigung der Symmetriebeziehungen werden außerdem z.B. beimRechnen mit komplexen Zahlen Rundungsfehler, die winzige Real- und Imaginartei-le erzeugen, weitestgehend vermieden. Die Simulationsergebnisse von Algorithmensollten aus diesen Grunden mit den elementaren Eigenschaften der Transformatio-nen kontrolliert werden.

Page 212: MATLABr-Programmierung · 1Eingaben in MATLABr sollten keine deutschen Sonderzeichen wie ¨a, ¨o, ¨u,ß enthalten, wenn die Programme auch im nichtdeutschsprachigen Raum eingesetzt

204 B Formeln fur Fourier- und Z-Transformation

B.1 Fourierreihen zeitdiskreter periodischer Signale

x(n) = x(n+N) =N−1∑

k=0

ck ej 2πk

Nn ⇐⇒ ck = ck+N =

1

N

N−1∑

n=0

x(n) e−j 2πkN

n

x(n−N0) ⇐⇒ e−j 2πkN

N0 ck

ej2πmN

n x(n) ⇐⇒ ck−m

x∗(n) ⇐⇒ c∗−k

x(−n) ⇐⇒ c−k

N−1∑

k=0

x(k)y(n− k) ⇐⇒ Nckdk, x, y gleiche Periode

x(n)y(n) ⇐⇒N−1∑

l=0

cl dk−l, x, y gleiche Periode

xe(n) =12 (x(n) + x∗(−n)) ⇐⇒ ℜeck

xo(n) =12 (x(n)− x∗(−n)) ⇐⇒ jℑmck

ℜex(n) ⇐⇒ 12 (ck + c∗−k)

jℑmx(n) ⇐⇒ 12 (ck − c∗−k)

x(n)− x(n− 1) ⇐⇒(

1− e−j 2πkN

)

ckn∑

k=−∞

x(k) mit c0 = 0 ⇐⇒ 1

1− e−j 2πkN

ck

Einige Fourierreihen1

ej2πmN

n ⇐⇒ δ(k −m)

cos 2πmN n ⇐⇒ 1

2δ(k −m) + 12δ(k +m)

sin 2πmN n ⇐⇒ 1

2j δ(k −m)− 12j δ(k +m)

∞∑

k=−∞

δ(n− kN) ⇐⇒ 1

N∀k

x(n) =

1 |n| ≤ N1

0 N1 < |n| ≤ N2

⇐⇒ 1

N

sin(2N1 + 1)πkNsin πk

N

1Bei den Beziehungen ist die Periodizitat von ck mit der Periode N zu berucksichtigen.DieFunktion δ(·) ist der Einsimpuls fur diskrete Argumente bzw. die Diracsche Deltafunktion furkontinuierliche Argumente.

Page 213: MATLABr-Programmierung · 1Eingaben in MATLABr sollten keine deutschen Sonderzeichen wie ¨a, ¨o, ¨u,ß enthalten, wenn die Programme auch im nichtdeutschsprachigen Raum eingesetzt

B.2 Fouriertransformation zeitdiskreter Signale 205

B.2 Fouriertransformation zeitdiskreter Signale

x(n) =1

∫ 2π

0

X(ejθ) ejθndθ ⇐⇒ X(ejθ) =

∞∑

n=−∞

x(n) e−jθn

x(n−N0) ⇐⇒ e−jθN0X(ejθ)

ejθ0nx(n) ⇐⇒ X(ej(θ−θ0))

x∗(n) ⇐⇒ X∗(e−jθ)

x(−n) ⇐⇒ X(e−jθ)

(x ∗ y)(n) ⇐⇒ X(ejθ)Y (ejθ)

x(n)y(n) ⇐⇒ 12π (X ∗ Y )(ejθ)

xe(n) =12 (x(n) + x∗(−n)) ⇐⇒ ℜeX(ejθ)

xo(n) =12 (x(n)− x∗(−n)) ⇐⇒ jℑmX(ejθ)

ℜex(n) ⇐⇒ Xe(ejθ) = 1

2 (X(ejθ) +X∗(e−jθ))

jℑmx(n) ⇐⇒ Xo(ejθ) = 1

2 (X(ejθ)−X∗(e−jθ))

nx(n) ⇐⇒ jdX(ejθ)

dθn∑

k=−∞

x(k) ⇐⇒ 1

1− e−jθX(ejθ) + πX(ej0)δ2π(θ)

Einige Fouriertransformationspaare2

δ(n−N0) ⇐⇒ e−jθN0

ejθ0n ⇐⇒ 2πδ2π(θ − θ0)cos θ0n ⇐⇒ πδ2π(θ − θ0) + πδ2π(θ + θ0)

sin θ0n ⇐⇒ πj δ2π(θ − θ0)− π

j δ2π(θ + θ0)

∞∑

k=−∞

δ(n− kN) ⇐⇒ 2π

N

∞∑

k=−∞

δ

(

θ − 2πk

N

)

σ(n) ⇐⇒ 1

1− e−jθ+ πδ2π(θ)

2Bei den Beziehungen ist die 2π–Periodizitat im Frequenzbereich zu berucksichtigen. DieFunktion δ(·) ist der Einsimpuls fur diskrete Argumente bzw. die Diracsche Deltafunktion furkontinuierliche Argumente. δ2π(θ) =

∑∞

k=−∞δ(θ − 2πk).

Page 214: MATLABr-Programmierung · 1Eingaben in MATLABr sollten keine deutschen Sonderzeichen wie ¨a, ¨o, ¨u,ß enthalten, wenn die Programme auch im nichtdeutschsprachigen Raum eingesetzt

206 B Formeln fur Fourier- und Z-Transformation

anσ(n), |a| < 1 ⇐⇒ 1

1− ae−jθ

sinαn

πn, 0 < α < π ⇐⇒ X(ejθ) =

1 0 ≤ |θ| ≤ α0 α < |θ| < π

x(n) =

1 |n| ≤ N1

0 |n| > N1

⇐⇒ sin(2N1 + 1) θ2sin θ

2

Parsevalsche Beziehung fur aperiodische zeitdiskrete Signale:

∞∑

n=−∞

|x(n)|2 =1

∫ 2π

0

∣∣X(ejθ)

∣∣2dθ

Parsevalsche Beziehung fur periodische zeitdiskrete Signale:3

1

N

N−1∑

n=0

|x(n)|2 =

N−1∑

k=0

|ck|2

B.3 Diskrete Fouriertransformation (DFT)

In den Beziehungen sind x(n) und y(n) N -Punkte Signale, d.h. sie haben nurN von Null verschiedene Werte. Die Notation x((n))N = x(n modulo N) ist dieperiodische Fortsetzung des N -Punkte Signals x(n). Mit der Rechteckfunktion

RN (n) =

1 0 ≤ n ≤ N − 1

0 sonst

gilt

x(n) = x((n))NRN (n).

Merkregel: In den DFT-Formeln ist ein N -Punkte Signal stets als eine Periodeeines periodischen zeitdiskreten Signals zu betrachten.

3Mit x(n) = x(n+N) und den Fourierreihenkoeffizienten ck = 1N

∑N−1n=0 x(n)e−j 2π

Nnk.

Page 215: MATLABr-Programmierung · 1Eingaben in MATLABr sollten keine deutschen Sonderzeichen wie ¨a, ¨o, ¨u,ß enthalten, wenn die Programme auch im nichtdeutschsprachigen Raum eingesetzt

B.3 Diskrete Fouriertransformation (DFT) 207

x(n) =1

N

N−1∑

k=0

X(k) ej2πkN

n ⇐⇒ X(k) =

N−1∑

n=0

x(n) e−j 2πkN

n

x((n−N0))NRN (n) ⇐⇒ e−j 2πkN

N0 X(k)

ej2πmN

n x(n) ⇐⇒ X((k −m))NRN (k)

x∗(n) ⇐⇒ X∗((−k))NRN (k)

x∗((−n))NRN (n) ⇐⇒ X∗(k)(

N−1∑

m=0

x((m))N y((n−m))N

)

RN (n) ⇐⇒ X(k)Y (k)

x(n)y(n) ⇐⇒

(

1

N

N−1∑

m=0

X((m))NY ((k −m))N

)

RN (k)

12

[x((n))N + x∗((−n))N

]RN (n) ⇐⇒ ℜeX(k)

12

[x((n))N − x∗((−n))N

]RN (n) ⇐⇒ jℑmX(k)

ℜex(n) ⇐⇒ 12

[X((k))N +X∗((−k))N

]RN (k)

jℑmx(n) ⇐⇒ 12

[X((k))N −X∗((−k))N

]RN (k)

Einige DFT Beispiele4

ej2πmN

n ⇐⇒ Nδ(k −m)

cos 2πmN n ⇐⇒ N

2 δ(k −m) + N2 δ(k +m−N)

sin 2πmN n ⇐⇒ N

2j δ(k −m)− N2j δ(k +m−N)

δ(n) ⇐⇒ 1

x(n) =

1 0 ≤ n ≤ N1

1 N −N1 ≤ n ≤ N − 1

0 sonst

⇐⇒ sin(2N1 + 1)πkNsin πk

N

4In den Formeln gilt 0 ≤ n ≤ N − 1, 0 ≤ k ≤ N − 1 und 0 ≤ m ≤ N − 1.

Page 216: MATLABr-Programmierung · 1Eingaben in MATLABr sollten keine deutschen Sonderzeichen wie ¨a, ¨o, ¨u,ß enthalten, wenn die Programme auch im nichtdeutschsprachigen Raum eingesetzt

208 B Formeln fur Fourier- und Z-Transformation

B.4 Z–Transformation

x(n) =1

2πj

C

X(z)zn−1dz ⇐⇒ X(z) =∞∑

n=−∞

x(n)z−n

Die in der Tabelle angegebenen Bereiche sind die Konvergenzringe der zweiseitigenZ–Transformation und konnen in einzelnen Fallen auch großer sein.

x(n) ⇔ X(z) Rx− < |z| < Rx+

y(n) ⇔ Y (z) Ry− < |z| < Ry+

ax(n) + by(n) ⇔ aX(z) + bY (z) max(Rx− , Ry−) < |z| < min(Rx+ , Ry+)

x(n+ n0) ⇔ zn0X(z) Rx− < |z| < Rx+

zn0 x(n) ⇔ X

(z

z0

)

|z0|Rx− < |z| < |z0|Rx+

nx(n) ⇔ −zdX(z)

dzRx− < |z| < Rx+

x∗(n) ⇔ X∗(z∗) Rx− < |z| < Rx+

x(−n) ⇔ X(z−1)1

Rx+

< |z| <1

Rx−

ℜex(n) ⇔ 12(X(z) +X∗(z∗)) Rx− < |z| < Rx+

jℑmx(n) ⇔ 12(X(z)−X∗(z∗)) Rx− < |z| < Rx+

(x ∗ y)(n) ⇔ X(z)Y (z) max(Rx− , Ry−) < |z| < min(Rx+ , Ry+)

x(n) y(n) ⇔1

2πj

C

X(v)

vY(z

v

)

dv Rx−Ry− < |z| < Rx+Ry+

n∑

k=−∞

x(k) ⇔1

1− z−1X(z) max(Rx− , 1) < |z| < Rx+

Zeitverschiebung fur die einseitige Z–Transformation:

x(n+ n0) ⇔ zn0

(

X(z)−n0−1∑

n=0

x(n)z−n

)

, n0 > 0

x(n− n0) ⇔ z−n0

(

X(z) +

n0∑

n=1

x(−n)zn)

, n0 > 0

Page 217: MATLABr-Programmierung · 1Eingaben in MATLABr sollten keine deutschen Sonderzeichen wie ¨a, ¨o, ¨u,ß enthalten, wenn die Programme auch im nichtdeutschsprachigen Raum eingesetzt

B.4 Z–Transformation 209

Residuensatz fur die inverse Z–Transformation:

Rechtsseitiges Signal (x(n) = 0 fur n < 0):

x(n) =1

2πj

C

X(z)zn−1 dz =∑

|zk|<Rx

ReskX(z)zn−1 n = 0, 1, 2, . . .

Alle Residuen im Gebiet innerhalb von C werden aufsummiert, wobei der Radiusvon C großer als der Konvergenzradius Rx sein muß.

Linksseitiges Signal (x(n) = 0 fur n > 0):

x(n) =1

2πj

C′

X

(1

z

)

z−n−1 dz =∑

|z′k|<

1Rx

Resk

X

(1

z

)

z−n−1

n = 0,−1, . . .

Alle Residuen im Gebiet innerhalb von C′ werden aufsummiert, wobei der Radiusvon C′ großer als 1

Rxsein muß.

Achtung: Durch z±n−1 kann fur n = 0 ein zusatzlicher Pol bei z = 0 auftreten.Daher sollte bei der inversen Z–Transformation der Fall n = 0 getrennt behandeltwerden!

Einfacher Pol z∞k von X(z) =P (z)

Q(z):

ReskX(z)zn−1 = limz→z∞k

(

(z − z∞k)P (z)

Q(z)zn−1

)

M–facher Pol z∞k von X(z) =P (z)

Q(z):

ReskX(z)zn−1 = 1

(M − 1)!

dM−1

dzM−1

(

(z − z∞k)M P (z)

Q(z)zn−1

)∣∣∣∣z→z∞k

Residuum im Unendlichen:

Resz=∞X(z)zn−1 = −Resz=0

X

(1

z

)

z−n−1

Anfangswertsatz der einseitigen Z–Transformation:

x(0) = limz→∞

X(z)

Page 218: MATLABr-Programmierung · 1Eingaben in MATLABr sollten keine deutschen Sonderzeichen wie ¨a, ¨o, ¨u,ß enthalten, wenn die Programme auch im nichtdeutschsprachigen Raum eingesetzt

210 B Formeln fur Fourier- und Z-Transformation

Endwertsatz der einseitigen Z–Transformation:

limn→∞

x(n) = limz→1

(z − 1)X(z)

Eingeschaltetes periodisches Signal:

x(n) = xp(n)σ(n) ⇐⇒ X(z) =zN

zN − 1

(N−1∑

n=0

xp(n)z−n

)

mit xp(n) = xp(n+N)

Einige Z–Transformationspaare

δ(n) ⇐⇒ 1 ∀z

σ(n) ⇐⇒z

z − 1|z| > 1

−σ(−n− 1) ⇐⇒z

z − 1|z| < 1

αnσ(n) ⇐⇒z

z − α|z| > |α|

−αnσ(−n− 1) ⇐⇒z

z − α|z| < |α|

nσ(n) ⇐⇒z

(z − 1)2|z| > 1

−nσ(−n− 1) ⇐⇒z

(z − 1)2|z| < 1

sinαn σ(n) ⇐⇒z sinα

z2 − 2z cosα+ 1|z| > 1

cosαn σ(n) ⇐⇒z(z − cosα)

z2 − 2z cosα+ 1|z| > 1

ρn sinαn σ(n) ⇐⇒ρz sinα

z2 − 2ρz cosα+ ρ2|z| > ρ

ρn cosαn σ(n) ⇐⇒z(z − ρ cosα)

z2 − 2ρz cosα+ ρ2|z| > ρ

sin(αn+ ϕ) σ(n) ⇐⇒z2 sinϕ+ z sin(α− ϕ)

z2 − 2z cosα+ 1|z| > 1

1

n, n > 0 ⇐⇒ loge

z

z − 1|z| > 1

1− e−αn

nσ(n) ⇐⇒ α+ loge

z − e−α

z − 1|z| > 1, α > 0

sinαn

nσ(n) ⇐⇒ α+ arctan

(sinα

z − cosα

)

|z| > cosαα > 0

Page 219: MATLABr-Programmierung · 1Eingaben in MATLABr sollten keine deutschen Sonderzeichen wie ¨a, ¨o, ¨u,ß enthalten, wenn die Programme auch im nichtdeutschsprachigen Raum eingesetzt

B.5 Systeme mit Mehrfachtaktverarbeitung 211

B.5 Systeme mit Mehrfachtaktverarbeitung

In den angegebenen Formeln sind der Unterabtastfaktor M und der Uberabtast-faktor L ganzzahlig.

x(n) ⇐⇒ X(ejθ)

X(z)

y(m) = x(Mm) ⇐⇒ Y (ejθ′

) =1

M

M−1∑

k=0

X(

ej(θ′−2πk)/M

)

Y (z) =1

M

M−1∑

k=0

X(

e−j2πk/M

z1/M

)

y(m) =

x(mL

)m = 0,±L,±2L . . .

0 sonst⇐⇒ Y (ejθ

) = X(

ejθ′L

)

Y (z) = X(

zL)

Polyphasenzerlegung:

X(z) =∞∑

n=−∞

x(n)z−n =M−1∑

k=0

z−kXk

(zM)

mit

Xk(z) =∞∑

m=−∞

xk(m)z−m =∞∑

m=−∞

x(Mm+ k)z−m, k = 0, 1, . . . ,M − 1

Fall M = 2:

X(z) = X0

(z2)+ z−1X1

(z2)

X0(z) =

∞∑

m=−∞

x(2m)z−m

X1(z) =

∞∑

m=−∞

x(2m+ 1)z−m

Page 220: MATLABr-Programmierung · 1Eingaben in MATLABr sollten keine deutschen Sonderzeichen wie ¨a, ¨o, ¨u,ß enthalten, wenn die Programme auch im nichtdeutschsprachigen Raum eingesetzt

212 B Formeln fur Fourier- und Z-Transformation

Elementare Vertauschungsoperationen

↑ L

↑M↓M

↓ L

↓M z−1M

↓M z−1 z−M ↓M

z−1 ↓M

↑ Lz−1

↑ Lz−1L↑ L z−1

↑ L z−L

p(n) =∞∑

k=−∞

δ(n− kM)

Page 221: MATLABr-Programmierung · 1Eingaben in MATLABr sollten keine deutschen Sonderzeichen wie ¨a, ¨o, ¨u,ß enthalten, wenn die Programme auch im nichtdeutschsprachigen Raum eingesetzt

Literaturverzeichnis

[1] A. V. Oppenheim, R. W. Schafer, Digital Signal Processing, Prentice-Hall,Inc., 1975.

[2] G. H. Golub, C. F. Van Loan, Matrix Computations, The Johns HopkinsUniversity Press, 1984.

[3] A. V. Oppenheim and R. W. Schafer, Discrete-Time Signal Processing,Prentice-Hall, Inc., 1989.

[4] H. W. Schußler, Digitale Signalverarbeitung, Band I: Analyse diskreter Signaleund Systeme, Springer-Verlag Berlin Heidelberg, 1994.

[5] G. W. Stewart, Introduction to Matrix Computations, Academic Press, Inc.,1973.

[6] B. P. Lathi, Linear Systems and Signals, Berkeley-Cambridge Press, 1992.

[7] R. A. Roberts, C. T. Mullis, Digital Signal Processing, Addison-Wesley Pu-blishing Company, 1987.

[8] S. L. Marple Jr., Digital Spectral Analysis, Prentice-Hall, Inc., 1987.

[9] K. D. Kammeyer, K. Kroschel, Digitale Signalverarbeitung: Filterung undSpektralanalyse mit MATLAB-Ubungen, Teubner Verlag Stuttgart, 1998.

[10] L. R. Rabiner, B. Gold, Theory and Application of Digital Signal Processing,Prentice-Hall, Inc., 1975.

[11] L. B. Jackson, Digital Filters and Signal Processing, Kluwer Academic Pu-blishers, 1989.

[12] H. W. Schußler, Digitale Signalverarbeitung, Band II, Buch in Vorbereitung,2001.

[13] S. K. Mitra, Digital Signal Processing, A Computer-Based Approach, TheMcGraw-Hill Companies, Inc., 1998.

Page 222: MATLABr-Programmierung · 1Eingaben in MATLABr sollten keine deutschen Sonderzeichen wie ¨a, ¨o, ¨u,ß enthalten, wenn die Programme auch im nichtdeutschsprachigen Raum eingesetzt

214 Literaturverzeichnis

[14] Mathias Lang, Algorithms for the Constrained Design of Digital Filters withArbitrary Magnitude and Phase Responses, Ph.D. thesis, Vienna Universityof Technology, 1999.

[15] W. F. G. Mecklenbrauker, “Remarks on and correction to the impulse inva-riant method for the design of iir digital filters,” Signal Processing, vol. 80,pp. 1687–1690, 2000.

[16] R. M. Lerner, “Band-pass filters with linear phase,” Proc. IEEE, vol. 52, pp.249–268, March 1964.

[17] C. M. Rader, B. Gold, “Digital filter design techniques in the frequencydomain,” Proc. IEEE, vol. 55, pp. 149–171, Feb. 1967.

[18] G. Doblinger, “An efficient algorithm for uniform and nonuniform digitalfilter banks,” in Proceedings of the 1991 IEEE International Symposium onCircuits and Systems (ISCAS’91), Singapore, June 1991, vol. 1, pp. 646–649.

[19] A. G. Constantinides, “Spectral transformations for digital filters,”Proc. Inst. Elec. Eng., vol. 117, pp. 1585–1590, Aug. 1970.

[20] L. R. Rabiner, R. W. Schafer, Digital Processing of Speech Signals, Prentice-Hall, Inc., 1978.

[21] P. Vary, U. Heute, W. Hess, Digitale Sprachsignalverarbeitung, Teubner VerlagStuttgart, 1998.

[22] P. P. Vaidyanathan, Multirate Systems and Filter Banks, Prentice-Hall, Inc.,1993.

[23] J. H. Rothweiler, “Polyphase quadrature filters – a new subband codingtechnique,” in Proc. 1983 IEEE Int. Conf. ASSP, Boston, MA, March 1983,pp. 1280–1283.

[24] P. L. Chu, “Quadrature mirror filter design for an arbitrary number of equalbandwidth channels,” IEEE Trans. Acoust., Speech, Signal Processing, vol.ASSP-33, pp. 203–218, Feb. 1985.

[25] J. Masson, Z. Picel, “Flexible design of computationally efficient nearly per-fect QMF filter banks,” in Proc. 1985 IEEE Int. Conf. ASSP, Tampa, FL,March 1985, pp. 541–544.

[26] V. K. Jain, R. E. Crochiere, “Quadrature mirror filter design in the timedomain,” IEEE Trans. Acoust., Speech, Signal Processing, vol. ASSP-32, pp.353–361, April 1984.

Page 223: MATLABr-Programmierung · 1Eingaben in MATLABr sollten keine deutschen Sonderzeichen wie ¨a, ¨o, ¨u,ß enthalten, wenn die Programme auch im nichtdeutschsprachigen Raum eingesetzt

Literaturverzeichnis 215

[27] C.-K. Chen, J.-H. Lee, “Design of quadrature mirror filters with linear phasein the frequency domain,” IEEE Trans. Circuits and Systems – II, vol. 39,pp. 593–605, Sept. 1992.

[28] H. Xu, W. S. Lu, A. Antoniou, “Efficient iterative design method for cosine-modulated QMF banks,” IEEE Trans. Signal Processing, vol. 44, pp. 1657–1668, July 1996.

[29] G. Doblinger, Th. Zeitlhofer, “Improved design of uniform and nonuniformmodulated filter banks,” in Proc. 1996 IEEE Nordic Signal Proc. Symp.,NORSIG’96, Sept. 1996, pp. 327–330.

[30] J. Princen, “The design of nonuniform modulated filterbanks,” IEEETrans. Signal Processing, vol. 43, pp. 2550–2560, Nov. 1995.

[31] E. Zwicker, R. Feldtkeller, Das Ohr als Nachrichtenempfanger, S. HirzelVerlag Stuttgart, 1967.

[32] R. E. Crochiere, L. R. Rabiner, Multirate Digital Signal Processing, Prentice-Hall, Inc., 1983.

[33] D. W. Griffin, J. S. Lim, “Signal estimation from the modified short-time fou-rier transform,” IEEE Trans. Acoust., Speech, Signal Processing, vol. ASSP-32, pp. 236–243, April 1984.

[34] U. Zolzer, Digitale Audiosignalverarbeitung, Teubner Verlag Stuttgart, 1997.

[35] C. S. Burrus, R. A. Gopinath, H. Guo, Introduction to Wavelets and WaveletTransforms, A Primer, Prentice-Hall, Inc., 1998.

[36] St. Mallat, A Wavelet Tour of Signal Processing, Academic Press, 1998.

[37] G. Strang, T. Nguyen, Wavelets and Filter Banks, Wellesley-CambridgePress, 1996.

[38] N. Fliege, Multiraten-Signalverarbeitung, Teubner Verlag Stuttgart, 1993.

[39] P. P. Vaidyanathan, P. Hoang, “Lattice structures for optimal design androbust implementation of two-channel perfect-reconstruction QMF banks,”IEEE Trans. Acoust., Speech, Signal Processing, vol. ASSP-36, pp. 81–94,Jan. 1988.

[40] D. J. Donoho, I. M. Johnstone, “Wavelet shrinkage: asymptopia,” StanfordStatistics Dept. Report TR-419, March 1993.

[41] D. L. Donoho, “De-noising by soft thresholding,” IEEE Transactions onInformation Theory, vol. 41, pp. 613–627, May 1995.

Page 224: MATLABr-Programmierung · 1Eingaben in MATLABr sollten keine deutschen Sonderzeichen wie ¨a, ¨o, ¨u,ß enthalten, wenn die Programme auch im nichtdeutschsprachigen Raum eingesetzt

216 Literaturverzeichnis

[42] E. Moulines, J. Laroche, “Non-parametric techniques for pitch-scale and time-scale modifications of speech,” Speech Communication, vol. 16, pp. 175–205,1995.

[43] S. J. Godsill, P. J. W. Rayner, Digital Audio Restoration, A Statistical ModelBased Approach, Springer-Verlag London, 1998.

[44] S. M. Kay, Fundamentals of Statistical Signal Processing: Estimation Theory,Prentice-Hall, Inc., 1993.

[45] Y. Ephraim, D. Malah, “Speech enhancement using a minimum mean-square error short-time spectral amplitude estimator,” IEEE Trans. Acou-stics, Speech, Signal Processing, vol. ASSP-32, pp. 1109–1121, Dec. 1984.

[46] O. Cappe, “Elimination of the musical noise phenomenon with the Ephraimand Malah noise suppressor,” IEEE Trans. Speech and Audio Processing, vol.2, pp. 345–349, April 1994.

[47] O. Cappe, J. Laroche, “Evaluation of short-time spectral attenuation tech-niques for the restoration of musical recordings,” IEEE Trans. Speech andAudio Processing, vol. 3, pp. 84–93, Jan. 1995.

Page 225: MATLABr-Programmierung · 1Eingaben in MATLABr sollten keine deutschen Sonderzeichen wie ¨a, ¨o, ¨u,ß enthalten, wenn die Programme auch im nichtdeutschsprachigen Raum eingesetzt

Glossar

1/f -Rauschen Rauschprozeß mit 1/f -formigem Frequenzverlauf des Leistungs-dichtespektrums

AKF Autokorrelationsfunktion

Array mehrdimensionale Anordnung von Daten

Chirp speziell frequenzmoduliertes Signal (z.B. Sinussignal mit an-steigender Frequenz)

DFT Diskrete Fouriertransformation

DTWT Discrete-Time Wavelet-Transform

DWT Diskrete Wavelet-Transformation

FFT Fast Fourier Transform

FIR Finite Impulse Response

Frame Signalausschnitt bei der Blockverarbeitung

HTML-File Hypertextdatei

IDFT Inverse Diskrete Fouriertransformation

IDTWT Inverse Discrete-Time Wavelet-Transform

IFFT Inverse Fast Fourier Transform

IIR Infinite Impulse Response

LS Least-Squares

M-File Textdatei zum Speichern von MATLABr-Funktionen oderScripts

Page 226: MATLABr-Programmierung · 1Eingaben in MATLABr sollten keine deutschen Sonderzeichen wie ¨a, ¨o, ¨u,ß enthalten, wenn die Programme auch im nichtdeutschsprachigen Raum eingesetzt

218 Glossar

MAT-File binare Datei zum Speichern von MATLABr-Variablen

MEX-File binare Datei fur compilierte MATLABr-Funktionen

MMSE Minimum Mean-Square Error

MPEG Moving Picture Expert Group

MPEG-Verfahren Datenkompressionsverfahren fur Audio- und Videosignale

NPR Near Perfect Reconstruction

PDF-File Datei im Adobe Portable Document Format

PR Perfect Reconstruction

RAW-Datei binare Datei zum Speichern von digitalen Audiosignalen ohneHeader (Vorspann mit Signalparametern)

Rosarauschen Rauschprozeß mit nichtkonstantem Leistungsdichtespektrum

SNR Signal-to-Noise Ratio

STFT Short-Time Fourier Transform

WAV-Format Dateiformat zum Speichern von Audiosignalen

WT Wavelet-Transformation

Page 227: MATLABr-Programmierung · 1Eingaben in MATLABr sollten keine deutschen Sonderzeichen wie ¨a, ¨o, ¨u,ß enthalten, wenn die Programme auch im nichtdeutschsprachigen Raum eingesetzt

Index

Abtastratenumsetzung, 11, 13, 19,128, 144, 155, 160, 164

Abtastung, 35, 108, 152kritische, 155

Aliasing, 11, 113, 128, 136im Frequenzbereich, 108

Allpaßtransformation, 121Alternantensatz, 96Autokorrelation, siehe Korrelation

Bayes-Schatzer, 183Besselfunktion

modifizierte, 184bilineare Z-Transformation, 114Blockverarbeitung, 2, 19, 43, 57, 75,

150Blockzustandsraumdarstellung, 59Butterworth-Filter, 114

Cauer-Filter, siehe Filter,elliptisches

Chirpsinusformiger, 24, 169, 181

Chirp-DFT, 78Critical Bands, siehe

Frequenzgruppen

Datenreduktion, 12, 152, 168Dezimation, siehe

Abtastratenumsetzungim Frequenzbereich, 69

Differenzengleichung, 41Anfangswerte, 41, 44

Eigenwertzerlegung, 59Einhullende, 12Einseitenbandmodulation, 174Entzerrung, 31, 150Equi-Ripple Design, 95, 104, 119Exponentialschwingung, 5, 34, 45,

63, 71

Faltungsmatrix, 18, 24, 32, 112zyklische, 22

Faltungsoperation, 16, 29, 84lineare, 16, 74zyklische, 20, 72

Fensterfunktion, 71, 92, 144FFT, Fast Fourier Transform, 23,

40, 66, 80, 84, 144, 154, 175Filter

analoges, 114Bandpaß, 121Bandsperre, 122digitales Transversalfilter, 84elliptisches, 51, 119Hochpaß, 121idealer Bandpaß, 38Kaskadenform, 49Ordnung, 42nParallelform, 51, 108Polstelle, 45, 115, 117

Page 228: MATLABr-Programmierung · 1Eingaben in MATLABr sollten keine deutschen Sonderzeichen wie ¨a, ¨o, ¨u,ß enthalten, wenn die Programme auch im nichtdeutschsprachigen Raum eingesetzt

220 INDEX

Sperrstelle, 45, 115, 117Filter Bank Overlap Addition

Method, 148Filterbank

aquidistante, 127, 132uberabgetastete, 147, 174baumformige Anordnung, 155nahezu perfekte

Rekonstruktion, 129nichtaquidistante, 127, 136,

143, 151, 154, 156nichtperfekte Rekonstruktion,

160perfekte Rekonstruktion, 129,

158Rekonstruktionsfehler, 150

Filterunginverse, 19

FIR-Filter, 29, 67, 83, 84, 129, 160linearphasige, 84

Fouriertransformation, 34diskrete (DFT), 66, 87, 144inverse, 39

FrequenzgangUbertragungsfunktion, 34, 38,

45dreidimensionale Darstellung,

45FIR-Filter, 84IIR-Filter, 45

Frequenzgruppendes menschlichen Gehors, 143

Frequenzskalierung, 151, 174

Gibbsches Phanomen, 92

Halbbandfilter, 155

IIR-Filter, 29, 83, 107, 123Impulsantwort, 28, 35, 40, 84, 107,

112, 130Impulsinvarianztransformation, 107Impulskompression, 24

Interpolation, sieheAbtastratenumsetzung

im Frequenzbereich, 67

Kaiser-Fenster, sieheFensterfunktion

Kaskadenform, siehe Filter,Kaskadenform

Korrelation, 23, 123Kurzzeit-Fouriertransformation,

144, 152, 154, 174, 182Filterbankdarstellung, 147

Lattice-Filter, sieheLeiterstrukturen

Lawson-Algorithmus, 104Leakage-Effect, 67, 71Least-Squares, 32, 89, 100, 104, 112,

123, 144Leiterstrukturen, 164Lerner-Filter, 108Levinson-Algorithmus, 101Low-Delay FIR Filter, 102, 105

Methode der kleinsten Quadrate,siehe Least-Squares

MMSE-Schatzer, sieheBayes-Schatzer

Momentanfrequenz, 175Momentanphase, 175Moving Averager, 36Multibandfilter, 97

Nullenanfugen, 68Nullphasenkomponente, 85, 130Nullstelle, siehe Filter, SperrstelleNullstelleninversion, 88

Oktavbandanalyse, 152Overlap-Add Methode, 75Overlap-Save Methode, 76

Parallelform, siehe Filter,Parallelform

Page 229: MATLABr-Programmierung · 1Eingaben in MATLABr sollten keine deutschen Sonderzeichen wie ¨a, ¨o, ¨u,ß enthalten, wenn die Programme auch im nichtdeutschsprachigen Raum eingesetzt

INDEX 221

Pitch-Skalierung, 174Polstelle, siehe Filter, PolstellePolyphasenfilter, 159, 164Polyphasenzerlegung, siehe

PolyphasenfilterPrototypfilter, 129, 130, 151

Quadrature Mirror Filterbank(QMF), 158

Reiheendliche geometrische, 37unendliche geometrische, 35

Remez-Algorithmus, 86

Short-Time Fourier Transform, sieheKurzzeit-Fouriertrans-formation

Signalkomplexwertiges, 6periodisches, 9, 20, 64zeitdiskretes, 1

Sperrfrequenz, 37Sperrstelle, siehe Filter, SperrstelleSystem

inverses, 31, 48kausales, 27, 30, 48lineares, 27, 28linearphasiges, 48, 88minimalphasiges, 32, 48, 88nichtrekursives, 41rekursives, 41, 112stabiles, 27, 29, 48

Vertauschbarkeit, 31zeitinvariantes, 27, 28zeitvariantes, 27, 181

Systeminvertierung, siehe System,inverses

Toplitz-Matrix, 18, 100, 112Transversalfilter, siehe FilterTschebyscheff-Approximation, 95Tschebyscheff-Filter, 117

Ubertragungsfunktion, sieheFrequenzgang

Wavelet Shrinkage, 168Wavelet-Transformation, 127, 151

diskrete, 152inverse, diskrete, 153inverse, zeitdiskrete, 158, 168zeitdiskrete, 154, 168

Waveletsorthonormierte, 153, 164, 169

Zeitinversion, 7Zeitskalierung, 179Zeitverschiebung, 7

zyklische, 9, 72Zufallsvariable

gaußsche, 183Zustandsgleichungen, 54Zustandsvektor, 55Zweikanalfilterbank, 155, 159, 164