300 20 4MB
German Pages XII, 294S. 180 Abb.. [305] Year 2009
Martin Werner Digitale Signalverarbeitung mit MATLAB®
Aus dem Programm
Nachrichtentechnik
Information und Kommunikation von M. Hufschmid Nachrichtenübertragung von K. D. Kammeyer Digitale Signalverarbeitung von K. D. Kammeyer und K. Kroschel Grundlagen der Informationstechnik von M. Meyer Kommunikationstechnik von M. Meyer Signalverarbeitung von M. Meyer Digitale Kommunikationssysteme 1 und 2 von R. Nocker Signale und Systeme von R. Scheithauer Digitale Sprachsignalverarbeitung von P. Vary, U. Heute und W. Hess Mobilfunknetze und ihre Protokolle 1 und 2 von B. Walke Grundlagen der Kommunikationstechnik von H. Weidenfeller Information und Codierung von M. Werner Digitale Signalverarbeitung mit MATLAB®-Praktikum von M. Werner Nachrichten-Übertragungstechnik von M. Werner Signale und Systeme von M. Werner Digitale Audiosignalverarbeitung von U. Zölzer
www.viewegteubner.de
Martin Werner
Digitale Signalverarbeitung mit MATLAB® Grundkurs mit 16 ausführlichen Versuchen 4., durchgesehene und ergänzte Auflage Mit 180 Abbildungen und 76 Tabellen STUDIUM
Bibliografische Information der Deutschen Nationalbibliothek Die Deutsche Nationalbibliothek verzeichnet diese Publikation in der Deutschen Nationalbibliografie; detaillierte bibliografische Daten sind im Internet über abrufbar.
1. Auflage 2001 2., verbesserte und erweiterte Auflage 2003 3., vollständig überarbeitete und erweiterte Auflage 2006 4., durchgesehene und ergänzte Auflage 2009 Alle Rechte vorbehalten © Vieweg +Teubner | GWV Fachverlage GmbH, Wiesbaden 2009 Lektorat: Reinhard Dapper | Andrea Broßler Vieweg+Teubner ist Teil der Fachverlagsgruppe Springer Science+Business Media. www.viewegteubner.de Das Werk einschließlich aller seiner Teile ist urheberrechtlich geschützt. Jede Verwertung außerhalb der engen Grenzen des Urheberrechtsgesetzes ist ohne Zustimmung des Verlags unzulässig und strafbar. Das gilt insbesondere für Vervielfältigungen, Übersetzungen, Mikroverfilmungen und die Einspeicherung und Verarbeitung in elektronischen Systemen. Die Wiedergabe von Gebrauchsnamen, Handelsnamen, Warenbezeichnungen usw. in diesem Werk berechtigt auch ohne besondere Kennzeichnung nicht zu der Annahme, dass solche Namen im Sinne der Warenzeichen- und Markenschutz-Gesetzgebung als frei zu betrachten wären und daher von jedermann benutzt werden dürften. Umschlaggestaltung: KünkelLopka Medienentwicklung, Heidelberg Druck und buchbinderische Verarbeitung: MercedesDruck, Berlin Gedruckt auf säurefreiem und chlorfrei gebleichtem Papier. Printed in Germany ISBN 978-3-8348-0457-0
V
Vorwort Die digitale Signalverarbeitung ist eine der Schlüsseltechnologien des Informationszeitalters: in Mobiltelefonen ist sie unser Begleiter, in Anti-Blockiersystemen vermeidet sie Unfälle, in der Computertomographie verschafft sie Einblicke ohne operativen Eingriff. Die digitale Signalverarbeitung macht unser Leben bequemer, sicherer und produktiver. Kenntnisse in der digitalen Signalverarbeitung sind deshalb zu einem wichtigen Bestandteil naturwissenschaftlich-technischer Studiengänge und entsprechender beruflicher Praxis geworden. Das Buch „Digitale Signalverarbeitung mit MATLAB“ stallt anhand von 16 ausführlichen Versuchen eine Auswahl wichtiger Grundlagen und Anwendungen vor: Zeitdiskrete Signale (2 Versuche)
Signalverarbeitung im Frequenzbereich / FFT (4 Versuche)
Signalverarbeitung im Zeitbereich / LTI-Systeme (3 Versuche) Filterentwurf (2 Versuche)
Stochastische Signale (2 Versuche)
Reale Systeme, A/D-Umsetzung, Wortlängeneffekte (3 Versuche) Zu jedem Versuch gibt es Lernziele und eine kompakte Einführung. Die Versuchsvorbereitung ist wichtiges Element des Praktikums und baut idealer Weise auf erste Erfahrungen einer einführenden Lehrveranstaltung in Signale und Systeme auf. Die Versuche sind so angelegt, dass sie bei guter Vorbereitung in etwa 3 bis 4 Stunden am PC bearbeitet werden können. Viele Aufgaben sind mit Lösungshinweisen versehen. Zahlreiche Programmbeispiele und grafische Darstellungen unterstützen die Durchführung der Versuche. Am Ende des Buches findet sich ein ausführlicher Lösungsteil. In der 4. Auflage wurden der Lösungsteil nochmals erweitert und Lernkontrollfragen aufgenommen, die zu einer versuchsübergreifenden Rückschau anregen. Die Versuche werden mit der Simulationssprache MATLAB®1 durchgeführt:
MATLAB ist ein häufig benutztes Werkzeug für die digitale Signalverarbeitung und wird weltweit auf PC und Arbeitsplatzrechnern mit unterschiedlichen Betriebssystemen eingesetzt.
Wegen der einfache Bedienung sowie der guten grafischen Eigenschaften von MATLAB kann sofort mit der digitalen Signalverarbeitung begonnen werden.
Die Kombination aus PC und MATLAB ermöglicht es auf einfache Weise reale Audiosignale zu verwenden. MATLAB ist auch als preiswerte Studentenversion erhältlich.
1
MATLAB® ist ein eingetragenes Warenzeichen der Firma The MathWorks, Inc., U.S.A., www.mathworks.com
VI
Vorwort
Alle für das Praktikum erstellten MATLAB-Programme können abgeändert und erweitert werden. Die Experimente lassen sich nach persönlichen Bedürfnissen und Interessen modifizieren. Zum Buch sind über 90 Programme und Datensätze entstanden, die auf der Web-Seite des Vieweg+Teubner Verlages, www.viewegteubner.de, kostenlos erhältlich sind. MATLAB verfügt über eine umfassende und gut organisierte Online-Hilfe, die Handbücher vollwertig ersetzt. Aus diesem Grund ist der Einführungsteil des Buches „Erste Schritte in MATLAB“ kurz gehalten. Technische Hinweise und Softwarekompatibilität Alle Programme wurden mit MATLAB Version 7.3 (R2006b) getestet. Da aus didaktischen Gründen nur einfache Befehle verwendet wurden, sollten die Programme auch mit der MATLAB Version 6 oder neueren Versionen laufen. Für das Praktikum ist die MATLAB Signal Processing Toolbox erforderlich. Weitere Informationen zu MATLAB sind auf der Homepage der Firma The MathWorks, U.S.A., www.mathworks.com, oder bei der deutschen Niederlassung The MathWorks GmbH, www.mathworks.de, zu finden. Danksagung Gerne bedanke ich mich bei den vielen Studierenden am Fachbereich Elektrotechnik und Informationstechnik der Hochschule Fulda, die dieses Praktikum seit Jahren mit viel Engagement, hilfreichen Anregungen und konstruktiver Kritik bereichern. Mein besonderer Dank gehört Herrn Dipl.-Ing. (FH) Bernd Heil, ohne dessen tatkräftige Unterstützung und musikalischen Einsatz (guitar.wav) im Nachrichtentechnik-Labor dieses Buch so nicht hätte entstehen können. Für die freundliche Unterstützung bedanke ich mich herzlich bei der Firma The MathWorks und besonders den Mitarbeiterinnen und Mitarbeitern des Vieweg+Teubner Verlags für die gute Zusammenarbeit.
Fulda, im August 2008
Martin Werner
VII
Inhaltsverzeichnis 1
Erste Schritte in MATLAB .............................................................................................. 1 1.1 Einführung ............................................................................................................... 1 1.2 Programmstart und einfache Befehle....................................................................... 1 1.2.1 MATLAB-Bedienoberfläche ..................................................................... 1 1.2.2 Einfache arithmetische Operationen.......................................................... 1 1.2.3 Konstanten und Variablen ......................................................................... 3 1.2.4 MATLAB help-Kommando.................................................................... 3 1.2.5 Vektoren und Matrizen .............................................................................. 4 1.2.6 Vordefinierte MATLAB-Funktionen und einfache Grafiken .................... 7 1.2.7 Schreiben eines MATLAB-Programms im Editor/DebuggerWindow..................................................................................................... 9 1.2.8 Verkettete Programme und Unterprogramme.......................................... 11 1.2.9 MATLAB HELP und MATLAB DEMO................................................... 14
2
Zeitdiskrete Signale ........................................................................................................ 16 2.1 Einführung ............................................................................................................. 16 2.2 Elementare zeitdiskrete Signale............................................................................. 16 2.2.1 Einführung............................................................................................... 16 2.2.2 Vorbereitende Aufgaben.......................................................................... 19 2.2.3 Versuchsdurchführung............................................................................. 20 2.3 Audiosignale.......................................................................................................... 20 2.3.1 Einführung............................................................................................... 20 2.3.2 Beispiel: Synthese eines Audiosignals .................................................... 21 2.3.3 Vorbereitende Aufgaben.......................................................................... 23 2.3.4 Versuchsdurchführung............................................................................. 23
3
Diskrete Fourier-Transformation (DFT) ...................................................................... 26 3.1 Einführung ............................................................................................................. 26 3.2 Grundlagen ............................................................................................................ 26 3.2.1 Diskrete Fourier-Transformation............................................................. 26 3.2.2 Eigenschaften der diskreten Fourier-Transformation .............................. 31 3.3 Vorbereitende Aufgaben........................................................................................ 31 3.4 Versuchsdurchführung........................................................................................... 33
4
Schnelle Fourier-Transformation (FFT)....................................................................... 36 4.1 Einführung ............................................................................................................. 36 4.2 Komplexität ........................................................................................................... 36 4.3 Radix-2-FFT-Algorithmus..................................................................................... 37 4.4 Programmierung der DIT-Radix-2-FFT ................................................................ 41 4.4.1 Ordnen der Eingangsfolge ....................................................................... 41 4.4.2 Signalverarbeitung im Signalflussgrafen................................................. 44 4.5 Vorbereitende Aufgaben........................................................................................ 47 4.6 Versuchsdurchführung........................................................................................... 48
VIII
Inhaltsverzeichnis
5
Kurzzeit-Spektralanalyse: Grundlagen ........................................................................ 50 5.1 Einführung ............................................................................................................. 50 5.2 Grundlagen ............................................................................................................ 50 5.2.1 Abtastung................................................................................................. 51 5.2.2 Spektrum des zeitdiskreten Signals ......................................................... 52 5.2.3 Fensterung ............................................................................................... 53 5.2.4 Diskrete Fourier-Transformation ............................................................. 55 5.2.5 Zero-padding............................................................................................ 58 5.2.6 Leakage-Effekt ........................................................................................ 59 5.2.7 Fensterfolgen ........................................................................................... 60 5.3 Vorbereitende Aufgaben........................................................................................ 62 5.4 Versuchsdurchführung........................................................................................... 63
6
Kurzzeit-Spektralanalyse: Beispiele .............................................................................. 66 6.1 Einführung ............................................................................................................. 66 6.2 Mehrtonsignal ........................................................................................................ 66 6.2.1 Mehrfrequenzwahlverfahren.................................................................... 66 6.2.2 Vorbereitende Aufgaben ......................................................................... 67 6.2.3 Versuchsdurchführung............................................................................. 68 6.3 Audiosignal............................................................................................................ 69 6.3.1 Einführung ............................................................................................... 69 6.3.2 Vorbereitende Aufgaben.......................................................................... 71 6.3.3 Versuchsdurchführung............................................................................. 72
7
Lernkontrollfragen zur DFT, FFT und Kurzzeitspektralanalyse ............................. 75 7.1 Aufgabenkatalog A ................................................................................................ 75 7.2 Aufgabenkatalog B ................................................................................................ 77
8
Faltung, Differenzengleichung und LTI-Systeme ........................................................ 81 8.1 Einführung ............................................................................................................. 81 8.2 Faltung ................................................................................................................... 81 8.2.1 Grundlagen .............................................................................................. 81 8.2.2 Vorbereitende Aufgaben.......................................................................... 83 8.2.3 Versuchsdurchführung............................................................................. 84 8.3 Differenzengleichung 1. Ordnung.......................................................................... 85 8.3.1 Goertzel-Algorithmus 1. Ordnung ........................................................... 85 8.3.2 Versuchsdurchführung............................................................................. 87 8.4 Lineare zeitinvariante Systeme .............................................................................. 88 8.4.1 Impulsantwort und Frequenzgang von LTI-Systemen............................. 88 8.4.2 Lineare Differenzengleichung und z-Transformation .............................. 90 8.4.3 Goertzel-Algorithmus 2. Ordnung ........................................................... 93 8.4.4 Vorbereitende Aufgaben.......................................................................... 94 8.4.5 Versuchsdurchführung............................................................................. 94
9
Finite-Impulse-Response-Systeme ................................................................................. 95 9.1 Einführung ............................................................................................................. 95 9.2 Eigenschaften von FIR-Systemen.......................................................................... 95 9.3 Vorbereitende Aufgaben........................................................................................ 98 9.4 Versuchsdurchführung......................................................................................... 103
Inhaltsverzeichnis
IX
10
Infinite-Impulse-Response-Systeme ............................................................................ 105 10.1 Einführung ........................................................................................................... 105 10.2 Einfluss der Pole auf den Frequenzgang.............................................................. 105 10.3 Blockdiagramm ................................................................................................... 106 10.4 Impulsantwort...................................................................................................... 107 10.5 Partialbruchzerlegung mit MATLAB .................................................................. 108 10.6 Vorbereitende Aufgaben...................................................................................... 110 10.7 Versuchsdurchführung......................................................................................... 113
11
Entwurf digitaler FIR-Filter ........................................................................................ 116 11.1 Einführung ........................................................................................................... 116 11.2 FIR-Filterstruktur................................................................................................. 116 11.3 Toleranzschema ................................................................................................... 117 11.3.1 Entwurfsvorschrift im Frequenzbereich ................................................ 117 11.3.2 Vorbereitende Aufgaben........................................................................ 119 11.4 Fourier-Approximation........................................................................................ 120 11.4.1 Fourier-Reihe des Frequenzganges........................................................ 120 11.4.2 Vorbereitende Aufgaben........................................................................ 120 11.4.3 Versuchsdurchführung........................................................................... 121 11.5 Fourier-Approximation mit Fensterung............................................................... 121 11.5.1 Einführung............................................................................................. 121 11.5.2 Vorbereitende Aufgaben........................................................................ 122 11.5.3 Versuchsdurchführung........................................................................... 122 11.6 Chebyshev-Approximation.................................................................................. 123 11.6.1 Equiripple-Methode............................................................................... 123 11.6.2 Versuchsdurchführung........................................................................... 124
12
Entwurf digitaler IIR-Filter......................................................................................... 127 12.1 Einführung ........................................................................................................... 127 12.2 IIR-Filter.............................................................................................................. 127 12.3 Entwurf eines Butterworth-Tiefpasses................................................................. 130 12.3.1 Toleranzschema und Filtertyp ............................................................... 130 12.3.2 Zeitkontinuierlicher Butterworth-Tiefpass ............................................ 130 12.3.3 Dimensionierung des zeitkontinuierlichen Butterworth-Tiefpasses ...... 131 12.3.4 Vorbereitende Aufgaben Butterworth-Tiefpass.................................. 132 12.3.5 Bilineare Transformation....................................................................... 134 12.3.6 Frequenz-Transformation ...................................................................... 135 12.3.7 Vorbereitende Aufgaben Transformation........................................... 137 12.3.8 Versuchsdurchführung........................................................................... 138 12.4 Entwurf digitaler Tiefpässe nach Standardapproximationen analoger Tiefpässe ............................................................................................... 139 12.4.1 Einführung............................................................................................. 139 12.4.2 Versuchsdurchführung........................................................................... 139
13
Lernkontrollfragen zu FIR- und IIR-Systemen ......................................................... 142 13.1 Aufgabenkatalog A.............................................................................................. 142 13.2 Aufgabenkatalog B .............................................................................................. 146
X
Inhaltsverzeichnis
14
Kenngrößen stochastischer Signale ............................................................................. 148 14.1 Einführung ........................................................................................................... 148 14.2 Grundlagen .......................................................................................................... 148 14.2.1 Experiment und stochastischer Prozess ................................................. 148 14.2.2 Zufallszahlen am Digitalrechner............................................................ 151 14.3 Stochastische Signale........................................................................................... 151 14.3.1 Vorbereitende Aufgaben........................................................................ 151 14.3.2 Versuchsdurchführung........................................................................... 153 14.4 Korrelation stochastischer Prozesse..................................................................... 154 14.4.1 Korrelation, Korrelationsfunktion und Leistungsdichtespektrum.......... 154 14.4.2 Weißes Rauschen................................................................................... 155 14.4.3 Schätzung der Autokorrelationsfunktion ............................................... 156 14.4.4 Schätzung des Leistungsdichtespektrums.............................................. 157 14.4.5 Vorbereitende Aufgaben........................................................................ 158 14.4.6 Versuchsdurchführung........................................................................... 159
15
Stochastische Signale und LTI-Systeme...................................................................... 163 15.1 Einführung ........................................................................................................... 163 15.2 Lineare Abbildung stochastischer Signale ........................................................... 163 15.2.1 Grundlagen ............................................................................................ 164 15.2.2 Vorbereitende Aufgaben........................................................................ 165 15.2.3 Versuchsdurchführung........................................................................... 165 15.3 Abbildung stochastischer Signale an LTI-Systemen ........................................... 166 15.3.1 Grundlagen ............................................................................................ 166 15.3.2 Vorbereitende Aufgaben........................................................................ 166 15.3.3 Versuchsdurchführung........................................................................... 170
16
Analog-Digital-Umsetzung ........................................................................................... 172 16.1 Einführung ........................................................................................................... 172 16.2 Digitalisierung ..................................................................................................... 172 16.3 Abtastung............................................................................................................. 173 16.3.1 Abtasttheorem........................................................................................ 173 16.3.2 Vorbereitende Aufgaben........................................................................ 174 16.3.3 Versuchsdurchführung........................................................................... 174 16.4 Quantisierung....................................................................................................... 175 16.4.1 Quantisierungskennlinie ........................................................................ 175 16.4.3 Maschinenzahlen ................................................................................... 175 16.4.3 Quantisierungsfehler.............................................................................. 179 16.4.4 Vorbereitende Aufgaben........................................................................ 181 16.4.5 Versuchsdurchführung........................................................................... 184
17
Reale digitale Filter: Koeffizientenquantisierung ...................................................... 186 17.1 Einführung ........................................................................................................... 186 17.2 Wortlängeneffekte ............................................................................................... 186 17.3 FIR-Filter mit quantisierten Koeffizienten .......................................................... 187 17.3.1 Fehlermodell und Fehlerfrequenzgang .................................................. 187 17.3.2 Vorbereitende Aufgaben........................................................................ 188 17.3.3 Versuchsdurchführung........................................................................... 189 17.4 IIR-Filter mit quantisierte Koeffizienten ............................................................. 190 17.4.1 Kaskadenform........................................................................................ 190
Inhaltsverzeichnis
XI
17.4.2 17.4.3 17.4.4
Koeffizientenquantisierung und Polausdünnung ................................... 192 Vorbereitende Aufgaben........................................................................ 194 Versuchsdurchführung........................................................................... 198
18
Reale digitale Filter: Quantisierte Arithmetik ........................................................... 199 18.1 Einführung ........................................................................................................... 199 18.2 Quantisierte Arithmetik ....................................................................................... 199 18.2.1 Addition Überlauf und große Grenzzyklen ........................................ 199 18.2.2 Multiplikation Inneres Rauschen und kleine Grenzzyklen................. 200 18.2.3 Ersatzschaltbild für einen Block 2.Ordnung.......................................... 204 18.3 Vorbereitende Aufgaben...................................................................................... 205 18.4 Versuchsdurchführung......................................................................................... 208
19
Lernkontrollfragen zu stochastischen Signalen und realen Systemen ..................... 216 19.1 Aufgabenkatalog A.............................................................................................. 216 19.2 Aufgabenkatalog B .............................................................................................. 218
20
Lösungen zu den Versuchen......................................................................................... 220 20.1 Hinweise .............................................................................................................. 220 20.2 Lösungen: Zeitdiskrete Signale ........................................................................... 220 20.3 Lösungen: Diskrete Fourier-Transformation ....................................................... 221 20.4 Lösungen: Schnelle Fourier-Transformation ....................................................... 225 20.5 Lösungen: Kurzzeit-Spektralanalyse: Grundlagen .............................................. 228 20.6 Lösungen: Kurzzeit-Spektralanalyse: Beispiele .................................................. 230 20.7 Lösungen: Lernkontrollfragen zur DFT, FFT und Kurzzeit-Spektralanalyse...... 234 20.7.1 Aufgabenkatalog A................................................................................ 234 20.7.2 Aufgabenkatalog B ................................................................................ 235 20.8 Lösungen: Faltung, Differenzengleichung und LTI-Systeme.............................. 237 20.9 Lösungen: Finite-Impulse-Response-Systeme..................................................... 239 20.10 Lösungen: Infinite-Impulse-Response-Systeme .................................................. 242 20.11 Lösungen: Entwurf digitaler FIR-Filter ............................................................... 246 20.12 Lösungen: Entwurf digitaler IIR-Filter................................................................ 251 20.13 Lösungen: Lernkontrollfragen zu FIR- und IIR-Systemen .................................. 256 20.13.1 Aufgabenkatalog A................................................................................ 256 20.13.2 Aufgabenkatalog B ................................................................................ 257 20.14 Lösungen: Kenngrößen stochastischer Signale.................................................... 258 20.15 Lösungen: Stochastische Signale und LTI-Systeme ............................................ 265 20.16 Lösungen: Analog-Digital-Umsetzung................................................................ 272 20.17 Lösungen: Reale digitale Filter: Koeffizientenquantisierung .............................. 274 20.18 Lösungen: Reale digitale Filter: Quantisierte Arithmetik .................................... 278 20.19 Lösungen: Lernkontrollfragen zu stochastischen Signalen und realen Systemen ............................................................................................ 282 20.19.1 Aufgabenkatalog A................................................................................ 282 20.19.2 Aufgabenkatalog B ................................................................................ 283
Formelzeichen und Abkürzungen........................................................................................ 285 Literaturverzeichnis.............................................................................................................. 288 Sachwortverzeichnis.............................................................................................................. 291
1
1
Erste Schritte in MATLAB
1.1
Einführung
Es liegt in der Natur der Sache, dass ein mächtiges Werkzeug wie MATLAB weder auf wenigen Seiten beschrieben noch in den wichtigsten Funktionen schnell beherrscht werden kann. Dieser Abschnitt soll Sie deshalb bei den ersten Schritten in MATLAB unterstützen. Anhand einfacher Beispiele wird gezeigt, wie Sie arithmetische Ausdrücke verarbeiten, einfache Grafiken erzeugen, eigene Programme mit Unterprogrammen und Funktionen erstellen und benützen können. Im Laufe des Praktikums werden sich Ihnen mit zunehmender Übung die Möglichkeiten von MATLAB erschließen. Die kommentierten Programmbeispiele zu den einzelnen Versuchen und die ausführliche Dokumentation von MATLAB werden Ihnen dabei helfen. Anmerkungen: (i) Einführungen in MATLAB bieten z. B. [ABRW07], [GrGr06] und [Pra02]. (ii) Über Bücher zur Signalverarbeitung mit MATLAB informiert die Webseite von The MathWorks mathworks.com/support/books/index.html. Eine Aufstellung mit ca. 50 deutschsprachigen Büchern kann ausgewählt werden. (iii) Im Folgenden wird MATLAB 7.3 (R2006b) unter Windows XP® verwendet.
1.2
Programmstart und einfache Befehle
1.2.1
MATLAB-Entwicklungsumgebung
Nach dem Start von MATLAB erscheint wie in Bild 1-1 die voreingestellte MATLAB-Bedienoberfläche MATLAB Desktop mit Menüleiste, Schaltknöpfen und drei geöffneten Fenstern: Current Directory c, Command History d und Command Window e. Das Fenster Workspace f verbirgt sich unter dem Fenster Current Directory. Abhängig von Ihrer Installation (Versionsnummer, Studentenversion und Zusatzpakete wie SIMULINK) können Ihre Bildschirmanzeigen von den Beispielen abweichen. Vom MATLAB Desktop aus haben sie Zugriff auf die Entwicklungsumgebung von MATALB. Anmerkungen: (i) Die Voreinstellung des MATLAB Desktop erreichen sie über die Menüleiste mit Desktop ) Desktop Layout ) Default. (ii) Das Arbeiten mit den Fenstern, den Menüleisten und Schaltelemente, geschieht in der PC-üblichen Art.
1.2.2
Einfache arithmetische Operationen
Wir beginnen mit der Voreinstellung in Bild 1-1. Für die ersten Schritte im interaktiven Modus benötigen wir nur das Command Window. Der Übersichtlichkeit halber schließen Sie die anderen Fenster links durch klicken mit der Maus auf das Symbol u am jeweiligen oberen Fensterrahmen rechts. Im Command Window erscheint der MATLAB Prompt >>. Dort können Befehle direkt eingegeben werden. Im interaktiven Modus fasst MATLAB alle Eingaben als Befehle auf und führt sie nach Möglichkeit direkt aus.
2
1 Erste Schritte in MATLAB
c e
f d
Bild 1-1 MATLAB-Bedienoberfläche (MATLAB Desktop)
Tippen Sie einfach 2+3 ein und drücken Sie dann die Eingabetaste zur Übernahme des Befehls durch den Rechner. >> 2+3
Sie erhalten als Ergebnis die Antwort (answer) ans = 5 MATLAB verfügt über die üblichen arithmetischen Operatoren und darüber hinaus über weitere arithmetische und logische Operatoren, Vergleichsoperatoren und spezielle Zeichen, die den Umgang mit Vektoren und Matrizen erleichtern. Ein Beispiel ist der Potenzoperator ^. Geben Sie ein >> 3^3
und Sie erhalten ans = 27 Kompliziertere arithmetische Ausdrücke können mit Hilfe von Klammern definiert werden. Auf die Eingabe >> 4*(4-3+2/4)
antwortet MATLAB mit ans = 6
Zum Ändern einer Eingabe stehen Ihnen die Cursor-Tasten zur Verfügung. Mit n können Sie frühere Eingaben wieder in die Kommandozeile laden und danach bearbeiten. Schließen Sie eine Kommandozeile mit dem Semikolon ; ab, so wird die Anzeige des Ergebnisses unterdrückt. MATLAB antwortet nur mit dem Prompt. Als Beispiel betrachten wir die letzte Eingabe. Mit der Pfeiltaste n holen Sie sie wieder hervor. Nun schließen Sie das Kommando mit einem Semikolon ab. >> 4*(4-3+2/4);
1.2 Programmstart und einfache Befehle
1.2.3
3
Konstanten und Variablen
Namen von Konstanten und Variablen beginnen in MATLAB stets mit einem Buchstaben. Sie können bis zu 63 Zeichen (Buchstaben, Ziffern, Unterstrich) enthalten. MATLAB unterscheidet zwischen Groß- und Kleinschreibung. Anmerkung: Ältere Versionen von MATLAB unterscheiden nur die ersten 31 Zeichen, siehe Getting Started with MATLAB, Version 7, 2004.
Das nachfolgende Beispiel verdeutlicht die Anwendung von Variablen >> A = 2;
>> a = 4;
>> B = A/a;
Der Wert einer Variablen wird durch Eingabe des Namens am Bildschirm angezeigt. >> B B = 0.5
MATLAB verfügt über einige vordefinierte Konstanten. Von besonderer Bedeutung ist die (Kreis-) Zahl S und die imaginäre Einheit i bzw. j. So lassen sich komplexe Zahlen einfach eingeben. >> z = 1+2j z = 1.0000 + 2.0000i
und
>> z = 2+3i z = 2.0000 + 3.0000i
Die Zahl S, genauer die in MATLAB verwendete Näherung, erhält man mit >> pi ans = 3.1416
Die Anzeige am Bildschirm hängt von der Einstellung des Ausgabeformates ab. Der tatsächlich intern verwendete Wert ist davon unabhängig. Das jeweils letzte Ergebnis wird in der Variablen ans gespeichert. Beachten Sie auch, dass die vordefinierten Konstanten durch Befehlseingabe überschrieben werden können. Anmerkungen: (i) MATLAB benutzt das Zahlenformat des IEEE-Standards für Gleitkommaarithmetik (IEEE standard for floating point arithmetic, ANSI/IEEE 754-1985) mit der Genauigkeit von ca. 16 Dezimalstellen und einem Wertebereich von etwa 10-308 bis 10+308. (ii) Fragen der numerischen (Un-) Genauigkeit sind wichtiger Gegenstand der digitalen Signalverarbeitung und werden in den Abschnitten 16 bis 18 behandelt.
1.2.4
MATLAB help-Kommando
Tippen Sie einfach help pi ein und drücken Sie dann die Eingabetaste zur Übernahme des Befehls durch den Rechner. >> help pi
Sie erhalten die kurze Erklärung
4
1 Erste Schritte in MATLAB PI
3.1415926535897....
PI = 4*atan(1) = imag(log(-1)) = 3.1415926535897....
In der zweiten Zeile ist der Zusammenhang zwischen der Zahl S und der ArkustangensFunktion atan und dem Imaginärteil imag der natürlichen Logarithmus-Funktion log angegeben. Funktionen in MATLAB werden später bei Bedarf noch genauer vorgestellt. Wenn Sie mehr über die Formateinstellung wissen wollen, so können Sie sich die Optionen des Befehls format durch Eingabe von help format anzeigen lassen. Dort erhalten Sie in der Regel auch eine Verknüpfung mit dem Help Browser, wo Sie weitere Informationen und Beispiele finden können.
1.2.5
Vektoren und Matrizen
Vektoren und Matrizen sind als geordnete Abfolgen von Zahlen in natürlicher Weise als zeitdiskrete Signale aufzufassen und spielen in der digitalen Signalverarbeitung eine herausragende Rolle. MATLAB erleichtert den Umgang mit Vektoren und Matrizen durch spezielle Befehle zu ihrer Erzeugung und Verknüpfung. Vektoren lassen sich mit eckigen Klammern „[ ]“ und dem Semikolon „;“ durch Angabe der Zahlenwerte einfach erzeugen. Geben Sie dazu folgendes Beispiel ein >> x = [1 2 3]
Sie erhalten von MATLAB den Zeilenvektor x = 1 2 3 Mit Semikolon zwischen den Zahlen ergibt sich der Spaltenvektor >> y = [1; 2; 3] y =
1 2 3
Mit den letzten beiden Befehlen haben Sie in MATLAB Datenfelder erzeugt, sogenannte Arrays, deren Elemente im MATLAB Arbeitsspeicher, dem Workspace, abgelegt sind. Über den Inhalt und die Organisation des Workspace informieren Sie sich im Command Window durch Eingabe des Befehls whos. >> whos Name
Size
Bytes
Class
A
1x1
8
double
B
1x1
8
double
a
1x1
8
double
x
1x3
24
double
y
3x1
24
double
z
1x1
16
double
Attributes
complex
Der Befehl whos listet alle im Speicher abgelegten Variablen mit ihren Dimensionen (size) in der Form „Zahl der Zeilen u Zahl der Spalten“ auf.
1.2 Programmstart und einfache Befehle
5
Anmerkungen: (i) Die Form der Anzeige kann im Fenster Workspace im Menü View eingestellt werden. (ii) Falls die Variable ans verwendet wurde, taucht sie ebenfalls hier auf.
Alternativ können Sie in der Menüleiste unter Desktop die Option Workspace auswählen. Dann erhalten sie das Fenster Workspace mit der Übersicht und zusätzliche Bearbeitungsmöglichkeiten, s. Bild 1-2. Die Anzeige können sie beispielsweise mit dem Menü-Punkt View und dann Choose Columns anpassen.
Bild 1-2 Fenster Workspace
Mit dem Befehl clear wird der gesamte Workspace gelöscht. >> clear
Wiederholen Sie die Eingaben zweier Vektoren x und y mit >> x = [1 2 3];
>> y = [4; 5; 6]; Die Dimension der Vektoren kann auch mit dem Befehl size bestimmt werden. >> size(x) ans = 1
3
Die Angabe ist wieder im Format Zahl der Zeilen u Zahl der Spalten. Für eindimensionale Arrays, ob Zeile oder Spalte, kann auch der Befehl length verwendet werden. Da MATLAB eine aufwendige Speicherverwaltung durchführt, können bei kompatiblen Dimensionen viele Befehle direkt auf Vektoren oder Matrizen angewandt werden. Wir betrachten einige Beispiele. Zunächst beginnen wir mit einem einzelnen Element eines Vektors. Durch >> x(2) ans = 2 erhalten Sie den aktuellen Wert des zweiten Elements des Vektors x. Mit
>> x(2) = 7
6
1 Erste Schritte in MATLAB ans = 1
7
3
wird der zweiten Komponente der Wert 7 zugewiesen. Beachten Sie, dass MATLAB die Komponenten eines Vektors mit dem Index 1 beginnend adressiert! >> x(0)
??? Subscript indices must either be real positive integers or logicals. Mit MATLAB können auch Vektoren miteinander verknüpft werden. Die Addition der beiden Vektoren >> x+y
liefert eine Fehlermeldung, da die Dimensionen bzgl. der Addition inkompatibel sind. Der Zeilenvektor x kann nicht mit dem Spaltenvektor y addiert werden. ??? Error using ==> plus Matrix dimensions must agree. Ein häufiger Programmierfehler ist die Verknüpfung von Datenfeldern mit inkompatiblen Dimensionen MATLAB wird Sie durch Fehlermeldungen darauf hinweisen. Durch den Operator ´ kann eine Transposition (Zeilen- und Spaltenvertauschung) eines Vektors oder einer Matrix vorgenommen werden. Mit >> z = y´ z = 4
5
6
erhält man einen Zeilenvektor der nun elementweise zu x addiert werden kann. >> x + z
ans = 5
12
9
Die Addition von zwei Spaltenvektoren ist ebenso möglich. Anmerkung: Mit ´ werden Vektoren und Matrizen mit komplexen Zahlen zusätzlich konjugiert.
Analog kann eine elementweise Multiplikation durchgeführt werden. Dazu wird der Multiplikationsoperator mit einem vorangestellten Punkt erweitert .* >> x.*z ans = 4
35
18
Werden hingegen die beiden Vektoren nur mit dem Multiplikationszeichen * verknüpft, so wird bei kompatiblen Dimensionen das Skalarprodukt (14 + 75 + 36) ausgeführt. >> x*y ans = 57 Die explizite Definition von Vektoren und Matrizen durch Eingabe der Elemente kann beschwerlich sein. Um dem abzuhelfen, bietet MATLAB spezielle Befehle an. Mit den folgenden Befehlen werden häufig benötigte Matrizen erzeugt. >> x = ones(2,3) x =
1
1
1
1
1
1
1.2 Programmstart und einfache Befehle
7
>> x = zeros(3,2) x =
0
0
0
0
0
0
7
7
7
7
7
7
>> x = repmat(7,2,3) x =
Eine weitere wichtige Möglichkeit Datenfelder zu erzeugen, ist die Anwendung des Doppelpunkt-Operators : . Er erzeugt Datenfelder mit Elementen gleichen Abstandes. Durch >> t = 0:10
wird ein eindimensionales Datenfeld (Zeilenvektor) mit der Bezeichnung t erstellt und angezeigt, das die Werte von 0 bis 10 in Einser-Schritten enthält. t = Columns 1 through 7 0
1
2
3
4
5
6
Columns 8 through 11 7
8
9
10
Die vorgestellten Beispiele geben erste Einblicke in die Möglichkeiten mit MATLAB Vektoren und Matrizen zu erzeugen und zu bearbeiten. Im Laufe der Versuche werden sich weitere dazugesellen.
1.2.6
Vordefinierte MATLAB-Funktionen und einfache Grafiken
Eine Stärke von MATLAB ist die umfangreiche Sammlung von vordefinierten Funktionen. Dies trifft sowohl auf die MATLAB-Grundausstattung als auch auf die Erweiterungspakete, Toolboxes genannt, zu. Die in den Versuchen benötigten Funktionen werden bei Bedarf eingeführt. Exemplarisch soll die Sinusfunktion grafisch dargestellt werden. Dazu wählen Sie zunächst eine Anzahl von äquidistanten Stützstellen. >> t = 0:.1:10;
Mit
>> y = sin(t);
erstellen Sie ein Datenfeld, das die Ergebnisse der Sinusfunktion angewandt auf jedes Element von t enthält. Eine grafische Darstellung der Sinusfunktion in einem eigenen Fenster erzeugen Sie durch den Befehl >> plot(t,y)
8
1 Erste Schritte in MATLAB
Bild 1-3 Grafische Darstellung der Sinusfunktion mit MATLAB
Die grafische Darstellung kann mit weiteren Befehlen ergänzt werden, siehe Bild 1-3. >> grid
>> xlabel(‘t \rightarrow’)
>> ylabel(‘y(t) \rightarrow’)
>> title(‘Sinus function’)
Mit dem Befehl help plot erhalten Sie eine Zusammenfassung von Optionen und eine Liste von Befehlen, mit denen Sie später grafische Ausgaben ihren Bedürfnissen anpassen können. Darüber hinaus bietet Ihnen MATLAB im Grafikfenster nachträglich Optionen zur Bearbeitung von Grafiken an. Die Darstellung am Bildschirm geschieht in der Regel nach linearer Interpolation der Funktionswerte zwischen den Stützstellen. Für die digitale Signalverarbeitung – wenn nur wenige Funktionswerte dargestellt werden sollen – ist die Interpolation irreführend. Deshalb enthält MATLAB den Grafikbefehl stem. Machen Sie sich den Unterschied deutlich, indem Sie die grafische Darstellung für die Sinusfunktion bei einer geringen Stützstellenzahl pro Periode mit dem Plotbefehlen plot und stem wiederholen. >> t = 0:10;
>> y = sin(t);
>> plot(t,y), grid
>> xlabel(‘t \rightarrow‘), ylabel(‘y(t) \rightarrow‘)
>> title(‘Sinus function with few samples‘)
Das resultierende Bild 1-4 lässt deutlich die interpolierten Geradenstücke zwischen den Stützwerten erkennen.
1.2 Programmstart und einfache Befehle
9
Bild 1-4 Sinusfunktion mit dem Grafikbefehl plot mit wenigen Stützstellen
Führen Sie nun die grafische Darstellung mit dem Befehl stem durch. >> stem(t,y,’full’), grid
>> xlabel(‘t \rightarrow‘), ylabel(‘y(t) \rightarrow‘)
>> title(‘Sampled sinus function in discrete-time representation‘) Das jetzt dargestellte Bild 1-5 hebt den diskreten Charakter der Stützstellen hervor. Die Formatangabe full ist optional und kann zur Hervorhebung des diskreten Charakters eingesetzt werden.
Bild 1-5 Sinusfunktion in diskreter Darstellung des Stabdiagramms mit dem Grafikbefehl stem
10
1.2.7
1 Erste Schritte in MATLAB
Schreiben eines MATLAB-Programms im Editor/ DebuggerWindow
Nachdem Sie das Command Window kennen gelernt haben, sollen Sie sich nun mit einfachen MATLAB-Programmen vertraut machen. Da MATLAB als Interpreter-Sprache die Befehlszeile sequentiell bearbeitet, liegt es nahe, mehrere Eingaben in einer Text-Datei, dem MATLAB Script File, zusammenzufassen. Damit MATLAB derartige Dateien als solche erkennen kann, sind sie mit der Endung .m zu versehen, wie beispielsweise sin.m, oder pi.m. Sie werden deshalb kurz als M-File bezeichnet. Um ein M-File zu erstellen, können Sie in der Menüleiste des MATLAB Desktop den Menüpunkt File ) New ) M-File anwählen. Danach erscheint das Editor/ Debugger-Window am Bildschirm. Sie können nun die in Bild 1-6 angegebenen Programmzeilen eingeben:
Bild 1-6 Programmerstellung im Editor/Debugger-Window
Zum Speichern des Programms gehen Sie nun zur Menüleiste, klicken dort File ) Save an und geben im File-Save-Fenster den Namen des Programms myprogram ein, der dann automatisch mit der Endung .m versehen wird. Günstigerweise legen Sie zum Speichern von MATLAB-Programmen, Daten usw. ein eigenes Verzeichnis an. Stellen Sie das Arbeitsverzeichnis Current Directory von MATLAB im Command Window auf Ihr Verzeichnis um. Über den Menü-Punkt Desktop ) Current Directory kann das Arbeitsverzeichnisfenster eingeblendet werden. Beachten Sie auch, mit dem Prozentzeichen % definieren Sie den Rest der Zeile als Kommentar. Nutzen Sie die Möglichkeit der Kommentierung ausgiebig, um Ihre Programme verständlich zu machen. Mit dem help-Kommando und dem Namen eines M-Files, z. B. help myprogram, werden alle dort direkt am Dateianfang stehenden Kommentarzeilen angezeigt. Damit lassen sich auf einfache Weise Hilfstexte zu Ihren Programmen erstellen. Das Programm kann nun über verschiedene Wege gestartet werden. Im Command Window müssen Sie dazu hinter dem MATLAB-Prompt den Namen des Programms eingeben aber
1.2 Programmstart und einfache Befehle
11
ohne die Endung .m. Nun wird das Programm abgearbeitet und die Sinusfunktion grafisch dargestellt.
Im Editor/Debugger-Window wird das Programm über das Menü Debug ) Run (bzw. Save and Run), oder kurz mit der Steuertaste F5, zur Ausführung gebracht.
Anmerkung: In MATLAB sind nützliche Debug-Werkzeuge eingebaut, mit denen Sie sich später vertraut machen können.
Eine weitere Möglichkeit ein M-File zu starten ist die Auswahl des Programms mit der rechten Maustaste im Fenster Current Directory und Wahl der Option Run. Bei der Interpretation der Befehle prüft MATLAB zunächst, ob die eingegebene Zeichenkette eine Größe im Workspace benennt. Ist das nicht der Fall, wird in den im MATLAB Path angegebenen Verzeichnissen nach einem M-File entsprechenden Namens gesucht. MATLAB beginnt dabei immer im aktuellen Arbeitsverzeichnis. Das erste vom Namen passende MFile wird ausgeführt.
1.2.8
Verkettete Programme und Unterprogramme
Das kleine Programmbeispiel in Bild 1-6 ist vom Prinzip her eine Verkettung von MATLABProgrammen. Taucht in einem M-File der Name eines weiteren M-File auf, so wird es geöffnet und sein Inhalt wie Tastatureingaben im Command Window interpretiert. Alle neu definierte Datenfelder werden im Workspace abgelegt und stehen auch nach der Bearbeitung des M-File als globale Variablen zur Verfügung. Dies ist für kleine Programmbeispiele sehr passend. Bei umfangreichen Projekten würden sich jedoch sehr schnell folgende Probleme einstellen: x Überlastung des Arbeitsspeichers
x unstrukturierte Programme
x unzumutbare Programmlaufzeiten
x häufige Programmierfehler und unbeabsichtigtes Überschreiben von Daten MATLAB unterstützt deshalb MATLAB-eigene und anwenderdefinierte Funktionen. Bei den MATLAB-eigenen Funktionen handelt es sich um M-Files oder in sich geschlossene speicher- und laufzeitoptimierte Programm-Module. Anwenderdefinierte Funktionen werden zwar prinzipiell wie Tastatureingaben im Command Window interpretiert, besitzen aber eine definierte Schnittstelle zum aufrufenden Programm und verwalten ihre Daten lokal. Das folgende Beispiel soll Ihnen das Arbeiten mit selbstdefinierten Funktionen erläutern. Wir wählen ein etwas anspruchsvolleres Beispiel aus der Signalverarbeitung, die Approximation eines periodischen Rechteckimpulszuges durch den Gleichanteil und die Harmonischen der Fourier-Reihe. Bild 1-7 zeigt einen Ausschnitt aus einem periodischen Rechteckimpulszug in normierter Darstellung. Die Periode beträgt 1. Die Amplitude alterniert im Abstand der halben Periode zwischen +1 und 0.
12
1 Erste Schritte in MATLAB
x(t)
1 0
t 1/2
0
1
2
3
Bild 1-7 Periodischer Rechteckimpulszug in normierter Darstellung
Wir erstellen zunächst eine MATLAB-Funktion für die Funktionswerte des periodischen Rechteckimpulses. Bevor Sie beginnen löschen Sie zuerst den Workspace mit dem Kommando clear im Command Window. Dann öffnen Sie ein neues Editor/Debugger-Window und geben die folgenden Zeilen ein. Programmbeispiel 1-1 Rechteckimpulszug % y = rectangular(t,p,w) % t : time samples (t>=0) % p : period % w : impulse width % rectangular.m * mw * 03/30/2007 function y = rectangular(t,p,w) y = zeros(size(t)); % default amplitude = 0 for n=1:length(t) x = mod(t(n),p); % mapping of t into fundamental period if x>=0 && x= , && und for haben Sie Zugriff auf die jeweilige MATLAB-Dokumentation.
Die Approximation des periodischen Rechteckimpulszuges geschieht mit der aus der Mathematik bekannten Fourier-Reihe x(t )
1 2 f 1 ¦ sin (2n 1) 2S t 2 S n 0 2n 1
Dazu erstellen Sie folgendes Programm: Programmbeispiel 1-2 Fourier-Reihe % y = fourier(t,N) % t : time samples % N : number of harmonics used (N>=1) % fourier.m * mw * 03/30/2007 function y = fourier(t,N) y = 0.5*ones(size(t)); % default amplitude = 0 for n=0:N-1 y = y + ((2/pi)/(2*n+1)) * sin((2*n+1)*2*pi*t); end
1.2 Programmstart und einfache Befehle
13
Speichern Sie die Funktion als M-File mit dem Namen fourier.m ab. Abschließend wird das Hauptprogramm mir der Festlegung der Parameter, dem Aufruf der Funktionen und der grafischen Ausgabe erstellt. Speichern Sie das folgende Hauptprogramm als M-File mit dem Namen fouriersyn.m ab. Programmbeispiel 1-3 Hauptprogramm % Fourier synthesis % fouriersyn.m * mw * 03/30/2007 t = 0:.01:3; % time samples y = rectangular(t,1,.5); % rectangular impulse train yF = fourier(t,10); % fourier synthesis with 10 harmonics plot(t,y,t,yF), grid % graphics axis([0 3 -0.2 1.2]) xlabel('t \rightarrow'), ylabel('y(t), y_{F}(t) \rightarrow') title('Fourier synthesis of rectangular impulse train')
Nach dem Aufruf des Programms fouriersyn sollten Sie die Grafik in Bild 1-8 erhalten. Sie zeigt das aus der Mathematik bekannte Ergebnis mit den Überschwingern der abgebrochenen Fourier-Reihe, dem gibbschen Phänomen. Letzteres spielt in der digitalen Signalverarbeitung eine große Rolle und wird in einem späteren Versuch noch genauer behandelt.
Bild 1-8
Periodischer Rechteckimpulszug in normierter Darstellung y(t) und seine Approximation yF(t) durch den Gleichanteil und die ersten zehn Harmonischen
In der MATLAB-Dokumentation wird zwischen einem Script und einer Function unterschieden. Ersteres erzeugt als Folge von MATLAB-Befehlen globale Variable, während eine Funktion mit lokalen Variablen arbeitet und Daten über ihre Schnittstelle, dem Funktionsaufruf, austauscht. Mit dem Befehl whos oder im Fenster Workspace können Sie das an den Programmbeispielen überprüfen. Die in den Funktionen verwendeten Variablen x und n sind als lokale Variable nicht im Arbeitsspeicher enthalten.
14
1.2.9
1 Erste Schritte in MATLAB
MATLAB Help und MATLAB Demo
Eine wichtige Möglichkeit sich zunächst mit MATLAB etwas vertrauter zu machen bietet das MATLAB-Fenster Help, s. Bild 1-9. Dort finden Sie unter dem Link Getting Started with MATLAB eine Einführung in MATLAB. Das Fenster ist u. a. über das Menü Help, das Fragezeichen ? oder zu Beginn im Command Window durch anklicken von MATLAB help erreichbar. MATLAB bietet mit dem Kommando demo bzw. den Reiter Demos im Help Navigator eine Auswahl von animierten Einführungen und Anwendungsbeispielen an, siehe Bild 1-10. Als Vorbereitung auf die kommenden Versuche sollten Sie sich mit den einführenden VideoBeispielen zur Entwicklungsumgebung Desktop Tools and Development Environment vertraut machen. Für die effektive Entwicklung von MATLAB-Programmen ist die Anwendung des Cell Mode besonders hervorzuheben, siehe Video Rapid Code Iteration Using Cells.
Bild 1-9 MATLAB Help Window
1.2 Programmstart und einfache Befehle
15
Bild 1-10 MATLAB Demo Window mit animierten Einführungen zu Desktop Tools and Development Environment
Falls das für Sie der erste Kontakt mit MATLAB sein sollte, bedenken Sie, dass ein Programmsystem und Entwicklungsumgebung wie MATLAB nicht in einem Trockenkurs anhand einer Bedienungsanleitung erlernt werden kann. Hier ist „Lernen durch gezieltes Probieren“ der sinnvollste Weg. Die folgenden Versuche werden Ihnen dabei Schritt für Schritt helfen.
16
2
Zeitdiskrete Signale
2.1
Einführung
Dieser Versuch macht Sie mit zeitdiskreten Signalen vertraut. Dazu gehören in der Vorbereitung die Angabe von zeitdiskreten Signalen als mathematische Funktionen und ihre grafische Darstellung. In der Versuchsdurchführung überprüfen Sie Ihre Vorbereitung mit MATLAB. Sie erzeugen die Signale am PC und stellen sie grafisch dar. Im zweiten Schwerpunkt des Versuchs generieren Sie mit MATLAB beispielhaft Audio-Signale und machen sie hörbar. Eine Ausstattung Ihres PC mit einer Sound Card wird vorausgesetzt. Lernziele Nach Bearbeiten des Versuches können Sie x x
die wichtigen Signale Impulsfolge, Sinus- und Kosinusfolge und Exponentielle analytisch und grafisch darstellen
x
einfache MATLAB-Befehle zur Erzeugung und bildlichen Darstellung von Signalen anwenden
x
die Bedeutung der Abtastfrequenz für Audiosignale erklären
x
mit MATLAB Audiosignale generieren und hörbar machen einfache MATLAB-Programme verstehen
2.2
Elementare zeitdiskrete Signale
2.2.1
Einführung
Ein Signal ist eine mathematische Funktion von mindestens einer unabhängigen Variablen x(t), wobei im Folgenden falls nicht anders erwähnt t als die Zeit interpretiert wird. Ist die Variable t kontinuierlich, so liegt ein zeitkontinuierliches Signal vor. Ist t nur für diskrete Werte definiert, so spricht man von einem zeitdiskreten Signal oder einer Folge x[n]. Der Laufindex n heißt entsprechend normierte Zeitvariable. Häufig entsteht die Folge x[n] durch eine gleichförmige zeitliche Diskretisierung eines Signals x(t). Man spricht dann von der Abtastung und der Abtastfolge mit dem Abtastintervall Ts. x[n]
x(t
nTs )
( 2.1)
Anmerkungen: (i) Die Abtastung meint hier eine ideale Abtastung, da die Funktionswerte nicht verändert werden. Die reale Abtastung, z. B. durch Analog/Digital-Umsetzer, liefert zeit- und wertdiskrete Folgen. Man spricht dann von einer Digitalisierung. Sie wird in Abschnitt 16 noch ausführlich behandelt. (ii) Der Index s erinnert an die englische Bezeichnung Sampling Operation für die Abtastung. (iii) Wegen der großen Wortlänge der Zahlendarstellung in MATLAB wird im Weiteren, falls nicht ausdrücklich anders erwähnt, der diskrete Charakter der in MATLAB darstellbaren Maschinenzahlen vernachlässigt.
Viele Signale sind von Natur aus zeitdiskret, wie z. B. der tägliche Börsenschlusswert einer Aktie. Auch können, wie im zweiten Schwerpunkt dieses Versuchs gezeigt wird, digitale Signale zur Synthetisierung zeitkontinuierlicher Signale benutzt werden.
2.2 Elementare zeitdiskrete Signale
17
Kurze zeitdiskrete Signale werden einfach durch Angabe ihrer Werte charakterisiert, wie beispielsweise x[n] = {0, 1, 1, 4}
mit n {0,1,2,3} oder
x[n] = {1, 1/2, 1/3, 1/4, 1/5, ...}
mit n = 0,1,2,...
Der erste Wert gehört in der Regel zum Index n = 0, der zweite zu n = 1, usw. Falls nötig werden Folgen endlicher Länge durch führende bzw. nachfolgende Nullen ergänzt. Man spricht von einer rechtsseitigen Folge, wenn x[n] 0 für n < 0. Hinweis: Beachten Sie, dass in MATLAB die Elemente eines Vektors mit dem Index 1 beginnend adressiert werden. Beispiel Sinusfunktion und Sinusfolge Ein typisches Beispiel liefert die Sinusfunktion x(t )
sin(t )
(2.2)
mit der zugehörigen Abtastfolge x[n] sin(nTs )
(2.3)
Ts = S / 4
(2.4)
Ein MATLAB-Programm zur grafischen Darstellung der beiden Signale ist im Programmbeispiel 2-1 angegeben. Es liefert die Grafiken in Bild 2-1 rechts. Im unteren Teil ist die Sinusfolge in einem Stabdiagramm dargestellt. Durch den Befehl stem wird der zeitdiskrete Charakter hervorgehoben.
sinus function 1 0.5 x(t) o
für das Abtastintervall
-0.5 -1
Anmerkungen: Man beachte, dass auch das obere Bild genau genommen auf einer Auswertung an diskreten Stützstellen beruht.
0
5
t in s o sinus sequence
10
15
0
5
no
10
15
1 0.5 x[n] o
Manchmal werden zeitdiskrete Signale „kontinuierlich“ dargestellt, beispielsweise, weil die Grafikfunktion zwischen den Folgeelementen linear interpoliert. Derartige Darstellungen sollten vermieden werden. Unter Umständen sind jedoch so viele Folgenelemente in einem Bild unterzubringen, dass sich der Eindruck eines zeitkontinuierlichen Signals nicht vermeiden lässt.
0
0 -0.5 -1
Bild 2-1 Sinusfunktion x(t) und Sinusfolge x[n]
18
2 Zeitdiskrete Signale
Programmbeispiel 2-1 Sinusfunktion und Sinusfolge % sinus function and sinus sequence % dsplab2_1.m * mw * 03/16/2008 t = 0:.01:15; % time variable x_t = sin(t); % sinus function n = 0:15; % normalized time Ts = pi/4; % sampling interval x_n = sin(Ts*n); % sinus sequence % Graphics FIG1 = figure('Name','dsplab2_1','NumberTitle','off'); subplot(2,1,1), plot(t,x_t,'LineWidth',2) grid, xlabel('{\itt} in s \rightarrow'), ylabel('{\itx}({\itt}) \rightarrow') title('sinus function') subplot(2,1,2), stem(n,x_n,'full') grid, xlabel('{\itn} \rightarrow'), ylabel('{\itx}[{\itn}] \rightarrow') title('sinus sequence')
Im Folgenden werden einige für die digitale Signalverarbeitung typische Signale betrachtet. In den vorbereitenden Aufgaben sollen Sie diese skizzieren, um die Ergebnisse dann in der Versuchsdurchführung zu kontrollieren. Zunächst werden die mathematischen Definitionen vorgestellt: x Impulsfolge und Sprungfolge
1 für n ¯0 sonst
G [ n] ®
u[n]
0
1 für n t 0 ® ¯0 sonst
(2.5)
(2.6)
x Sinus- und Kosinusfolge mit der normierten Kreisfrequenz : und der eulerschen Zahl e = 2.7182... x[n] sin(:n)
x[n] e j:n
x
cos(:n) j sin(:n)
(2.7) (2.8)
Exponentielle mit der komplexen Basis z x[n]
zn
(2.9)
2.2 Elementare zeitdiskrete Signale
2.2.2
19
Vorbereitende Aufgaben
Skizzieren Sie in Bild 2-2 die Impulsfolgen x1[n] G [n] , x2 [n] G [n 3] und x3 [n] G [n 3] .
A2.1
x1[n]
x2[n]
x3[n]
1
1
1
0
0
0
1 5
0
n
1 5
5
0
n
1 5
5
0
n
5
Bild 2-2 Impulsfolgen
Skizzieren Sie in Bild 2-3 die Sinus- und Kosinusfolgen x4 [n] sin(2S n 16) , x5 [n] cos(2S n 7) und x6 [n] cos(n 2) .
A2.2
1
x4[n] 0
1 16
0
1
16
1
x5[n]
x6[n]
0
1
n
0
0
5
n
10
1
0
Bild 2-3 Sinus- und Kosinusfolgen
5
n
10
20 A2.3
2 Zeitdiskrete Signale Skizzieren Sie in Bild 2-4 die Exponentielle x7 [n]
z n für z 1.1 e jS
4
.
Im
x7[n]
4
3
5
2
n=0 1
1
2
Re
Bild 2-4 Exponentielle, Bezifferung mit n = 5:10
A2.4
Sind die Folgen x4[n] bis x6[n] periodisch? Geben Sie gegebenenfalls die Perioden an. #
A2.5
Machen Sie sich mit dem Programmbeispiel 2-1 vertraut.
2.2.3
Versuchsdurchführung
M2.1
Erzeugen Sie mit MATLAB die Signale aus der Vorbereitung A2.1 bis 3 und vergleichen Sie die Bildschirmdarstellungen mit Ihren Skizzen. Hinweise: (i) Siehe Hilfe zum Befehl polar. (ii) Sie können den Befehl subplot benutzen, um mehrere Signale in einem Grafikfenster darzustellen. Das Überschreiben von Bildinhalten vermeiden Sie durch Öffnen eines neuen Fensters mit dem Befehl figure, wie im Programmbeispiel 2-1 gezeigt.
2.3
Audiosignale
Im zweiten Teil des Versuches soll die Verbindung zwischen den digitalen Signalen am PC und der sinnlich-realen Welt mit Hilfe von Audiosignalen hörbar gemacht werden. Dabei lernen Sie ein Beispiel für ein umfangreicheres MATLAB-Programm kennen. Hinweis: Für die folgenden Experimente ist eine Sound Card erforderlich.
2.3.1
Einführung
Analoge Signale, also wert- und zeitkontinuierliche (elektrische) Signale, können mit einem Analog-Digital(A/D)-Umsetzer durch Abtastung und Quantisierung in ein wert- und zeitdiskretes Signal, ein digitales Signal, überführt werden [TiSc99], [Wer06]. Umgekehrt lassen sich aus digitalen Signalen mit einem Digital-Analog(D/A)-Umsetzer analoge Signale erzeugen. Wichtige Parameter dabei sind die Abtastfrequenz fs, d. h. die Häufigkeit der Abtastungen pro Sekunde, und die Wortlänge w, also die Zahlendarstellung der Amplituden des digitalen Signals. Dies wird in Abschnitt 16, Analog-Digital-Umsetzung, noch genauer erläutert.
2.3 Audiosignale
21
Ein moderner PC besitzt A/D- und D/A-Umsetzer mit einer typischerweise von 5 bis 44,1 kHz einstellbaren Abtastfrequenz und einer Wortlänge von 8 oder 16 Bit. Er erreicht damit theoretisch eine Hörqualität vergleichbar zur Audio-CD. Am PC liegen Audiosignale oft als Dateien im Wave-Format wav vor. MATLAB kann derartige Dateien lesen und schreiben, sowie digitale Signale direkt an die Sound Card ausgeben. Die MATLAB Befehle hierzu sind wavread, wavwrite, sound und soundsc. Anmerkung: Für Testzwecke geeignet ist der Befehl beep, der eine einmalige Klangausgabe, den Beep Sound, erzeugt.
2.3.2
Beispiel: Synthese eines Audiosignals
Zunächst wird an die grundsätzlichen Zusammenhänge erinnert. Dazu wird beispielhaft ein Ton mit der Frequenz von 220 Hz und der Dauer von einer Sekunde zugrunde gelegt. Die Abtastfrequenz sei 8 kHz. Wie wird das Tonsignal mit MATLAB erzeugt und hörbar gemacht? Die Aufgabe wird durch ein sinusförmiges Signal mit entsprechender Frequenz und Dauer gelöst. Hierfür benötigt wird die Frequenz f in Hertz und den Vektor der Abtastzeitpunkte t in Sekunden. Die Abtastfrequenz fs in Hertz beträgt 8000. Es fallen in einer Sekunde 8000 Abtastwerte an. Wird beim Zeitindex 0 angefangen, werden tatsächlich 8001 Abtastwerte benutzt. Die Ausgabe durch die Sound Card erfolgt mit dem Befehl soundsc. Zusammengefasst werden die untenstehenden Programmzeilen benötigen fs = 8000;
% sampling frequency in Hertz
f = 440;
% pitch
t = 0:1/fs:1;
% sampling instances (normalized time)
s = sin(2*pi*f*t);
% sound
soundsc(s)
% play sound
Im Versuch soll ein Musikstück vertont werden. Grundlage ist die Zeit-Frequenz-Darstellung, die Notenschrift in Bild 2-5. Dort wird horizontal der zeitliche Verlauf und vertikal die Frequenzlage angegeben. Die daraus resultierende Abfolge der Töne ist in Tabelle 2-1 zusammengestellt. Die zugeordneten Zeitdauern beziehen sich auf ein wählbares Grundintervall.
Bild 2-5 Prélude von Marc-Antoine Charpentier, *1634,†1704
Tabelle 2-1 Noten und normierte Zeitintervalle zu Bild 2-5 Note
d1
g1
g1
a1
h1
g1
d2
h1
h1
c2
Dauer
1/4
1/4
1/8
1/8
1/4
1/4
1/2
3/8
1/8
1/4
Note
d2
c2
h1
c2
d2
a1
g1
a1
h1
a1
Dauer
1/8
1/8
1/8
1/8
1/4
1/8
1/8
1/8
1/8
1/4
22
2 Zeitdiskrete Signale
Der Zusammenhang zwischen den Noten und der physikalischen Signaldarstellung, d. h. die Frequenzlage, erschließt sich aus den in der Musik bekannten Beziehungen der Kammerton (Normalton, Stimmton) a1 entspricht einem Sinuston mit 440 Hz
eine Oktave, z. B. der Übergang von a1 zu a2, umfasst eine Frequenzverdopplung, d. h. a2 entspricht 880 Hz
in einer Oktave gibt es 12 Halbtonschritte
Daraus folgt die Frequenzzuordnung der C-Dur-Tonleiter in Tabelle 2-2. Tabelle 2-2 Frequenzen der C-Dur-Tonleiter bezogen auf 440 Hz Note Frequenzfaktor rel. zu a1
c1
29/12
d1
27/12
e1
25/12
f1
g1
24/12
22/12
a1
h1
c2
1
2+2/12
2+3/12
Mit den Festlegungen kann nun, wie im Programmbeispiel 2-2, jeder Note ein Sinuston mit entsprechender Frequenz und Dauer zugeordnet werden. Hinweise: (i) Im Englischen wird für die deutsche Note h der Buchstabe b verwendet und die Tonhöhe pitch genannt. Durch das Vorzeichen # auf der 5. Linie von unten wird der Ton f um einen Halbton zum fis erhöht. (ii) Beispielsweise ergibt sich die Frequenz für den Ton d2 aus Tabelle 2-2 zu 4402+5/12 Hz. Das im Programmbeispiel 2-2 erzeugte Audiosignal klingt unnatürlich, da es nur aus jeweils ein- und ausgeschalteten Sinustönen besteht. Ein besserer Höreindruck lässt sich mit einer Hüllkurvenbewertung erzielen. In der Audiotechnik wird hierfür oft das ADSR-Profil in Bild 2-6 verwendet [StBr96]. Es besteht aus vier Geradenstücken, die die vier Phasen Attack (A), Delay (D), Sustain (S) und Release (R) repräsentieren.
E(t) EA = 1
Das Programmbeispiel 2-3 stellt eine mögliche Realisierung der ADSR-Hüllkurvenbewertung für jeweils einen Ton dar.
ED
A
D S
ES
R tA
tD
tS
t
tR
Bild 2-6 ADSR-Profil
Programmbeispiel 2-2 Audiosignal „Prélude“ % audio signal prelude by Marc-Antoine Charpentier (1634-1704) % dsplab2_3.m * mw * 03/16/2008 A = 440; % pitch in Hz Dh = A*2^(5/12); % high C = A*2^(3/12); B = A*2^(2/12); G = A*2^(-2/12); Fis = A*2^(-3/12); E = A*2^(-5/12); D = A*2^(-7/12); pitch = [D G G A B G Dh B B C Dh C B C Dh A G A B A]; duration = [2 2 1 1 2 2 4 3 1 2 1 1 1 1 2 1 1 1 1 2];
2.3 Audiosignale N = 1/4; fs = 8000; music = []; for k = 1:length(pitch) L = N*fs*duration(k); n = 0:L-1; w = (2*pi/fs)*pitch(k); s = sin(w*n); music = [music s]; end soundsc(music,fs,16);
23 % time scaling % sampling frequency % define variable for audio signal % for loop % number of samples per tone % normalized time % normalized radian frequency % sinusoidal tone % concatenate audio signal % sound card output
2.3.3
Vorbereitende Aufgaben
A2.6
Machen Sie sich mit den Programmbeispielen 2-2 und 2-3 vertraut. Hinweis: Die für die praktische Durchführung der Versuche benötigen Programmdateien können Sie auch über das Internet beim Vieweg+Teubner Verlag unter viewegteubner.de abrufen.
2.3.4
Versuchsdurchführung
M2.2
Starten Sie das Programmbeispiel 2-2 dsplab2_3.
M2.3
Zur Verbesserung des Höreindrucks können die Sinustöne mit ADSR-Hüllkurven bewertet werden. Überprüfen Sie die Klangqualität des so modifizierten Audiosignals. Hinweis: Verwenden Sie die MATLAB-Funktion aus Programmbeispiel 2-3 adsr_profile. Modifizieren sie das Programm dsplab2_3 z. B. mit sADSR = adsr_profile(0.15,0.25,0.9,0.9,0.7,s); music = [music sADSR];
Sie können nun auch verschiedene Einstellungen für die Abtastfrequenz fs und die Zeitskalierung N und weiterer Parameter des ADSR-Profils ausprobieren.
Programmbeispiel 2-3 ADSR-Profil % % % % % % % % % % %
dsp laboratory - assignment 2 shaping pure tones by ADSR profile y = adsr_profile(tA,tD,tS,ED,ES,x) tA : relative duration of attack phase tD : relative duration of delay phase = tD - tA tS : relative duration of sustain phase = tS - tD ED : relative amplitude of profile at time tD ES : relative amplitude of profile at time tS x : tone to be shaped y : shaped tone adsr_profile.m * mw * 03/16/2008
24
2 Zeitdiskrete Signale
function y = adsr_profile(tA,tD,tS,ED,ES,x) tR = length(x); y = zeros(1,tR); % Attack phase NA = floor(tA*tR)+1; A =1/(NA-1); E = 0; for k=2:NA E = E+A; y(k) = E*x(k); end % Delay phase ND = floor((tD-tA)*tR); D = (1-ED)/ND; for k=NA+1:NA+ND E = E-D; y(k) = E*x(k); end % Sustain phase NS = floor((tS-tD)*tR); S = (ED-ES)/NS; for k=NA+ND+1:NA+ND+NS E = E-S; y(k) = E*x(k); end % Release phase NR = tR-k; R = E/NR; for k=NA+ND+NS+1:tR E = E-R; y(k) = E*x(k); end return
M2.4
% number of samples (tone duration) % allocate memory for output signal % number of samples in attack phase % envelope increment % envelope
% number of samples in delay phase % envelope decrement
% number of samples in sustain phase % envelope decrement
% number of samples in release phase % envelope decrement
Stellen Sie das Audiosignal nach der Hüllkurvenbewertung grafisch dar. Hinweis: Ergänzen Sie dazu das Programm beispielsweise mit den Grafikbefehlen % graphics t=0:length(music)-1; t=t/fs; % time scale FIG1 = figure('Name','dsplab2_3 : Audio signal with ADSR', 'NumberTitle', 'off'); plot(t,music) grid, xlabel('t in s \rightarrow'), ylabel('x(t) \rightarrow')
M2.5
Suchen Sie sich eine WAVE-Datei auf Ihrem PC und laden Sie sie mit dem MATLAB-Befehl wavread. Bestimmen Sie die Abtastfrequenz und die Wortlänge und geben Sie das Signal grafisch aus. Beschriften Sie dabei die Zeitachse richtig. Hinweise: (i) MATLAB liefert als Beispiel die Datei handel mit, siehe help sound. Diese finden Sie auch auf der Webseite zum Buch als handel.wav. (ii) Zum Import von Daten in stellt MATLAB den Import Wizard zur Verfügung. Gestartet wird er beispielsweise durch Anklicken (Doppelklick) einer WAV-Datei
2.3 Audiosignale
25
im Fenster Current Directory. Die Abtastfrequenz (fs) wird ebenfalls angegeben. M2.6
Mit MATLAB lassen sich ohne große Vorbereitung Audioeffekte modellieren. Ein Beispiel ist der Echoeffekt. Machen Sie das Audiosignal aus Beispiel 2-2 mit einem Echo mit 300 ms Verzögerung hörbar. Dämpfen Sie das Echo mit den Faktor 0.4. Variieren Sie die Verzögerung und Gewichtung des Echos nach belieben. Welchen Einfluss haben die beiden Parameter auf den Höreindruck?
Hinweise zu MATLAB-Funktionen und M-Files In Tabelle 2-3 werden für den Versuch einige nützliche MATLAB-Befehle und -Funktionen aufgelistet, zu denen Sie sich mit der Help-Funktion Erläuterungen und Beispiele anzeigen lassen können. Tabelle 2-3 MATLAB-Befehle benutzte Programme und Dateien Befehle zur Programmablaufsteuerung
for, end
Operatoren und spezielle Zeichen
+ , - , * , / , ^ , : , [ ]
Elementare Matrizen und Matrixmanipulationen
length, ones, zeros
Elementare mathematische Funktionen und Konstanten
cos, exp, floor, pi, sin
2-dim. Grafik-Befehle
axis, figure, grid, plot, polar, stem, subplot, title, xlabel, ylabel, \rightarrow
Sound-Befehle
beep, sound, soundsc, wavread, wavwrite
Þ Online-Ressourcen
dsplab2_1.m, dsplab2_2.m, dsplab2_3.m, adsr_profile.m, handel.wav, dsplab2_3b.m, dsplab2_3b.m, dsplab2_3c.m, dsplab2_3d.m
26
3
Diskrete Fourier-Transformation
3.1
Einführung
Dieser Versuch ist der erste von vier zum Thema Frequenzbereichsdarstellung mit der diskreten Fourier-Transformation (DFT). Er führt Sie in die Grundlagen einer der häufigsten Anwendungen der digitalen Signalverarbeitung ein, die Kurzzeit-Spektralanalyse. Wichtige mathematische Zusammenhänge werden in der Versuchsvorbereitung vorgestellt und an Beispielen erläutert. In der Versuchsdurchführung werden die Ergebnisse mit MATLAB überprüft und die DFT zur Kurzzeit-Spektralanalyse angewendet. Anmerkung: Die DFT gehört zur Familie der linearen Blocktransformationen, wie die eng mit ihr verwandte und in der Audio- und Videocodierung wichtige diskrete Kosinus-Transformation (DCT) [Wer08b]. Lernziele Nach Bearbeiten dieses Versuches können Sie x x x x x x
die Definitionsgleichungen der DFT und IDFT angeben die Begriffe harmonische Analyse, DFT-Spektrum und DFT-Koeffizient sowie die Zusammenhänge erläutern den prinzipiellen Zusammenhang zwischen den DFT-Koeffizienten und den transformierten Zeitsignalen erklären für Sinus- und Kosinussignale das DFT-Spektrum und umgekehrt berechnen für eine periodische Kosinusfolge die DFT-Länge so bestimmen, dass das DFT-Spektrum genau zwei von null verschiedene DFT-Koeffizienten aufweist den Leakage-Effekt erklären und seine Bedeutung für die Spektralanalyse einschätzen
3.2
Grundlagen
3.2.1
Diskrete Fourier-Transformation
Die Signaldarstellung im Frequenzbereich ist in vielen Anwendungsgebieten von großer Bedeutung. Die für zeitkontinuierliche Signale bekannten Methoden der Fourier-Analyse in Tabelle 3-1 sind auf zeitdiskrete Signale übertragbar [Wer08b]. Der harmonischen Analyse periodischer, zeitkontinuierlicher Signale mit der Fourier-Reihe entspricht die diskrete FourierTransformation (DFT) periodischer Folgen. Sie nimmt eine herausragende Rolle in der Signalverarbeitung ein. Ihre Bedeutung gründet sich auf vier Eigenschaften: Die DFT lieferte eine eineindeutige Abbildung zwischen der Zeitfolge x[n] und ihrem Spektrum X[k].
Die DFT steht in engem Zusammenhang mit der Fourier-Reihe und der Fourier-Transformation. Sie wird deshalb auch zur Analyse zeitkontinuierlicher Signale eingesetzt und auch vom Spektrum im Frequenzbereich gesprochen.
Die DFT eignet sich besonders zur numerischen Berechnung auf Digitalrechnern, da sie sowohl im Zeit- als auch im Frequenzbereich diskret und von endlicher Länge ist.
3.2 Grundlagen
27
Die DFT kann mit der schnellen Fourier-Transformation effizient berechnet werden. Tabelle 3-1 Signaldarstellung im Zeit- und im Frequenzbereich Fourier-Analyse zeitkontinuierliche Funktionen
zeitdiskrete Funktionen
Fourier-Reihe
diskrete Fourier-Transformation (DFT)
¦
aperiodische Zeitfunktion
periodische Zeitfunktion
f
x(t ) 1 T0
ck
k f
t0 T0
³
ck e jkZ0t
1 N
x[n]
¦ X [k ] e j 2S kn / N
N 1 k 0
¦ x[n] e j 2S kn / N
N 1
x(t ) e jkZ0t dt
X [k ]
n 0
t0
) Linienspektrum der DFT-Koeffizienten Xk ) Linienspektrum mit den Fourier-Koefmit der Periode N zu den normierten Kreisfizienten ck bei den Kreisfrequenzen kZ0 mit frequenzen k 2S / N, k = 0 : N1, mit der norder Grundkreisfrequenz Z0 = 2S/T0 und der mierter Grundkreisfrequenz 2S / N und der Periode T0 des Zeitsignals Periode N des Zeitsignals Fourier-Transformation
x(t )
1 2S
X ( jZ )
f
³
f
X ( jZ ) e jZ t dZ
f
³ x(t ) e
f
jZ t
x[n]
1 2S
j:
e j :n d :
¦ x[n] e j:n n f
X e j:
dt
) allgemeines Spektrum
³ 2S X e
Fourier-Transformation (für Folgen)
f
) periodisches Spektrum mit Periode 2S
Wegen ihres engen Zusammenhangs mit der Fourier-Reihe wird die DFT auch als „diskrete Fourier-Reihe“ bezeichnet. Während die Fourier-Reihe mit k = 0, r1, r2, ... ein unendlich ausgedehntes Linienspektrum zu den Kreisfrequenzen kZ0 erzeugt, ordnet die DFT wegen der Periodizität der Exponentialfunktion exp(j2Sk/N) den N Elementen einer Periode der Folge genau N Spektrallinien für k = 0, 1, ..., N1 zu. Man spricht deshalb auch von einer BlockTransformation. Für das Verständnis der DFT und ihrer Anwendung ist weiter wichtig, dass sie für periodische Folgen definiert ist, siehe Bild 3-1, aber häufig auf Folgen endlicher Länge angewendet wird. Da jede Folge endlicher Länge L mit der Periode N t L eindeutig periodisch fortgesetzt werden kann, ist die DFT auf alle geordneten Zahlenfolgen endlicher Länge anwendbar. Grundperiode
8
1 0
78
Bild 3-1 Periodische Folge
n
28
3 Diskrete Fourier-Transformation
Man beachte in Tabelle 3-1, dass die DFT und ihr Inverses (IDFT) bis auf den Skalierungsfaktor 1/N symmetrisch sind. Damit kann jede geordnete Folge endlicher Länge prinzipiell sowohl als Zeitsignal als auch als Spektrum interpretiert werden. Und die Sätze der DFT für den Zeitbereich haben ihre Entsprechungen im Frequenzbereich. Die Überlegungen fassen die folgenden Definitionen zusammen: Die diskrete FourierTransformation (DFT) einer Folge x[n] der Länge N mit n = 0, 1, ..., N1 ist die Folge der DFT-Koeffizienten
¦ x[n] wNkn
N 1
X [k ]
für k = 0, 1, 2, ..., N1
(3.1)
n 0
mit dem komplexen Faktor wN
e j 2S / N
(3.2)
Die inverse DFT (IDFT), liefert wieder die ursprüngliche Folge. x[n]
1 N 1 ¦ X [k ] wNkn Nk 0
1 N 1 ª § 2S kn · § 2S kn · º ¦ X [k ] «¬cos ¨© N ¸¹ j sin ¨© N ¸¹»¼ Nk 0
(3.3)
Die Folge x[n] und ihr DFT-Spektrum X[k] bilden ein DFT-Paar. x[n] l X [k ] DFT
(3.4)
Beispiel DFT einer Kosinusfolge
Ein grundlegendes Beispiel liefert die DFT der Kosinusfolge §S · x[n] cos ¨ n ¸ ©8 ¹
(3.5)
Sie soll der DFT der Länge N = 32 unterworfen werden. 2S
§ S · j nk ¦ cos ¨© 8 n ¸¹ e 32 n 0 31
X [k ]
für k = 0:31
(3.6)
Für den weiteren Rechengang ist es vorteilhaft, die Kosinusfunktion mit der eulerschen Formel in komplex-exponentieller Form darzustellen. Nach kurzer Zwischenrechnung erhält man zwei geometrische Reihen
X [k ]
S § S · 1 31 ¨ j 16 2 k n j 16 2 k n ¸ e e ¸ 2 n 0¨ © ¹
¦
die in dem Ausdruck resultieren
für k = 0:31
(3.7)
3.2 Grundlagen
29
X [k ]
§ · j 2S 2 k j 2S 2 k ¸ 1 ¨1 e 1 e ¨ ¸ S S 2¨ j 2 k ¸ j 2 k 16 16 1 e © 1 e ¹
für k = 0:31
(3.8)
Die Untersuchung der Brüche zeigt, dass die Zähler null sind, da in den Exponenten stets ein ganzzahliges Vielfaches von 2S auftritt. Man beachte, dass auch die Nenner für k = 2 und 30 Nullstellen aufweisen. Für k = 2 und 30 liegen somit unbestimmte Ausdrücke vor, die aus (3.8) mit der Regel von L’Hospital, oder einfacher direkt durch Einsetzen der beiden Werte für k aus (3.7) bestimmt werden können. Es resultiert die DFT der Kosinusfolge X [k ] 16 G [k 2] G [k 30]
für k = 0:31
(3.9)
Die Kosinusfolge und ihr DFT-Spektrum sind in Bild 3-2 dargestellt. Sie wurden mit dem Programmbeispiel 3-1 (Hauptprogramm mit Funktion) berechnet.
0
-1
0
5
10
15 no
20
25
10 0 -10 0
5
10
15 k o
20
25
30
0
-1
30
Im(X[k ]) o
Re(X[k ]) o
1 Im(x[n]} o
Re(x[n]) o
1
0
5
10
15 no
20
25
30
0
5
10
15 k o
20
25
30
10 0 -10
Bild 3-2 Kosinusfolge (oben) und ihr DFT-Spektrum (unten)
Wie in Bild 3-2 zu sehen ist, erfasst die DFT der Länge N = 32 genau zwei Perioden der Kosinusfolge. Die DFT liefert deshalb genau zwei von null verschiedene Koeffizienten, nämlich für k = 2 und k = N 2 = 30. Damit kann von den DFT-Koeffizienten eindeutig auf das Kosinussignal und seine Periode geschlossen werden. Die Betrachtung der DFT als harmonische Analyse macht dies nochmals deutlich, siehe (3.3). Die DFT stellt jede Folge als mit den DFT-Koeffizienten gewichtete Überlagerung von Kosinus- und Sinusfolgen dar
x[n]
¦
1 N 1 X [k ] cos :k n j sin :k n Nk 0
mit den normierten Kreisfrequenzen :k
2S k N
für k = 0:N1
für n = 0:N1
(3.10)
(3.11)
30
3 Diskrete Fourier-Transformation
Durch Koeffizientenvergleich ergibt sich der Zusammenhang § 2S K · DFT N n¸ l cos ¨ G [k K ] G [k ( N K )] 2 © N ¹
da cos x
cos( x)
für k = 0:N1
(3.12)
cos(2S x) .
Programmbeispiel 3-1 DFT der Kosinusfolge % dft spectrum of a cosine sequence % dsplab3_1.m * mw * 03/17/2008 N = 32; % length of sequences (period) n = 0:N-1; % normalized time Omega = pi/8; % normalized radian frequency x = cos(Omega*n); % cosine sequence X = dft(x); % computation of dft spectrum % Graphics FIG = figure('Name','dsplab3_1','NumberTitle','off',... 'Units','normal','Position',[.3 .5 .6 .4]); subplot(2,2,1), stem(0:N-1,real(x),'full') axis([0 N-1 -1 1]); grid, xlabel('{\itn} \rightarrow'), ylabel('Re({\itx}[{\itn}]) \rightarrow') subplot(2,2,2), stem(0:N-1,imag(x),'full') axis([0 N-1 -1 1]); grid, xlabel('{\itn} \rightarrow'), ylabel('Im({\itx}[{\itn}]\} \rightarrow') subplot(2,2,3), stem(0:N-1,real(X),'full') MAX = max(abs(X)); axis([0 N-1 -MAX MAX]); grid, xlabel('{\itk} \rightarrow'), ylabel('Re({\itX}[{\itk}]) \rightarrow') subplot(2,2,4), stem(0:N-1,imag(X),'full') axis([0 N-1 -MAX MAX]); grid, xlabel('{\itk} \rightarrow'), ylabel('Im({\itX}[{\itk}]) \rightarrow') % dft computation in the direct form % function X = dft(x) % x : time-domain signal % X : dft spectrum of x % dft.m * mw * 03/17/2008 function X = dft(x) N = length(x); % length of input signal and dft w = exp(-j*2*pi/N); % complex exponential X = zeros(1,N); % allocate memory for dft spectrum for k=0:N-1 % dft computation in direct form wk = w^k; for n = 0:N-1 X(k+1)= X(k+1) + x(n+1)*wk^n; end end
3.3 Vorbereitende Aufgaben
3.2.2
31
Eigenschaften der diskreten Fourier-Transformation
Die DFT besitzt ähnliche Eigenschaften wie die Fourier-Transformation für Folgen, wie z. B. die Symmetrie zwischen der Hin- und Rücktransformation. Wegen der periodisch zu denkenden Folgen ergeben sich die speziellen Eigenschaften zur zyklischen Verschiebung und zyklischen Faltung. In Tabelle 3-2 sind einige wichtige Eigenschaften im Sinne einer Formelsammlung zusammengestellt [Wer08b]. Einige davon werden später noch genauer erläutert und in der Versuchsdurchführung verwendet. Für eine Herleitung oder ausführliche Diskussion wird auf die Lehrbücher im Literaturverzeichnis verwiesen. Tabelle 3-2 Sätze der diskreten Fourier-Transformation für Folgen der Länge N Linearität
¦ al xl [n]
DFT
x[n m]
DFT
¦ al X l [k ]
l
l
Zyklische Verschiebung Modulation ( wN
e j 2S / N )
l
nl wN x[n]
Spiegelung
x[n]
Konjugiert komplexe Folge
x*[n]
l
DFT
¦
N 1
Parsevalsche Gleichung
x[n]
2
n 0
X [k l ]
(3.15) (3.16)
l
X *[k ]
(3.17)
DFT
l
X 1[ k ] X 2 [ k ]
(3.18)
N 1 X1[k ] * X 2 [k ] N
(3.19)
1 N
(3.20)
DFT
x1[n] x2 [n]
(3.14)
X [k ]
x1[n] * x2 [n]
Multiplikation
mk wN X [k ]
l
DFT
N
Zyklische Faltung
(3.13)
l
l
DFT
l
DFT
¦
N 1
X [k ]
2
k 0
x[n] = xer[n] + xor[n] + j( xei[n] + xoi[n])
Zuordnungsschema e: gerade (even) o: ungerade (odd) r: reell (real) i: imaginär (imaginary)
DFT
X[k] = Xer[k] + Xor[k] + j ( Xei[k] + Xoi[k])
(3.21)
3.3
Vorbereitende Aufgaben
A3.1
Von zentraler Bedeutung für die Eigenschaften der DFT ist die Orthogonalität der komplexen Exponentiellen. 2S 1 N 1 j N kn e Nn 0
¦
1 für k ® ¯0 sonst
mN
und k, m ganze Zahlen
Verifizieren Sie die Gleichung mit der geometrischen Reihe.
(3.22) #
32 A3.2
3 Diskrete Fourier-Transformation Geben Sie für die nachfolgenden Signale, mit n = 0:N1 und 0 d n0 < N1 bzw. # 0 d :0 S , jeweils das DFT-Spektrum der Länge N an. Hinweis: Beispiel und A3.1. x1[n] G [n n0 ]
x2 [n] cos(:0 n)
l
DFT
X 2 [k ]
x3 [n] sin(:0 n)
2S k · 2S k · § § ª j ¨ :0 j ¨ :0 ¸N ¸N « N ¹ N ¹ © © 1 1 e 1 e « 2S k · 2S k · § § 2 « j ¨ :0 j ¨ :0 ¸ ¸ N ¹ N ¹ © « 1 e © 1 e ¬
º » » » » ¼
x4 [n] e j:0n x5 [n] 1
A3.3
Geben Sie für den Sonderfall :0 X2[k], X3[k] und X4[k] an.
O 2S N mit O {1, 2, ..., N1} die Spektren #
Hinweis: Orthogonalität der komplexen Exponentiellen. § 2SO n · x2 [n] cos ¨ ¸ © N ¹ x3[n] sin
2SO n N
l
DFT
X 3[ k ]
N G [k O ] G [k ( N O )] 2j
x4 [n] e j 2SO n / N
A3.4
In Tabelle 3-3 werden die Werte der Folge in Bild 3-1 und die zugehörigen DFTKoeffizienten angegeben. Zeichnen Sie das DFT-Spektrum in Bild 3-3. Hinweis: Wegen der Periodizität des komplexen Faktors wN in 2S, ist das DFTSpektrum bzgl. k periodisch in N.
Welche besonderen Eigenschaften weist das DFT-Spektrum auf? Woran sind diese im Zeitsignal zu erkennen? Schreiben Sie Ihre Erklärung auf. Eine 1/4 Seite sollte genügen.
"
Hinweis: Siehe Tabelle 3-2. A3.5
Machen Sie sich mit dem Programmbeispiel 3-1 vertraut. Es stellt Ihnen für die Versuchsdurchführung Grafikbefehle bereit, die Sie in Ihre Programme übertragen können.
3.4 Versuchsdurchführung
33
Tabelle 3-3 Zeitsignal x[n] und DFT-Spektrum X[k] n, k
0
1
2
3
4
1
1
0
1
Re(X[k])
1
2.707
0
1.293
Im(X[k])
0
8
2.121
1
1
1
6 0
0
1.293
0
2.707
0
2.121
1
x[n]
2.121
5
Re( X[k] )
Im( X[k] )
2
2
4
k 0
4
8
8
2
4
7
1
2.121
k 0
4
8
2
Bild 3-3 DFT-Spektrum des Zeitsignals in Bild 3-1
3.4
Versuchsdurchführung
M3.1
Erzeugen Sie das Signal x1[n] aus A3.2 für N = 32 und n0 = 4. Führen Sie die DFT durch und vergleichen Sie die grafischen Darstellungen mit Ihren vorbereiteten Ergebnissen. Hinweis: Verwenden Sie das M-File dft.m.
M3.2
M3.3
Erzeugen Sie die Signale x2[n] bis x5[n] für N = 32 und :0 = 4S / N aus A3.3-2. Führen Sie für die Signale die DFT durch. Vergleichen Sie die grafischen Darstellungen mit Ihren vorbereiteten Ergebnissen. Wiederholen Sie das letzte Experiment für das Signal x2[n] mit der geänderten normierter Kreisfrequenz :0 = 4.5S / N.
Wenn :0 z O 2S N mit O {1, 2, ..., N1} gewählt wird, verändern sich die DFT-Spektren in A3.3-3 in charakteristischer Weise. Erklären Sie die Veränderung im Spektrum. Warum verwendet man hier den Begriff Leakage-Effekt? Hinweis: Leakage, engl. für Auslaufen, Lecken (Leck-Effekt).
M3.4
Machen Sie sich die Zerlegung eines Signals in Kosinus- und Sinusfunktionen durch die harmonische Analyse nochmals klar, indem Sie die Fourier-Reihe für den periodischen Rechteckimpulszug aus dem ersten Versuch verwenden: x(t )
1 2 f 1 ¦ sin (2m 1) 2S t 2 S m 0 2m 1
(3.23)
34
3 Diskrete Fourier-Transformation Aus der Fourier-Reihe folgen für die DFT-Koeffizienten X[k] die Berechnungen im Programmbeispiel 3-2. Machen Sie sich mit dem Programm vertraut und stellen Sie den Zusammenhang mit der Fourier-Reihe (3.23) her. Beachten Sie dabei das Zuordnungsschema in Tabelle 3-2. Überprüfen Sie das Programm dsplab3_2, indem Sie es für verschieden DFTLängen starten. Hinweis: Das bereitgestellte Programm erzeugt Grafiken für das Signal und sein DFT-Spektrum mit jeweils N Werten für eine Periode.
M3.5
Zum Abschluss wenden Sie die DFT auf ein Audiosignal an und überprüfen dabei gleichzeitig der Rechenzeitbedarf der DFT. Verwenden Sie dazu das Programmbeispiel 3-3 mit der Audiodatei handel.wav. Das Programm entnimmt der Audiodatei eine Probe mit 2048 Abtastwerten, die weiterverarbeitet werden. Zusätzlich liefert das Programm Werte der Systemzeit vor und nach Berechnung der DFT. Schätzen Sie, wie lange es dauern würde, ein entsprechendes Audiosignal der Dauer von einer Sekunde zu transformieren? Notieren Sie Ihre Antwort. Im nächsten # Versuch können Sie überprüfen, ob Ihre Schätzung richtig lag. Hinweis: Auf einem schnellen PC kann die Berechnung der DFT der Länge 2048 einige Sekunden dauern.
Programmbeispiel 3-2 Signalsynthese durch inverse DFT % fourier synthesis by idft % dsplab3_2.m * mw * 03/17/2008 N = 16; % length of sequences (period) % dft coefficients X = zeros(1,N); % allocate memory and set default values zero X(0+1)= N/2; % X[0]= N/2 cf = (N/2)*(2/pi); % common factor for k = 1:2:N/2 % for odd indices X[1],X[3],...,X[N/2] X(k+1) = -j*cf/k; end % Complete dft spectrum of real-valued signal by using even and odd symmetry % for real and imaginary parts respectively X(N:-1:N/2+1) = -X(2:N/2+1); x = idft(X); % computation of time-domain signal % Graphics % …
3.4 Versuchsdurchführung
35
Programmbeispiel 3-3 DFT eines Audiosignals mit Rechenzeitabschätzung % dft spectra of audio signals % dsplab3_3.m * mw * 03/17/2008 [y,fs] = wavread('handel'); % load audio data N = 2048; % dft length s = y(2000:2000+N-1); % audio clip with N samples soundsc(s,fs); % play audio clip CLOCK = clock; % challenge time fprintf('dft start: min:sec %g : %g\n',CLOCK(5),CLOCK(6)) S = dft(s); % DFT of audio clip CLOCK = clock; % challenge time fprintf('dft stop: min:sec %g : %g\n',CLOCK(5),CLOCK(6)) % Graphics FIG = figure('Name','dsplab3_3 : audio signal clip','NumberTitle','off'); t =(0:length(s)-1)/fs; % time subplot(3,1,1), plot(t,s), grid xlabel('{\itt} in s \rightarrow'), ylabel('{\its}({\itt}) \rightarrow') L = length(S)/2; % show section of length L f = 0:L-1; % frequency scale f = f*fs/length(S); % frequency in Hz subplot(3,1,2), bar(f(1:L),abs(S(1:L)/max(abs(S)))), grid axis([0 f(L) 0 1]); xlabel('{\itf} in Hz \rightarrow'), ylabel('|{\itS}({\itf})| \rightarrow') subplot(3,1,3), semilogy(f(1:L),abs(S(1:L)/max(abs(S)))), grid xlabel('{\itf} in Hz \rightarrow'), ylabel('|{\itS}({\itf})| \rightarrow') axis([0 f(L) 0 1]);
Hinweise zu MATLAB-Funktionen und M-Files Tabelle 3-4 MATLAB-Befehle benutzte Programme und Dateien, siehe auch vorhergehende Versuche Programmablaufsteuerung
pause
Spezielle Befehle
clock
Elementare mathematische Funktionen
abs, imag, max, min, real, conj
Textausgabe am Bildschirm
fprintf
2-dim. Grafik
semilogx, semilogy
Þ Online-Ressourcen
dsplab3_1.m, dsplab3_2.m, dsplab3_3.m, handel.wav, dsplab3_1b, idft.m
36
4
Schnelle Fourier-Transformation
4.1
Einführung
Ein wichtiges, manchmal sogar entscheidendes Kriterium für die Anwendung der digitalen Signalverarbeitung ist die Komplexität der eingesetzten Algorithmen. Sie wird meist durch die Zahl der erforderlichen Rechenoperationen und den Bedarf an Speicherplätzen abgeschätzt. Dies gilt besonders für die diskrete Fourier-Transformation (DFT). Für sie wird in diesem Versuch eine effiziente Implementierung vorgestellt: die schnelle Fourier-Transformation (FFT, Fast Fourier Transform). Die FFT und verwandte Algorithmen haben einen erheblichen Anteil daran, dass die digitale Signalverarbeitung in viele naturwissenschaftlich-technische Anwendungen vordringen konnte. Weil für den Versuch keine besonderen Vorkenntnisse vorausgesetzt werden, wird in der Vorbereitung zunächst der FFT-Algorithmus erarbeitet. Die Entwicklung des Algorithmus ist typisch für die digitale Signalverarbeitung und hat deshalb für sich selbst einen hohen Wert. Lernziele Nach Bearbeiten dieses Versuches können Sie x x x
4.2
den Begriff Komplexität und seine Bedeutung in der digitalen Signalverarbeitung am Beispiel der DFT und FFT erklären den Radix-2-FFT-Algorithmus entwickeln und erläutern den Radix-2-FFT-Algorithmus programmieren
Komplexität
Anfang der sechziger Jahre wurden, durch den Fortschritt der Digitaltechnik begünstigt, zunehmend Verfahren der digitalen Signalverarbeitung eingesetzt. Bei der Spektralanalyse mit der DFT zeigte sich jedoch, dass für eine gute Frequenzauflösung große Transformationslängen benötigt werden. In vielen Fällen war damit zunächst eine digitale Signalverarbeitung in Echtzeit nicht möglich, d. h. eine Signalverarbeitung, die Ausgangswerte mit mindestens der gleichen Rate erzeugt, wie Eingangswerte zugeführt werden. 1965 schlugen Cooley und Tukey ein Verfahren vor, das speziell für große Transformationslängen die Berechnung der DFT stark beschleunigte und ihr so ein breites Anwendungsfeld eröffnete [CoTu65]. Unter dem Begriff schnelle Fourier-Transformation (FFT, Fast Fourier Transform) werden heute verschiedene Verfahren zusammengefasst, deren Ansätze u. a. bis auf Gauß (1805) zurückreichen. Je nach Anwendung, wobei auch Überlegungen zur verwendeten Hardware (Prozessorarchitektur, Speicherausstattung, u. ä.) einfließen, werden verschiedene Algorithmen der FFT eingesetzt. In diesem Versuch wird der am häufigsten verwendete Algorithmus, die Radix-2-FFT behandelt. Anwendungen der FFT in der Kurzzeit-Spektralanalyse werden in den nächsten beiden Versuchen vorgestellt.
4.3 Radix-2-FFT-Algorithmus
37
Den Anfang macht die Abschätzung des Rechenaufwandes der DFT als einfaches Maß für die Komplexität des Algorithmus. Der Definitionsgleichung der DFT
¦ x[n] wNnk
N 1
X [k ]
für k = 0:N1
(4.1)
n 0
mit den komplexen Faktoren nk wN
e
j
2S nk N
(4.2)
ist zu entnehmen, dass zur Berechnung der N DFT-Koeffizienten jeweils N Multiplikationen der komplexen Folgenelemente mit den komplexen Faktoren und N1 Additionen der Multiplikationsprodukte auszuführen sind. Mit 4 + 2 Gleitkomma-Operationen (FLOPs, Floating Point Operations) für jede komplexe Multiplikation und 2 FLOPs für jede komplexe Addition, erhält man die Abschätzung des Rechenaufwands der direkten Form der DFT.
RDFT ,direkt | 8 N 2 FLOPs
(4.3)
Die komplexen Faktoren werden dabei als gespeicherte Konstanten angesehen. Bei großen Transformationslängen ist ein dementsprechend großer Speicher vorzusehen. Handelt es sich um externen Speicher, so kann die Speicherzugriffszeit zu einer kritischen Größe werden. Verzichtet man auf die Speicherung und berechnet die komplexen Faktoren, entsteht ein zusätzlicher Rechenaufwand. Darüber hinaus kann die fortlaufende Berechnung wegen der Fehlerfortpflanzung zu nicht tolerierbaren numerischen Ungenauigkeiten führen.
4.3
Radix-2-FFT-Algorithmus
Der Rechenaufwand der direkten Form der DFT (4.3) steigt quadratisch mit der Transformationslänge. Die Radix-2-FFT setzt genau an dieser Stelle an, indem Sie die DFT sukzessive in je zwei DFT der halben Länge zerlegt, bis schließlich die Transformationslänge 2 erreicht ist. Dazu muss die DFT-Länge N eine Zweierpotenz sein, also N = 2P mit der natürlichen Zahl p. Zunächst kann die DFT (4.1) in zwei Teilsummen zerlegt werden für gerade und ungerade Indizes. X [k ]
¦ x[n] wNnk
¦
N 1
N 2
n 0
n 0,2,!
nk x[n] wN
¦
N 1 n 1,3,!
nk x[ n] wN
(4.4)
Die Substitutionen n n
2m für n gerade 2m 1 für n ungerade
und M liefern dann
N 2
(4.5)
38
4 Schnelle Fourier-Transformation
¦
M 1
X [k ]
2 mk x[2m] wN
m 0
¦ x[2m 1] wN(2m1)k
M 1
(4.6)
m 0
Berücksichtigt man noch die Umformungen für die komplexen Faktoren 2mk wN
mk wM
(4.7)
und (2 m 1) k wN
k mk wN wM
(4.8)
so resultieren zwei Transformationen der halben Länge des Signals. X [k ]
¦ x[2m] wMmk wNk ¦ x[2m 1] wMmk
M 1
M 1
m 0
m 0
(4.9)
Ist die ursprüngliche DFT-Länge N eine Zweierpotenz, kann die Zerlegung Schritt für Schritt weitergeführt werden, bis schließlich die DFT-Länge 2 erreicht ist. Das folgende Beispiel für die DFT-Länge N = 8 zeigt die Methode auf. Es wird der Signalflussgraf der Radix-2-FFT entwickeln. Die erste Zerlegung (4.9) führt mit den Substitutionen u[m]
x[2m] und v[m]
x[2m 1] für m = 0:M1
(4.10)
und
¦ u[m] wMmk
M 1
X [k ]
k wN
m 0
¦ v[m] wMmk
M 1
m 0
U [k ]
(4.11)
V [k ]
auf den Signalflussgrafen in Bild 4-1. Beachten Sie auch, dass Pfadgewichte (Faktoren), falls nicht angegeben, zu 1 angenommen werden. Die Aufteilung der Eingangsfolge, englisch Decimation-in-time decomposition genannt, ergibt sich unmittelbar aus der Substitution (4.10). Es wird zweimal eine DFT der Länge M = N / 2 = 4 berechnet. Danach werden die DFT-Koeffizienten der Zwischenergebnisse entsprechend (4.11) zusammengefasst. Dabei kann vorteilhaft deren Periodizität bzgl. des DFT-Index k benutzt werden. Wegen m( k M ) wM
mk mM wM wM N
mk wM
(4.12)
1
gilt U[0] = U[4], U[1] = U[5], usw. Die von V[0], ..., V[3] ausgehenden Pfade werden entsprek chend (4.11) mit den Faktoren wN gewichtet.
Die beiden weiteren Zerlegungen ergeben schließlich den dreistufigen Signalflussgrafen in Bild 4-2. Er zeigt, dass in jeder Zerlegungsstufe jeweils N komplexe Multiplikationen und komplexe Additionen benötigt werden. Ist die Transformationslänge eine Zweierpotenz N = 2p, dann existieren genau p = log2(N) Zerlegungen. Der Rechenaufwand reduziert sich demzufolge
4.3 Radix-2-FFT-Algorithmus
39
auf etwa 8Nlog2(N) FLOPs. Das exponentielle Wachstum des Rechenaufwandes mit der DFTLänge ist nun durch ein, im Wesentlichen, lineares Wachstum ersetzt. Im Beispiel einer DFTLänge N = 1024 benötigt die Berechnung der DFT in der direkten Form (4.3) ca. 8,4 Millionen FLOPs und nach Radix-2-Zerlegung nur 0,082 Millionen FLOPs, und damit um zwei Größenordnungen weniger. u[0]
U[0]
x[2]
u[1]
U[1]
w80
x[4]
u[2]
U[2]
w81
U[3]
w82
x[0]
X[0] X[1]
DFT
x[6]
4
u[3]
X[2] X[3] w83
x[1] x[3]
v[0]
V[0]
v[1]
V[1]
DFT
Bild 4-1
x[5]
v[2]
x[7]
v[3]
V[2] V[3]
X[4]
w85
X[5]
w86
X[6]
w87
X[7]
Signalflussgraf der Radix-2-FFT der Länge N = 8 mit Aufteilung im Zeitbereich nach erster Zerlegung mit den Zwischenergebnissen U[k] und V[k]
x[0]
w20
x[4]
w42
w21
w43
x[1]
w20
w40
x[5]
w21
x[3] x[7] 1. Stufe
w80 X[1]
w41
w20
x[6]
X[0]
w40
w21
x[2]
Bild 4-2
4
w84
w81 X[2] w82
X[3]
w83 w84
X[4]
w41
w85
X[5]
w20
w42
w86
X[6]
w21
w43
w87
X[7]
2. Stufe
3. Stufe
Vorläufiger Signalflussgraf der Radix-2-FFT nach drei Zerlegungen mit Aufteilung im Zeitbereich (N = 8)
40
4 Schnelle Fourier-Transformation
Eine genaue Analyse des Signalflussgrafen zeigt, dass die Komplexität weiter reduziert werden kann. Man betrachte beispielsweise die Eingangswerte x[0] und x[4]. Aus ihnen werden ohne Verwendung weiterer Eingangswerte in der ersten Stufe genau zwei Zwischenwerte berechnet. Die Eingangswerte werden danach zur DFT nicht mehr benötigt, so dass ihr Speicherplatz mit den Zwischenwerten überschrieben werden kann. Man spricht von einem In-placeVerfahren. Die Verknüpfung über Kreuz stellt die Basisoperation der Radix-2-FFT dar. Sie tritt in allen Stufen auf. Bild 4-3 zeigt links die Basisoperation wie sie direkt aus dem Signalflussgrafen abgelesen werden kann. Im Aussehen ausgebreiteten Schmetterlingsflügeln ähnlich, hat sich für sie die englische Bezeichnung Butterfly durchgesetzt. Die zwei komplexen Multiplikationen in Bild 4-3 links lassen sich auf eine zurückführen, da in jeder Stufe s stets gilt wl s 2
s 1
s 1
w2s
2
2
wl s 2
1 wl s 2
für l = 0, 1, …, 2s11
(4.13)
Damit erhält man den Butterfly in Bild 4-3 rechts. Knoten
Knoten
Knoten
Knoten
m
m
m
m
m+2s1
m+2s1
wl s 2 m+2s1
wl s 2
s 1
wl s 2
1
m+2s1
2
Bild 4-3 Basisoperation (Butterfly) der Radix-2-FFT in der Stufe s mit zwei (links) bzw. einer (rechts) komplexen Multiplikation mit l {0, 1, ... , 2s1 1}
In Bild 4-4 sind die Überlegungen zum Signalflussgrafen der Decimation-in-time (DIT) Radix-2-FFT zusammengefasst. Näherungsweise sind pro Stufe N / 2 komplexe Multiplikation und N komplexe Additionen bzw. Subtraktionen erforderlich. Im Vergleich mit Bild 4-2 reduziert sich der Rechenaufwand auf RRadix 2 FFT | 5 N log 2 N FLOPs
(4.14)
Es ist offensichtlich, dass in den ersten beiden Stufen keine echten Multiplikationen erforderlich sind, so dass die Zahl der Multiplikationen noch etwas reduziert werden kann. Für die FFT werden in der Literatur verschiedene Modifikationen vorgeschlagen, die je nach Anwendung unterschiedlichen Zielvorstellungen gehorchen, wie kleiner Speicherplatzbedarf, kleine Rechenungenauigkeiten, kompaktes Programm, optimale Ausnutzung der Prozessorarchitektur, usw. Dabei werden auch unterschiedliche Voraussetzungen berücksichtigt, z. B. dass die DFT-Länge keine Zweierpotenz ist (Split-Radix-Algorithmus), dass die Eingangsfolgen rein reell sind oder nur einige wenige Werte des Spektrums gesucht werden (GoertzelAlgorithmus). Ihrer Bedeutung gemäß wird die FFT oft durch spezielle Hardware auf Signalprozessoren unterstützt, so dass sie besonders schnell ausgeführt werden kann. Beispielsweise warb eine Anzeige für einen bekannten Signalprozessor im Dezember 2003 mit dem Versprechen eine komplexe FFT der Länge 1024 in Gleitkomma-Arithmetik in ca. 17 Ps auszuführen, eine
4.4 Programmierung der DIT-Radix-2-FFT
41
Operation die beispielsweise bei der MPEG(Moving Pictures Experts Group)-AudioCodierung eingesetzt wird. Die FFT wird nicht nur zur Spektralanalyse verwendet, sondern findet beispielsweise auch zur Datenübertragung mit dem OFDM(Orthogonal Frequency Division Multiplex)-Verfahren Anwendung in drahtlosen lokalen Rechnernetzen (WLAN, Wireless Local Area Network) und dem terrestrischen digitalen Fernsehen (DVB-T, Digital Video Broadcasting Terrestrial).
X[0]
x[0] 1
x[4]
X[1]
x[2] 1
x[6]
j
1
X[2]
1
X[3] 1
X[4]
w81
X[5]
1
1
w82
X[6]
1
1
w83
1
X[7]
x[1] 1
x[5] x[3]
1
x[7] Stufe 1
j Stufe 2
Stufe 3
Bild 4-4 Signalflussgraf der DIT-Radix-2-FFT für die DFT-Länge N = 8
4.4
Programmierung der DIT-Radix-2-FFT
Die für die Realisierung der DIT-Radix-2-FFT sind zwei Verarbeitungsschritte wichtig. Sie lassen sich in Bild 4-4 erkennen: erstens das Ordnen der Eingangsfolge und zweitens die Verarbeitung im Signalflussgrafen. Nachfolgend werden beide Schritte genauer betrachtet. In der Versuchsvorbereitung sollen Sie selbst ein MATLAB-Programm zur Radix-2-FFT erstellen.
4.4.1
Ordnen der Eingangsfolge
Für die DFT-Länge N = 8 ist die Ordnung der Eingangsfolge Bild 4-4 zu entnehmen. Das allgemeine Schema wird der besseren Anschaulichkeit wegen nun am Beispiel der Transformationslänge N = 16 entwickelt. Den Ausgangspunkt bildet die Aufspaltung der DFT in zwei Teilsummen mit jeweils den geraden und den ungeraden Indizes in (4.4). Die Aufteilung wird für die DIT-Radix-2-FFT solange fortgesetzt, bis die Wertepaare für die Basisoperationen vorliegen, siehe Bild 4-5. Es ergeben sich in der letzten Spalte die Paarungen für die Butterfly-Operationen 0 und 8, 4 und 12, 2 und 10, usw. Der in Bild 4-5 entwickelte Zusammenhang lässt sich in einen effizient Algorithmus fassen. Dazu werden die Indizes I der Eingangsfolge als Dualzahlen
42
4 Schnelle Fourier-Transformation
¦ bi 2i p 1
I
i 0
mit bi ^0,1` und p
ld N
(4.15)
in Tabelle 4-1 dargestellt.
Anmerkungen: (i) Da die FFT einer der wichtigsten Algorithmen der digitalen Signalverarbeitung ist, besitzen manche Signalprozessoren ein Adressenrechenwerk mit Bit-reversal-Funktion. (ii) Eine bekannte Realisierungen der DIT-Radix-2-FFT in FORTRAN findet man z. B. in [OpSc95]. Sie dient als Grundlage für das hier erstellte MATLAB-Programm.
Das zu entwickelnde MATLAB-Programm benützt die Gesetzmäßigkeiten in Tabelle 4-1, die nun genauer diskutiert werden. Zunächst wird festgelegt, im Programm die Eingangsfolge x(I) für I von 0 bis N1 abzuarbeiten und entsprechend Tabelle 4-1 sequenziell die Plätze zu tauschen. Es resultiert die Struktur einer Laufanweisung, einer forSchleife, mit der temporären Hilfsvariablen T in Bild 4-6. Anmerkungen: (i) Beachten Sie, dass die Feldindizierung in MATLAB stets mit 1 beginnt. Um das Programm etwas zu beschleunigen, d. h. die Addition der Indizes mit 1 zu vermeiden, können Sie später auch die Schleifenanweisung anpassen. (ii) Durch das Tauschen der Plätze braucht kein neues Datenarray angelegt zu werden. Bei Eingangsfolgen der Länge 1024 und darüber ist die Speicherplatzersparnis in der Praxis oft ein wichtiger Vorteil.
Bild 4-5 Ordnen der Eingangsfolge (Indizes) für die DIT-Radix-2-FFT der Länge N = 16 in drei Zwischenschritten von links nach rechts
duale Darstellung 0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 1101 1110 1111
I 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
0 2 4 6 8 10 12 14 1 3 5 7 9 11 13 15
Bit-reversalAnordnung 0000 1000 0100 1100 0010 1010 0110 1110 0001 1001 0101 1101 0011 1011 0111 1111
0 4 8 12
0 8 4 12 2 10 6 14 1 9 5 13 3 11 7 15
0 8 4 12
2 6 10 14
2 10
1 5 9 13
1 9
3 7 11 15
J
6 14
5 13 3 11 7 15
Indizierung der Eingangsfolge der 1. Stufe
Der Vergleich der Spalten für die Indizes I und J mit Bild 4-5 zeigt, dass der Index J die gewünschte Anordnung für die Eingangsfolge der 1. Stufe der DIT-Radix-2-FFT liefert. Der Zusammenhang gilt unabhängig von der Transformationslänge N.
Tabelle 4-1 Bit-reversal-Adressierung für die DIT-Radix-2-FFT
Indizierung der Eingangsfolge der FFT
Liest man jetzt den dualen Code in umgekehrter Reihenfolge resultiert z. B. aus 110 = 00012 nach dem Umsetzen 10002 = 810.
4.4 Programmierung der DIT-Radix-2-FFT Im Programmausschnitt fehlt die Zuordnung der jeweils richtigen Indizes I und J. Hier hilft ein Blick in Tabelle 4-1 einen inkrementellen Algorithmus zu entwickeln, der die Änderung des Index J widerspiegelt. Zunächst beginnt auch J mit dem Startwert 0. Es ist zu beobachten, dass bei den Übergängen von geraden Werten des Index I auf die nachfolgenden ungeraden, z. B. I = 0 auf 1, von 2 auf 3, von 4 auf 5 usw., der Index J stets einen Zuwachs von N / 2 erhält. Also im Beispiel von J = 0 auf 8, von 4 auf 12, von 2 auf 10 usw.
43
J = 0; for I=0:N-1
% exchange values
T = x(J+1); x(J+1) = x(I+1); x(I+1) = T; end Bild 4-6 Programmfragment A für die Bitreversal-Adressierung
Dieser Zuwachs spiegelt sich in der Bit-reversal-Adressierung wider. Beim Übergang von einem geraden Index I auf den folgenden ungeraden wird I um eins erhöht. Also das Bit mit der niedrigsten Wertigkeit, das Least-Significant-Bit (LSB) b0 = 1, gesetzt. Durch die Bit-reversalAdressierung wird daraus das Most-Significant-Bit (MSB) mit der Wertigkeit N / 2. Da die anderen Bits bei geradem I durch das Inkrementieren nicht betroffen sind, erwächst daraus genau ein Zuwachs um N / 2 für den neuen Wert J. Den neuen Wert für J beim Übergang von ungeraden auf gerade Werte des Index I zu finden, gestaltet sich aufwändiger, weil die Addition des LSB zu unterschiedlichen Bit-Überträgen führen kann. Die Beispiele in Bild 4-7, die Übergänge des Index I von 1 auf 2 und von 3 auf 4, veranschaulichen dies. Im ersten Fall gibt es einmal einen Übertrag im zweiten Fall zweimal. Die erforderliche Fallunterscheidung beim Inkrementieren eines ungeraden Indizes I wird im Programmausschnitt in Bild 4-8 vorgenommen.
00012 o 10002 b.-r.
110
00102 o 01002
810
b.-r.
210
00112 o 11002
410
b.-r.
310
01002 o 00102
1210
b.-r.
410
210
Bild 4-7 Beispiele für die Bit-reversalAdressierung
Zunächst wird das Inkrement K für den Index J auf N /2 eingestellt. Dann wird in der Bedingung der while-Schleife geprüft, ob der Wert des Index J größer als N/2 ist. Ist das der Fall, so war der letzte Wert des Index I ungerade, siehe Tabelle 4-1. Ist das nicht der Fall, ist der aktuelle Wert des Index I ungerade und der neue Wert des Index J ergibt sich durch inkrementieren mit K = N / 2. Die while-Schleife wird abgewiesen. Im anderen Fall liegt ein Übergang von einem ungeraden Wert des Index I auf einen geraden vor. Damit sind Bitüberträge wie in Bild 4-7 möglich. Sie werden in der while-Schleife berücksichtigt.
Ist J t N / 2 tritt in der dualen Darstellung im Übergang des alten Wertes von I auf den neuen ein Bit-Übertrag auf, d. h. für das LSB gilt nun b0 = 0. Weil das LSB von I zum MSB des Index J wird, muss letzteres auch 0 sein. Das Nullsetzen des MSB geschieht im Index J durch
% update index J K = N/2; % default increment while (K x@Q x
Bild 16-4 Ersatzmodell für die Quantisierung mit dem Quantisierungsgeräusch '
Im unteren Bild ist das Fehlersignal '(t) aufgetragen. Betrachtet man den Zeitpunkt t = 0, so ist x(0) = 0 und [x(0)]Q ebenfalls 0. Mit wachsender Zeit steigt das Eingangssignal linear an und das Fehlersignal fällt zunächst linear. Bei t = T0 / 16 überschreitet das Eingangssignal die Grenze des Quantisierungsintervalls. Danach ist das Eingangssignal zunächst kleiner als der zugewiesene Repräsentant. Das Fehlersignal springt von Q/2 auf +Q/2, um über das gesamte Quantisierungsintervall linear wieder bis Q/2 zu fallen. In der Mitte des Quantisierungsintervalls ist der Quantisierungsfehler 0. Entsprechendes kann für die anderen Signalabschnitte überlegt werden. Man beachte, dass in Bild 16-5 das Signal nicht vollständig zwischen –1 und +1 ausgesteuert wird. Wegen der exakten Darstellung der Null im Zweierkomplement-Format fehlt die Darstellung der Eins. Im Falle eines Eingangswertes 1 ergäbe sich der Quantisierungsfehler Q. Für Eingangswerte größer gleich 12w/bit wird der größte darstellbare Wert 12-(w/bit1) zugewiesen (Sättigung). Damit wird es möglich, die Qualität der Quantisierung quantitativ zu erfassen. Als Qualitätsmaß wird das Verhältnis der Leistungen des Eingangssignals und des Quantisierungsgeräusches, das Signal-Quantisierungsgeräusch-Verhältnis, kurz SNR (Signal-to-Noise Ratio), zugrunde gelegt. Im Beispiel des dreieckförmigen Signals ergibt sich bei Vollaussteuerung die mittlere Signalleistung
S
1 T0
³
T0 0
2
x(t ) dt
1 3
(16.16)
[x(t)]Q 1
3/4
x(t)
1/2
T0/2
1/4 0
1/4
T0/2
t
1/2 3/4
'(t) = [x(t)]Q x(t)
1
Q/2 Q/2
t
Bild 16-5 Quantisierung eines periodischen dreieckförmigen Signals (oben) und das dabei entstehende Quantisierungsgeräusch (Fehlersignal) '(t) (unten)
16.4 Quantisierung
181
Die mittlere Leistung des Quantisierungsgeräusches kann wegen des abschnittsweise linearen Verlaufs ebenso einfach berechnet werden, siehe Bild 16-5. Der Sättigungseffekt der Quantisierung für Eingangswerte bei Vollaussteuerung nahe 1 wird genügend große Wortlänge vorausgesetzt für die vereinfachten Modellüberlegungen vernachlässigt. Dann sind die Werte des Quantisierungsgeräusches auf das Intervall [Q/2, Q/2] beschränkt. Die mittlere Leistung ergibt sich demzufolge wie in (16.16) zu N
1 §Q· ¨ ¸ 3 ©2¹
2
Q2 12
22 w bit 3
(16.17)
wobei die Quantisierungsintervallbreite durch die Wortlänge ersetzt wurde. Für die vereinfachten Modellüberlegungen resultiert das SNR im logarithmischen Maß S N
10 log10 22 w bit dB = 20 dB
w w dB log10 2 dB | 6 bit bit
(16.18)
Das SNR verbessert sich demzufolge um 6 dB pro zusätzlichem Bit Wortlänge. Anhand der Modellrechnung erkennt man, dass das SNR von der Art des Signals abhängt; genauer von der Verteilung der Signalamplituden. Im Falle eines im gesamten Aussteuerungsbereich gleichverteilten Eingangsprozesses ergibt sich das SNR wie in (16.18). Das gefundene Ergebnis liefert eine brauchbare Näherung für viele praktische Anwendungsfälle: Für eine symmetrische gleichförmige Quantisierung mit hinreichender Wortlänge w in Bits und Vollaussteuerung gilt die 6dB-pro-Bit-Regel w §S· dB ¨ ¸ | 6 bit © N ¹dB
(16.19)
Für die Näherung liegt erfahrungsgemäß eine hinreichende Wortlänge vor, wenn das Signal mehrere Quantisierungsintervalle durchläuft. Viele Signale, wie Sprach- und Audiosignale, haben einen hohen Dynamikumfang, wobei die kleinen Amplituden relativ häufig vorkommen. Bei Vollaussteuerung ist die Signalleistung deshalb deutlich kleiner als 1/3, so dass das tatsächliche SNR um einige dB kleiner ist als in (16.19).
16.4.4
Vorbereitende Aufgaben
A16.2
Überlegen Sie, wie Sie mit einem MATLAB-Programm die kleinste Maschinenzahl größer eins bestimmen können. #
Hinweis: (1+H) mit H > 0, wenige Programmzeilen genügen. A16.3
Geben Sie für die Wortlänge w in Bits die fehlenden Einträge zum Zweierkomplement-Format in Tabelle 16-3 an.
A16.4
Geben Sie für die Zahlenwerte in Tabelle 16-4 im Zweierkomplement-Format für die Wortlänge w = 8 bit in hexadezimaler Form an. Runden Sie gegebenenfalls die letzte Stelle. Tragen Sie die quantisierten Werte auch als übliche Gleitkommazahlen ein.
182
16 Analog-Digital-Umsetzung
Tabelle 16-3 Zweierkomplement-Format Wortlänge
w
8 bit
16 bit
Kleinste positive Zahl (LSB)
Größte positive Zahl (1LSB)
Kleinste negative Zahl
Dynamik
Präzision1 1
Maximaler Quantisierungsfehler bei Runden (aussteuerungsunabhängig, man beachte den jeweiligen Exponent)
Tabelle 16-4
A16.5
Quantisierung im Zweierkomplement-Format w = 8 bit mit Hexadezimaldarstellung (Hex) der Bitmuster
x
x2c
[x]Q
x
0.996
7FHex
0.9921875
0
0.125
0.125
0.004
1
x2c
[x]Q
Machen Sie sich mit der Zahlendarstellung nach IEEE 754-1985 in MATLAB vertraut. Bestimmen Sie dazu für die normalisierte Form den größten und den kleinsten positiven Zahlenwert, siehe Tabelle 16-5. Geben Sie auch die kleinste Maschinenzahl größer eins an.
Hinweis: Geben Sie zunächst die theoretischen Werte an mit der Wortlänge des Exponenten we und der Mantisse wM. Spezialisieren Sie danach auf die angegebenen Formate. Verwenden Sie gegebenenfalls geeignete Schätzwerte im Dezimal-Format.
16.4 Quantisierung
183
Tabelle 16-5 Zahlendarstellung IEEE 754-1985 (normalisiert) Theoretisch1
Single Precision
Double Precision
Größte positive Maschinenzahl Kleinste (normalisierte) Maschinenzahl > 0 Kleinste (normalisierte) Maschinenzahl2 > 1 Dynamik
Präzision3 1 2 3
A16.6
Wortlänge des Exponenten we und Wortlänge der Matisse wM Maschinen-Epsilon Maximaler Quantisierungsfehler bei Runden aufgrund der Wortlängenbeschränkung der Mantisse (aussteuerungsunabhängig, beachte Exponent)
Machen Sie sich mit dem Programmbeispiel 16-2 zur Simulation einer Quantisierung im Zweierkompliment-Format vertraut.
Programmbeispiel 16-2 Quantisierung im Zweierkomplement-Format % Tow's complement quantizer with range [-1,1[ (saturation) % function [xq] = quant2c(x,w,TMode) % x : input signal % w : word length (# of bits) % TMode : truncation mode % 't' - truncation (rounding towards minus infinity) % 'r' - rounding to nearest quantization level % xq : quantized signal % quant2c.m * mw * 06/13/2008 function [xq] = quant2c(x,w,TMode) LSB = 2^(-w+1); % least significant bit xq = min(1-LSB,x); % clipping (saturation) xq = max(-1,xq); % Quantizer if TMode == 't' xq = floor(xq/LSB)*LSB; else xq = round(xq/LSB)*LSB; end
184
16 Analog-Digital-Umsetzung
16.4.5
Versuchsdurchführung
M16.3
Bestimmen Sie die kleinste von eins verschiedene Maschinenzahl mit Ihrem vorbereiteten Programm.
M16.4
Bestimmen Sie die MATLAB-Variablen eps, realmax und realmin und machen Sie sich deren Bedeutung klar. Vergleichen Sie die Werte mit den entsprechenden Werten aus Ihrer Vorbereitung. eps
=
realmin = realmax = M16.5
Nehmen Sie die Quantisierungskennlinien zum Zweierkomplement-Format mit der Wortlänge von drei Bits für Abschneiden und für Runden auf. Stellen Sie auch die Quantisierungsfehler grafisch dar.
Hinweis: Verwenden Sie das Programm dsplab16_2 in Programmbeispiel 16-3 mit der Funktion quant2c.m Programmbeispiel 16-3 Testprogramm für die Quantisierung im Zweierkomplement-Format mit Runden mit dem Programm quant2c % Test of tow's complement quantizer function quant2c % dsplab16_2.m * mw * 06/13/2008 n = -1:.001:1; x = n; % input signal xq = quant2c(x,3,'r'); % quantization with rounding % Graphics FIG1=figure('Name','dsplab16_2 : Quantization','NumberTitle','off'); subplot(2,1,1),plot(n,xq,n,xq,'.',n,x,'LineWidth',2),grid xlabel('{\itx} \rightarrow'), ylabel('[{\itx}]_{Q} \rightarrow') subplot(2,1,2),plot(n,xq-x,'LineWidth',2),grid xlabel('{\itx} \rightarrow'), ylabel('\Delta \rightarrow')
M16.6
Quantisieren Sie ein Sinussignal mit Amplitude eins mit den beiden Quantisierungskennlinien aus der vorhergehenden Aufgabe für die Wortlänge von vier Bits. Stellen Sie das Signal vor und nach der Quantisierung sowie den Quantisierungsfehler grafisch dar.
Hinweis: Modifizieren Sie das Programm dsplab16_2.m entsprechend. M16.7
Messen Sie das Signal-Quantisierungsgeräusch-Verhältnis (SNR) für ein lineares und ein sinusförmiges Signal in Abhängigkeit von der Wortlänge. Verwenden Sie die Wortlängen von 2 … 16 Bits. Wiederholen Sie die Messung für das Sprachsignal speech.wav. Stellen Sie die Ergebnisse in dB in einem Bild dar. Vergleichen Sie Ihr Ergebnis mit der Abschätzung durch das Fehlermodell, der 6dB-pro-Bit-Regel.
Hinweis: Verwenden Sie Programm dsplab16_3 in Programmbeispiel 16-4.
16.4 Quantisierung
185
Programmbeispiel 16-4 Schätzung des SNR für die Quantisierung im ZweierkomplementFormat mit Runden für ein lineares Signal % Tow's complement quantization of linear signal % dsplab16_3.m * mw * 06/13/2008 n = 0:.001:1; L = length(n); w = 2:16; % word length SNR = zeros(size(w)); x = n; % linear signal for k=1:length(w) S = sum(x.^2)/L; % signal power xq = quant2c(x,w(k),'r'); % quantized signal (rounding) N = sum((xq-x).^2)/L; % noise power SNR(k) = S/N; % signal-to-noise ratio end % Graphics FIG = figure('Name','dsplab16_3: Quantization SNR',… 'NumberTitle','off'); plot(w,10*log10(SNR),'o',w,10*log10(SNR),':',w,6*w,'LineWidth',2),grid xlabel('word length {\itw} in bit \rightarrow') ylabel('{\itSNR} in dB \rightarrow')
M16.8
Untersuchen Sie den Einfluss der Quantisierung auf Audiosignale durch Hörtests. Wiederholen Sie die Hörtests für das Sprachbeispiel speech.wav. Bis zu welcher Mindestwortlänge ist das Sprachsignal noch verständlich?
Hinweis: Skalieren Sie den Aussteuerungsbereich des Sprachsignals geeignet. Probieren Sie auch andere Audiosignale aus.
Hinweise zu MATLAB-Funktionen und M-Files Im Folgenden werden für die Versuchsdurchführung nützliche MATLAB-Befehle und -Funktionen aufgelistet, zu denen Sie sich mit Hilfe der Help-Funktion Erläuterungen und Beispiele am Bildschirm anzeigen lassen können, siehe auch vorherige Versuche. Tabelle 16-6 MATLAB-Befehle benutzte Programme und Dateien Spezielle Befehle und Konstanten
eps, realmax, realmin, format
Programmsteuerung
break, menu, while
Þ Online-Ressourcen
dsplab16_1.m, dsplab16_1b.m, dsplab16_1c.m, dsplab16_2.m, dsplab16_2b.m, dsplab16_2c.m, dsplab16_3.m, dsplab16_4.m, quant2c.m, speech.wav, guitar.wav, handel.wav
186
17
Reale digitale Filter: Koeffizientenquantisierung
17.1
Einführung
In der Systemtheorie werden digitale Signale und Systeme zunächst unter idealisierten Bedingungen betrachtet. Reale Systeme, wie beispielsweise bei der MATLAB-Simulation am PC, bei einer Implementierung auf einem digitalen Signalprozessor oder einer dedizierten Hardware, arbeiten jedoch stets mit endlicher Wortlänge. Es entstehen zwangsläufig Quantisierungsfehler, wenn die Koeffizienten und Variablen außerhalb des Darstellungsbereiches der Maschinenzahlen liegen. Lernziele Nach Bearbeiten dieses Versuches können Sie x x x x x x x x
die Fehlerquellen bei realen digitalen Filtern nennen eine Abschätzung für die maximale Frequenzgangsabweichung durch Quantisierung der Koeffizienten bei FIR-Filtern angeben mit MATLAB den tatsächlichen Fehler durch Quantisierung der Koeffizienten bei FIR-Filtern bestimmen die Wirkung der Koeffizientenquantisierung von IIR-Filtern auf den Frequenzgang anhand des PolNullstellendiagramms erläutern den Effekt der Polausdünnung anhand einer Skizze in der z-Ebene veranschaulichen ein IIR-Filter höherer Ordnung in eine für die Realisierung günstige Kaskadenform umwandeln mit MATLAB den tatsächlichen Fehler durch Quantisierung der Koeffizienten bei IIR-Filtern bestimmen das MATLAB-Werkzeug fdatool zum Entwurf und der Analyse von Filtern gezielt einsetzen
17.2
Wortlängeneffekte
Praktische Systeme zur digitalen Signalverarbeitung werden häufig auf speziellen Mikrokontrollern implementiert, den digitalen Signalprozessoren (DSP, Digital Signal Processor). Nach Art der Zahlendarstellung werden zwei Gruppen unterschieden: Festkomma-Prozessoren und Gleitkomma-Prozessoren. Wichtige Vor- und Nachteile der beiden Prozessor-Architekturen stellt Tabelle 17-1 gegenüber. Beim praktischen Einsatz digitaler Systeme sind drei Fehlerquellen zu berücksichtigen:
Quantisierungsfehler bei der A/D- Umsetzung
Quantisierungsfehler bei der Darstellung der Filterkoeffizienten / Entwurfsspezifikationen verletzt, Filter instabil
- Filter bleibt ein lineares System
17.3 FIR-Filter mit quantisierten Koeffizienten
187
Arithmetikfehler innerhalb des Filters treten bei Wortlängenverkürzung nach einer Multiplikation oder einem Überlauf nach einer Addition auf.
/ Inneres Rauschen, kleine und große Grenzzyklen
/ Filter ist kein lineares System mehr
In diesem Versuch werden die Auswirkungen der Koeffizientenquantisierung auf das Übertragungsverhalten digitaler Filter untersucht. Dabei wird nach FIR- und IIR-Filtern unterschieden, da letztere wegen ihrer rekursiven Struktur fehleranfälliger sind. Die Arithmetikfehler werden im nächsten Versuch behandelt. Tabelle 17-1
Vergleich der Festkomma- und Gleitkomma-Architektur für Signalprozessoren Festkomma-Architektur
Gleitkomma-Architektur
kleiner
größer
Dynamik Präzision Skalierung Befehlssatz (Assembler) Optimierungsmöglichkeiten Entwicklungszeit
konstant
exponentenabhängig
meist erforderlich
meist nicht erforderlich
einfacher größer meist größer
umfangreicher kleiner meist kleiner
größer kleiner kleiner
kleiner größer größer
Geschwindigkeit Energieverbrauch Preis Sonstiges
spezielle Architekturmerkmale zur Software von PCs und ArbeitsVermeidung von Arithmetikfehlern, platzrechnern auf den DSP leichter wie z. B. Sättigungskennlinien, Akkuportierbar mulatoren mit vergrößerter Wortlänge
17.3
FIR-Filter mit quantisierten Koeffizienten
17.3.1
Fehlermodell und Fehlerfrequenzgang
Bei einem nichtrekursiven Filter der Ordnung N sind die Filterkoeffizienten gleich der Impulsantwort, siehe Bild 17-1. Die Quantisierung der Koeffizienten wirkt sich direkt auf die Impulsantwort und damit auf die Übertragungsfunktion und den Frequenzgang aus. Fasst man den Effekt der Koeffizientenquantisierung als additive Störgröße hd[n] auf h[n]
> h[n]@Q hd [n]
(17.1)
so resultiert das Modell einer Parallelschaltung aus dem nichtquantisierten System und dem Fehlersystem wie in Bild 17-2. Wegen der Additivität linearer Systeme gilt für den Frequenzgang des quantisierten Systems, dem Fehlerfrequenzgang,
H Q e j:
H e j : H d e j:
(17.2)
188
17 Reale digitale Filter: Koeffizientenquantisierung
D
x[n] h0
D
D h1
D hN-1
hN
y[n] Bild 17-1 FIR-Filter in transversaler Struktur
Bei einer Realisierung im Festkomma-Format liegen meist Zahlen im Zweierkomplement-Format vor. Sie beschränkt den Zahlenbereich auf Werte zwischen 1 und 1LSB. Der maximale Quantisierungsfehler beträgt bei Runden LSB/2.
h[n] x[n]
y[n] hd[n]
Damit kann die Abweichung vom Frequenzgang aufgrund der Koeffizientenquantisierung abgeschätzt wer- Bild 17-2 Parallelschaltung aus nichtden. Eine obere Schranke für die Abweichung des Bequantisiertem System und tragsfrequenzgangs liefert die Annahme, dass sich alle Fehlersystem Quantisierungsfehler der Koeffizienten ungünstig überlagern. Bei einer Quantisierung der Koeffizienten mit der Wortlänge w in Bit und Runden ergibt sich demzufolge
max H d e j: :
d ( N 1)
Q 2
( N 1) 2 w bit
(17.3)
Die Abschätzung erweist sich bei realen Anwendungen wie in der Versuchsdurchführung als pessimistisch. Die Fehler durch die Quantisierung der Koeffizienten kompensieren sich zum Teil. Anmerkung: Realistischere Abschätzungen in der Literatur berücksichtigen diesen Effekt. Sie fußen auf stochastischen Modellen für die Quantisierungsfehler.
Wird das Zweierkomplement-Format verwendet, ist der Wertebereich der Signale und inneren Größen des Systems zwischen –1 und 1–LSB begrenzt. Um kritische Überläufe zu vermeiden, werden häufig die Betragsfrequenzgänge auf den Maximalwert eins skaliert.
max H e j: :
1
(17.4)
Dann wird keine Frequenzkomponente des Eingangssignals verstärkt. Die Überlagerung unterschiedlich phasenverschobener Frequenzkomponenten im System kann jedoch zu Überläufen führen.
17.3.2
Vorbereitende Aufgaben
A17.1
Bei der Versuchsdurchführung sind Filterkoeffizienten zu quantisieren. Geben Sie die MATLAB-Befehlszeile an, die eine Zahl x mit –1 d x d 1–LSB auf den Dezimalwert xq mit Runden umrechnet. Verwenden Sie das Zweierkomplement-Format mit der Wortlänge w in Bit.
17.3 FIR-Filter mit quantisierten Koeffizienten
189
xq = A17.2
Geben Sie für die Filterordnung N = 20 die obere Schranke (17.3) für die Betragsfrequenzgangsabweichung bei Koeffizientenquantisierung in Tabelle 17-2 an. Sind die Abschätzungen beim Entwurf selektiver Filter mit vorgegebenem Toleranzschema hilfreich? Tabelle 17-2 Abschätzung der maximalen Frequenzgangsabweichung Wortlänge w
8 bit
16 bit
Quantisierungsintervallbreite Q max. Frequenzgangsabweichung (17.3)
A17.3
Überlegen Sie, ob durch die Koeffizientenquantisierung die lineare Phase eines FIRFilters verloren geht?
17.3.3
Versuchsdurchführung
M17.1
Zum Toleranzschema in Bild 17-3 wurde ein Tiefpass mit dem MATLAB-Werkzeug fdatool entworfen. Die ersten elf Koeffizienten der Impulsantwort sind in Tabelle 17-3 aufgelistet. Beachten Sie die gerade Symmetrie der Impulsantwort, h[10+l] = h[10l] für l = 1:10. Hinweise: (i) Der Einfachheit halber wurde auf die Skalierung der Koeffizienten (17.4) verzichtet und soll auch im Weiteren nicht vorgenommen werden. (ii) Die Quantisierung geschieht im Zweierkomplement-Format, siehe Programm qant2c. (iii) Verwenden Sie das MATLAB-Werkzeug fdatool zur Darstellung des Frequenzgangs. 2GD = 0.04
H(ej:) 1 0.8 0.6 0.4
2GS = 0.008
0.2 0 -0.2
:D /S = 0.2
0
0.4 = :S /S
0.6
0.8
1
:/S
Bild 17-3 Toleranzschema zum Entwurf des FIR-Tiefpasses
190
17 Reale digitale Filter: Koeffizientenquantisierung Ergänzen Sie die fehlenden Angaben in Tabelle 17-3. Wird das Toleranzschema erfüllt? Vergleichen Sie den maximalen Betragsfehler mit der Abschätzung (17.3). Stellen Sie den Betragsfrequenzgang des Fehlersystems grafisch dar. Ist das Toleranzschema einzuhalten, wenn nun die Wortlänge von 16 Bits für die Koeffizienten verwendet wird?
Tabelle 17-3 Impulsantworten zum FIR-Tiefpass nach Bild 17-3 n
Equiripple-FIR-Design, h[n]
0
0.0053550324027329
1
0.0139252761666236
2
0.0138426203120336
3
0.0006013881525067
4 5 6 7 8 9 10
-0.0270680866303979 -0.0464638606004227 -0.0299911366983514 0.0402928874209767 0.1478574839153128 0.2473483028343785 0.2876134986960902
Wortlänge 8 bit, [h[n]]Q
Fehlersystem, hd[n]
0.0234375 0.0468750 0.0312500 0.0390625 0.1484375 0.2500000 0.2890625
0.0036306 0.0004111 0.0012589 0.0012304 0.0005800 0.0026517 0.0014490
17.4
IIR-Filter mit quantisierten Koeffizienten
17.4.1
Kaskadenform
Die direkte Umsetzung der Übertragungsfunktion eines IIR-Filters H ( z)
b0 b1 z 1 " bN z N
a0 a1 z 1 " a N z N
(17.5)
führt beispielsweise auf die in Bild 17-4 gezeigte Struktur, die transponierte Direktform II. Sie zeichnet sich durch die minimal mögliche Zahl von Additionen und Multiplikationen aus und wird deshalb häufig eingesetzt. Theoretische Überlegungen und praktische Erfahrungen zeigen, dass die Realisierung als Kaskade von Blöcken 2. Ordnung H ( z)
H1 ( z ) H 2 ( z ) " H K ( z )
(17.6)
relativ robust gegenüber Wortlängeneffekten ist. Man zerlegt dabei das System in hintereinander geschaltete Teilsysteme 2. Ordnung und gegebenenfalls 1. Ordnung, falls einzelne reelle Pole auftreten. Man spricht dann von der Kaskadenform, siehe Bild 17-5.
17.4 IIR-Filter mit quantisierten Koeffizienten
191
x[n] bN1
bN
b2
D
b1
b0
D aN1
aN
y[n]
D
a2
a1
Bild 17-4 IIR-Filterstruktur in transponierter Direktform II (a0 = 1)
x[n]
H2(z)
H1(z)
HK(z)
y[n]
Bild 17-5 Kaskadenform mit Teilsystemen 1. und 2. Ordnung
Die Aufteilung der Pole und Nullstellen auf die Teilsysteme und deren Skalierungen sind für die technische Realisierung nicht beliebig. Häufig wird auf eine Optimierung verzichtet, da eine einfache Faustregel wie sie auch in MATLAB im Befehl cplxpair realisiert ist – brauchbare Resultate liefert. Der Einfachheit halber gehen wir von konjugiert komplexen Pol- und Nullstellenpaaren aus. Die Faustregel zur Aufteilung der Pole und Nullstellen auf die Teilsysteme wird in Bild 17-6 veranschaulicht. Leitgedanke dabei ist es, den Einfluss der Pole und Nullstellen auf die Frequenzgänge der Teilsysteme möglichst auszugleichen. Pol-Nullstellen-Aufteilung für die Kaskadenform (Faustregel)
) Es wird das zum Einheitskreis am nächsten liegende, konjugiert komplexe Polpaar mit dem zu ihm am nächsten liegenden, konjugiert komplexen Nullstellenpaar zusammengefasst. ) Das Zusammenfassen wird für die verbleibenden Pole und Nullstellen entsprechend dem ersten Schritt wiederholt bis alle Pole und Nullstellen erfasst sind. ) Die Teilsysteme 2. Ordnung werden in steigender oder fallender Reihenfolge des Zusammenfassens implementiert. Im(z)
Im(z)
z
a)
Im(z)
z
b)
c)
Re(z)
Re(z) 1
z
1
Re(z) 1
Bild 17-6 Gruppieren der Pole und Nullstellen in Blöcken 2. Ordnung für einen Cauer-Tiefpass
192
17.4.2
17 Reale digitale Filter: Koeffizientenquantisierung
Koeffizientenquantisierung und Polausdünnung
Im Weiteren wird exemplarisch einen einzelnen Block der Kaskadenform, ein reelles rekursives System 2. Ordnung mit konjugiert komplexem Polpaar und konjugiert komplexem Nullstellenpaar betrachtet. zf1
Uf e jMf
zf 2 und z01
U0 e jM0
* z02
(17.7)
Eingesetzt in die Übertragungsfunktion erhält man b0 b1 z 1 b2 z 2 1 a1 z 1 a2 z 2
H ( z)
b0
1 2 U0 cos M 0 U02
1 2 Uf cos M f Uf2
(17.8)
Die Realisierung des Blockes 2. Ordnung im üblichen Zweierkomplement-Format erfordert die Quantisierung der Filterkoeffizienten. HQ ( z)
Wegen a1
>b0 @ Q >b1 @ Q z 1 >b2 @ Q z 2 1 > a1 @ Q z 1 > a2 @ Q z 2
2 Re zf1 und a2
zf1
(17.9)
2
(17.10)
wirkt sich die Quantisierung auf den Realteil und den Betrag der Pole aus. Für die Nullstellen gilt entsprechendes. Im wichtigen Fall stabiler kausaler Systeme liegen alle Pole innerhalb des Einheitskreises. Demzufolge gilt für die Beträge der Nennerkoeffizienten 0 d a1 2 und 0 a2 1
(17.11)
so dass a1 den Zahlenbereich des Zweierkomplement-Formats überschreiten kann. Während die Zählerkoeffizienten durch geeignete Skalierung stets betragsmäßig kleiner eins gewählt werden können, muss für den Nenner anderweitig Abhilfe geschaffen werden. Die in Bild 17-7 gezeigte Struktur mit einer Aufspaltung der Multiplikation mit a1 in zwei Additionen vermeidet die Zahlenbereichsüberschreitung um den Preis einer zusätzlichen Addition. x[n] b1
b2
D a2
b0
D
y[n]
a1/2
Bild 17-7 Block 2. Ordnung für quantisierte Koeffizienten (transponierter Direktform II)
17.4 IIR-Filter mit quantisierten Koeffizienten
193
Für die für die Stabilität wichtigen Pole gilt ª a1 º « 2 » ¬ ¼Q
¬ª Re zf ¼ºQ
und
> a2 @Q
ª Uf2 º ¬ ¼Q
(17.12)
Demzufolge sind nur diskrete Werte für den Realteil und den Betrag eines Pols möglich. Bild 17-8 zeigt die möglichen Lagen der komplexen Pole im ersten Quadranten für die Wortlänge von 5 Bits. 1 Im(z)
z
0.5
0
Re(z)
0.5
1
Bild 17-8 Mögliche Lagen der komplexen Pole (x) im ersten Quadranten der z-Ebene für w = 5 bit
Aus Bild 17-8 ist ersichtlich, dass sich die Lage der Pole durch die Quantisierung meist verschiebt, so dass der Frequenzgang gegenüber dem Entwurf erheblich verändert werden kann. Besonders augenfällig ist die Ausdünnung der möglichen komplexen Pole um die reelle Achse, die Polausdünnung. Weil bei schmalbandigen Tiefpässen die Polwinkel im Durchlassbereich um die Null liegen, also die Pole in der Nähe von z = 1, macht sich bei ihnen die Koeffizientenquantisierung besonders ungünstig bemerkbar. Das Sperrverhalten bei dem es vor allem auf die Nullstellen ankommt ist weniger empfindlich. Die Nullstellen auf dem Einheitskreis bleiben auch nach der Quantisierung dort. Nur ihre Phasen verschieben sich gegebenenfalls. Nach der Quantisierung bleiben die Pole des Blockes 2. Ordnung stets im Einheitskreis. Das System ist stabil. Bei einer Implementierung in der Direktform II nach Bild 17-4 ist dies nicht sichergestellt. Sind die Auswirkungen der Quantisierung der Koeffizienten nicht mehr vernachlässigbar, so sind verschiedene Gegenmaßnahmen möglich: Berücksichtigung der Koeffizientenquantisierung bereits beim Entwurf;
Optimierung der Wortlängenverkürzung;
Implementierung des Filters in einer unempfindlicheren Struktur (Normalform, Leiterstruktur, Wellendigitalfilter) [Fet86], [RoMu87], [Sch08], [Wer08a].
194
17 Reale digitale Filter: Koeffizientenquantisierung
17.4.3
Vorbereitende Aufgaben
A17.4
In der Versuchsdurchführung sollen Sie die Schritte vom Toleranzschema bis zum IIR-Filter mit quantisierten Koeffizienten in MATLAB selbständig durchführen. Zur Vorbereitung machen Sie sich mit dem folgenden Entwurfsbeispiel in fünf Schritten vertraut. c Entwurfsvorgaben Toleranzschema und Filterprototyp Cauer-Filter GD = 0.05
|HTP(ej:)| 1
GS = 0.001
0.02 0
:
:D = 0.3S 0.4S = :S
S
Bild 17-9 Toleranzschema zum Tiefpassentwurf
d Filterentwurf MATLAB-Werkzeug fdatool
Mit dem MATLAB-Werkzeug fdatool wird ein Cauer-Tiefpass zum Toleranzschema in Bild 17-9 entworfen. Das Ergebnis ist in Bild 17-11 zu sehen.
Über den Menü-Punkt File ) Export werden die Filterdaten in den Workspace geladen, siehe Bild 17-10. Danach befinden sich im Arbeitsspeicher die beiden Variablen SOS und G. Die Variable SOS enthält die Filterkoeffizienten der Teilblöcke 2. Ordnung (Second Order System) für die Kaskadenform des IIR-Tiefpasses. Und die Variable G beschreibt die Gewichtsfaktoren (Gain) der Teilblöcke und des Gesamtsystems. Im Beispiel ergeben sich die Zahlenwerte in Tabelle 17-4. Bild 17-10 Menü Export Tabelle 17-4
Filterparameter des Cauer-Tiefpasses nach Bild 17-9 und Bild 17-11 (fdatool)
SOS =
1.0000 1.0000 1.0000
G =
0.0075 1.0000 1.0000 1.0000
+1.4010 -0.1237 -0.5911
1.0000 1.0000 1.0000
1.0000 1.0000 1.0000
-1.3316 -1.1877 -1.1105
0.5005 0.7129 0.9147
17.4 IIR-Filter mit quantisierten Koeffizienten
195
Bild 17-11 Tiefpassentwurf mit dem MATLAB-Werkzeug fdatool zum Toleranzschema in Bild 17-9
Die Angaben in Tabelle 17-4 entsprechen einem IIR-Filter in Kaskadenform H ( z)
G H1 ( z ) H 2 ( z ) H 3 ( z ) mit G = G(1)
(17.13)
Die Teilsysteme sind definiert durch Hi ( z)
b b z 1 b2i z 2 Gi 0i 1i a0i a1i z 1 a2i z 2
mit
Gi = G(1+i)
und
b0i = SOS(i:1), b1i = SOS(i:2), b2i = SOS(i:3)
(17.14)
a0i = SOS(i:4), a1i = SOS(i:5), a2i = SOS(i:6) Die Koeffizienten der Teilsysteme sind zeilenweise in der Matrix SOS abgelegt. Die 4. Spalte von SOS enthält die stets auf eins normierten Koeffizienten a0i.
196
17 Reale digitale Filter: Koeffizientenquantisierung e Quantisierung der Koeffizienten im Zweierkomplement-Format
Bei der Quantisierung der Koeffizienten sind die Gewichtsfaktoren zu beachten. Dabei sind zwei gegensätzliche Effekte zu berücksichtigen. Grundsätzlich sollte das Eingangssignal möglichst wenig abgeschwächt werden und die Gewichte zum Ausgang hin möglichst klein sein, um das in den Teilsystemen aufgrund von Wortlängeneffekten entstehende innere Geräusch möglichst wenig zu verstärken. Andererseits besteht bei zu hoher Aussteuerung des Eingangssignals die Gefahr von Überläufen und damit gravierenden nichtlinearen Störeffekten. Eine optimale Aufteilung der Gewichtsfaktoren erfordert eine Analyse, die den hier abgesteckten Rahmen sprengen würde. Deshalb werden vereinfachend, die Gewichte gleichmäßig auf die Teilsysteme übertragen. Zu beachten ist ferner, dass die Koeffizient a1i entsprechend Bild 17-7 und (17.12) zu quantisieren sind. Für die Modellüberlegungen wurden die Koeffizienten a1i durch zwei geteilt, quantisiert und danach wieder mit zwei multipliziert. Das Ergebnis der Quantisierung ist in Tabelle 17-5 zusammengefasst. Es enthält die skalierten Koeffizienten vor der Quantisierung SOSg und die quantisierten Koeffizienten bei 8-Bit-Wortlänge SOSq. Anmerkung: Die Skalierung und Quantisierung wurde mit dem Programm quant2cIIR durchgeführt, welches das Programm quant2c verwendet. Tabelle 17-5 Skalierte (g) und quantisierte (q) Koeffizienten der Teilsysteme zum CauerTiefpass SOSg =
0.1961 0.1961 0.1961
+0.2747 -0.0243 -0.1159
0.1961 0.1961 0.1961
1.0000 1.0000 1.0000
-1.3316 -1.1877 -1.1105
0.5005 0.7129 0.9147
SOSq =
0.1953 0.1953 0.1953
+0.2734 -0.0234 -0.1172
0.1953 0.1953 0.1953
1.0000 1.0000 1.0000
-1.3281 -1.1875 -1.1094
0.5000 0.7109 0.9141
f Überprüfung des Ergebnisses
Zur Überprüfung des Betragsfrequenzgangs des quantisierten Systems wird das MATLAB-Werkzeug fdatool eingesetzt. Die Koeffizienten in SOSq werden über den Menü-Punkt File ) Import Filter from Workspace an fdatool übergeben. Das Gewicht Gain wird zu 1 gesetzt. Bild 17-12 zeigt die Einstellungen. Das quantisierte System weicht im Durchlassbereich deutliche vom Wunschbetragsfrequenzgang ab. Statt des Maximalwertes 1 wird nur noch der Wert von fast 0.98 erreicht. Die Abweichung im Durchlassbereich beträgt ca. 0.06; gefordert sind 0.05. Ein Blick auf den Sperrbereich (nicht in Bild 17-12) ergibt eine maximale Degradation der Sperrdämpfung von etwa 0.5 dB bei der normierten Kreisfrequenz 0.43. Alles in allem, erweist sich der entworfene IIR-Tiefpass relativ robust gegenüber der Quantisierung der Koeffizienten in Kaskadenform auf nur 8 Bits.
17.4 IIR-Filter mit quantisierten Koeffizienten
197
Bild 17-12 Untersuchung des auf 8-Bit-Wortlänge quantisierten Cauer-Tiefpasses (SOSq) mit dem MATLAB-Werkzeug fdatool
g Vergleich mit dem Gesamtsystem in Direktform II.
Mit dem MATLAB-Befehle sos2tf(SOS,G(1)) wird die Polynomdarstellung der Übertragungsfunktion mit den Zählerkoeffizienten b und Nennerkoeffizienten a berechnet. Die Koeffizienten des Gesamtsystems sind in Tabelle 17-6 zusammengestellt. Die Nennerkoeffizienten überschreiten den im Zweierkomplement-Format darstellbaren Zahlenbereich. Eine direkte Umsetzung ist nicht möglich. Tabelle 17-6 Zähler- und Nennerkoeffizienten des Cauer-Tiefpasses in Direktform II b = 0.0075
0.0052
0.0156
0.0111
0.0156
0.0052
0.0075
a = 1.0000
-3.6299
6.5075
-6.9521
4.6278
-1.8083
0.3264
198
17 Reale digitale Filter: Koeffizientenquantisierung
17.4.4
Versuchsdurchführung
M17.2
Entwerfen Sie mit dem MATLAB-Programm fdatool einen Chebyshev-II-Tiefpass mit den Vorgaben des Toleranzschemas: :D = 0.04S
:S = 0.1S
GD = 0.02
GS = 0.0001
Stellen Sie das Pol-Nullstellendiagramm und den Betragsfrequenzgang grafisch dar. Das System soll in Kaskadenform mit Blöcken 1. und 2. Ordnung mit der Wortlänge 8 Bits oder 16 Bits realisiert werden. Führen Sie die dazu notwendigen Schritte durch. Erfüllt das in Kaskadenform realisierte Filter für die Wortlänge w = 8 bzw. 16 bit die Entwurfsspezifikationen? Bestimmen Sie zum 8-Bit-quantisiererten System das Pol-Nullstellendiagramm und vergleichen Sie es mit dem des nichtquantisierten Systems.
Hinweise zu MATLAB-Funktionen und M-Files Im Folgenden werden für die Versuchsdurchführung nützliche MATLAB-Befehle und -Funktionen aufgelistet, zu denen Sie sich mit Hilfe der Help-Funktion Erläuterungen und Beispiele am Bildschirm anzeigen lassen können, siehe auch vorherige Versuche. Tabelle 17-7 MATLAB-Befehle benutzte Programme und Dateien Spezielle Befehle
load, sos2tf, save
MATLAB-Programme
fdatool, fvtool
Þ Online-Ressourcen
quant2c.m, quant2cIIR.m
199
18
Reale digitale Filter: Quantisierte Arithmetik
18.1
Einführung
In diesem Versuch werden die Auswirkungen der begrenzten Wortlänge bei den arithmetischen Operationen innerhalb der digitalen Filter behandelt. Während die Quantisierung der Koeffizienten die Übertragungsfunktion ändert und prinzipiell schon im Filterentwurf berücksichtigt werden kann, treten die Wortlängeneffekte bei den arithmetischen Operationen während des Betriebes auf. Lernziele Nach Bearbeiten dieses Versuches können Sie y y y y y y y
das Überlaufverhalten der Addition anhand der Zweierkomplement-Überlaufkennlinie und der Sättigungskennlinie erläutern die Vor- und Nachteile der Wortlängenverkürzung durch Runden und Betragsabschneiden nennen die Entstehung kleiner Grenzzyklen erklären und ihre Auswirkungen auf das Verhalten der Systeme abschätzen die Entstehung großer Grenzzyklen erläutern und ihre Auswirkungen auf das Verhalten der Systeme abschätzen den Effekt des inneren Rauschens erklären ein Blockschaltbild zur Schätzung der Leistung des inneren Rauschens skizzieren und erläutern die Anwendung digitaler Filter unter realistischen Bedingungen beurteilen und kritische Fehler vermeiden
18.2
Quantisierte Arithmetik
Lineare digitale Filter setzen sich aus drei unterschiedlichen Bausteinen zusammen: Verzögerungsgliedern, Addierern und Multiplizierern. Da die Rechenergebnisse auf die zur Verfügung stehenden Maschinenzahlen abgebildet werden müssen, sind die Additionen und die Multiplikationen durch die Quantisierung betroffen.
18.2.1
Addition Überlauf und große Grenzzyklen
Das Zweierkomplement-Format ist in der digitalen Signalverarbeitung sehr verbreitet, da die Addition bitweise mit einem einfachen Übertrag erfolgt, und so einfache Addierschaltungen möglich werden. Bei der Addition im Zweierkomplement-Format kann es jedoch zu einem Übertrag in die höchste Stelle kommen, die für die Darstellung des Vorzeichens reserviert ist. Wie im Beispiel in Tabelle 18-1 gezeigt, tritt dann ein Überlauf auf. Das Überlaufverhalten wird durch die Überlaufkennlinie in Bild 18-1 oben charakterisiert. An ihr lassen sich auch die Beispiele in Tabelle 18-1 nachvollziehen.
200
18 Reale digitale Filter: Quantisierte Arithmetik
1 1
ZweierkomplementÜberlaufkennlinie
1 1
1
Sättigungskennlinie
1
[x]Q
0
x
1
[x]Q
0
x
1
Bild 18-1 Kennlinien der Addition
Die Addition wird bei einer Übersteuerung zu einer nichtlinearen Operation. Wie im Versuch zu beobachten ist, kann der Überlauf von einem Ende des Zahlenbereichs in den anderen zu großen Grenzzyklen, auch Überlaufschwingungen genannt, führen. Die Signalverarbeitung wird dadurch unbrauchbar. Als Gegenmaßnahme werden u. a. Sättigungskennlinien wie die in Bild 18-1 unten verwendet: Bei einem positiven oder negativen Überlauf die größte bzw. die kleinste darstellbare Maschinenzahl gesetzt. Tabelle 18-1 Addition von zwei 8-Bit-Zahlen im Zweierkomplement-Format mit Überlaufkennlinie reell
quantisiert
reell
quantisiert
reell
quantisiert
x1
0.5 d
0100 00002c
0.5 d
0100 00002c
0.5 d
0100 00002c
x2
0.25 d
0010 00002c
0.5 d
0100 00002c
0.75 d
0110 00002c
x1 + x2
0.75 d
0110 00002c = 0.75 d
1.0 d
18.2.2
1000 00002c = 1 d
1.25 d
1010 00002c = 0. 75d
Multiplikation Inneres Rauschen und kleine Grenzzyklen
Bei der Multiplikation von Zweierkomplement-Zahlen kann es, ausgenommen 1 1 = 1, zwar nicht zu einem Überlauf kommen, jedoch erhöht sich im Allgemeinen die Zahl der benötigten Binärstellen. Multipliziert man zwei Zahlen mit n signifikanten Stellen der Mantisse, d. h. ohne Vorzeichen, so sind für die exakte Darstellung des Produktes 2n 1 Bits notwendig. Die Multiplikation von zwei Zahlen im Zweierkomplement-Format kann auf Digitalrechnern vorteilhaft auf Schiebeoperationen und Additionen zurückgeführt werden. Das Vorzeichen wird gesondert ausgewertet. Das Beispiel der beiden Zweierkomplement-Zahlen x1 = 0.5078125d = 21 + 27 = 0100 00012c
und
x2 = 0.0078125d = 27 = 0000 00012c
18.2 Quantisierte Arithmetik
201
liefert eine um 7 Binärstellen nach rechts verschobene Zweierkomplement-Zahl mit 14 signifikanten Binärstellen x1 x2 = 0.00396728515625d = 28 + 214 = 0000 0001 0000 00102c
Vor der Weiterverarbeitung des Produktes, z. B. bei Zwischenspeicherung, muss in der Regel eine Wortlängenverkürzung vorgenommen werden. Damit wird auch die Multiplikation auf Digitalrechnern zu einer nichtlinearen Operation. Zwei gängige Methoden der Wortlängenverkürzung sind das Runden und das Betragsabschneiden. Die zugehörigen Kennlinien sind in Bild 16-2 dargestellt. Man beachte, dass beim Betragsabschneiden die Wortlängenverkürzung stets hin zu null erfolgt, d. h. der Betrag einer Zahl durch die Quantisierung nicht zunehmen kann. Anmerkungen: (i) Manche Signalprozessoren unterstützen spezielle Algorithmen zum Runden, z. B. das konvergente Runden um einen Bias zu vermeiden. (ii) MATLAB besitzt für das Runden die vier Befehle ceil, floor, fix (Betragsabschneiden, englisch Sign-magnitude Truncation) und round.
Die Quantisierung mit Runden wirkt durch das Aufrunden wie eine zusätzliche Signalquelle, die dem System Energie zuführt. Es können kleine Grenzzyklen entstehen: Am Systemausgang tritt ein periodisches Signal in der Größenordnung von wenigen Quantisierungsintervallbreiten auf, obwohl das Eingangssignal längst abgeklungen ist. Anmerkung: Die kleinen und großen Grenzzyklen werden ihrer Entstehung nach auch Quantisierungsgrenzzyklen bzw. Überlaufgrenzzyklen genannt [KaKr06]. In der englischen Literatur werden die Bezeichnung granular limit cycles und zero-input limit cycles bzw. overflow limit cycles und overflow oscillations verwendet.
Beim Betragsabschneiden wird dem System keine zusätzliche Energie zugeführt. Kleine Grenzzyklen werden um den Preis einer größeren Ungenauigkeit meist vermieden.
[x]Q
[x]Q
Runden
Betragsabschneiden 1/2
1
1/2
2Q
x 2Q
1/2 1
1
1
2Q
x 1/2
2Q
1
1
Bild 18-2 Quantisierungskennlinien für das Runden und das Betragsabschneiden mit Quantisierungsintervallbreite Q und Repräsentanten
für w = 3 bit
In den meisten Fällen, z. B. bei einem Audiosignal und einer Signalaussteuerung über mehrere Quantisierungsintervalle hinweg, können die Fehler der Wortlängenverkürzung an einer Multiplikationsstelle in guter Näherung als unkorreliertes additives Rauschsignal modelliert werden. Im Fall des Rundens spricht man dann vom Rundungsrauschen, in der Audiotechnik auch von Rundungsgeräusch. Bild 18-3 zeigt das Ersatzschaltbild für die Multiplikation mit Wortlängenverkürzung. Mit der Annahme, dass das Rundungsrauschen im Intervall [Q/2, Q/2] gleich-
202
18 Reale digitale Filter: Quantisierte Arithmetik
verteilt ist, ergibt sich seine Leistung, weil mittelwertfrei auch die Varianz, aus der Quantisierungsintervallbreite Q = 2(w/bit1) zu
V r2
1 2 w bit 2 3
Q2 12
(18.1)
Die Analyse der Wortlängeneffekte bei Systemen höherer Ordnung ist aufwändig. Der Einfachheit halber und weil die IIR-Systeme in der Regel in der Kaskadenform realisiert werden, werden im Versuch die Wortlängeneffekte an Blöcken 2. Ordnung untersucht. In einem Block 2. Ordnung in Direktform II treten pro Zeittakt bis zu fünf Multiplikationen auf. Mit der Annahme, dass die Rauschsignale unabhängig sind, können die an einer Additionsstelle zusammengeführten Rauschsignale zusammengefasst werden. Wegen der Unabhängigkeit addieren sich die Leistungen. Man erhält das Ersatzschaltbild Bild 18-4. Beachten Sie, dass sich wegen der zweifachen Addition die Varianz des Rundungsrauschens bzgl. des Koeffizienten a1 vervierfacht.
x[n] Rauschquelle r[n]
b
Vr2
y[n] = b x[n] + r[n] Bild 18-3 Ersatzschaltbild für die Multiplikation mit Wortlängenverkürzung durch Runden
x[n] 2Vr2
5Vr2
b2
D a2
Vr2
b1
D
b0
y[n]
a1/2
Bild 18-4 Lineares Ersatzschaltbild für einen Block 2. Ordnung mit Rundungsrauschen
Das am Systemausgang beobachtbare Rauschsignal aller inneren Quellen wird inneres Geräusch bzw. Rauschen genannt. Bei dessen Analyse wird davon ausgegangen, dass durch eine geeignete Signalaussteuerung in den Teilblöcken keine Überläufe auftreten. Für ein so linearisiertes System höherer Ordnung kann das Leistungsdichtespektrum des inneren Rauschens am Systemausgang berechnet und die rauschoptimale Konfiguration von Polen und Nullstellen in den Teilblöcken der Kaskadenform analytisch bestimmt werden [RoMo87], [Wer08a]. Das lineare Ersatzschaltbild Bild 18-4 ermöglicht eine quantitative Abschätzung des inneren Rauschens am Systemausgang. Das Einspeisen der Rauschersatzquellen kann wie in Bild 18-5 als Rauscherregung eines Systems 2. Ordnung mit nur rekursiven Zweigen aufgefasst werden.
18.2 Quantisierte Arithmetik
203 Rauschquelle Vr2
D
yr[n]
D
a2
Inneres Rauschen
a1
Bild 18-5 Lineares Ersatzschaltbild für einen Block 2. Ordnung mit Rundungsrauschen
Mit den für das Runden gemachten Annahmen eines im Quantisierungsintervall gleichverteilten und unkorrelierten Rauschsignals, ergibt sich mit (18.1) für die Rauschleistung am Systemausgang
V 2y
r
Q2 Ri ,0 12
(18.2)
mit der Rauschzahl Ri,0 des Ersatzsystems in Bild 18-5. Die Rauschzahl beschreibt die Verstärkung des Rundungsrauschens durch die Rückkopplung im System. Entsprechend den Überlegungen in Versuch 15.2, Tabelle 15-1, ist die Rauschzahl gleich der Energie der Impulsantwort des Ersatzsystems in Bild 18-5. Es gilt allgemein
¦ hi [n] f
Ri,0
n 0
2
1 2S j
v³
dzz
H i ( z ) H i z 1
z 1
(18.3)
Die Berechnung kann entweder über die Autokorrelationsfolge, siehe Abschnitt 15, oder mit der komplexen Umkehrformel (18.3) erfolgen. Letzteres liefert die übersichtlichere Formel Ri,0
1 a2 (1 a2 ) ª (1 a2 )2 a12 º ¬ ¼
(18.4)
wobei die Koeffizienten nach ihrer Quantisierung einzusetzen sind. Die numerische Auswertung der Formel liefert einen interessanten Zusammenhang zwischen der Lage des konjugiert komplexen Polpaares in der z-Ebene und der Rauschzahl, siehe auch (17.12) mit a2 = Uf2 und a1 = 2 Re(zf). Bild 18-6 zeigt das Ergebnis: Die Rauschzahl nimmt mit wachsender Nähe der Pole zum Einheitskreis und zur reellen Achse zu. Schmalbandige Tief- und Hochpässe sind demzufolge von innerem Rauschen besonders betroffen. Die Wirkung aller inneren Rauschquellen des Systems fasst die die Rauschzahl Ri zusammen. So berücksichtigt beispielsweise die Zahl der Rauschquellen NQ = 8 das Aufspalten des Koeffizienten a1 in Bild 18-4. Mit der Varianz des Rundungsrauschens ergibt sich schließlich die Abschätzung der Leistung des inneren Rauschens am Systemausgang. Ni
Q2 NQ Ri,0
12 Ri
Q2 Ri 12
(18.5)
204
18 Reale digitale Filter: Quantisierte Arithmetik
35 Ri,0 in dB 25 20 a1 entfällt für Uf = 0.95 :f = 90°
15 10
0.9 5
0.8 0.6
0 0
20
40
60
80
100 120
:f in Grad 180
Bild 18-6 Rauschzahl Ri,0 eines reellwertigen Systems 2. Ordnung in Abhängigkeit von dem Betrag Uf und der Phase :f des Polpaares
Um die Bedeutung des inneren Rauschens zu verdeutlichen sei eine ungünstige Rauschzahl von Ri = 30 dB angenommen, siehe Bild 18-6. Dann wird die Rauschleistung aufgrund der Wortlängenverkürzung Q2/12 um den nicht unerheblichen Faktor 1000 verstärkt. Nach der 6dB-pro-Bit-Regel (16.19) entspricht das einem Verlust von etwa 5 Bit an Wortlänge (Präzision). Zur Abschätzung der Störung durch das innere Rauschen beachte man, dass die Zahl der Rauschquellen sowohl von der tatsächlichen Implementierung als auch der Wahl der Koeffizienten abhängt. So ist bei einem Polwinkel von 90° der Koeffizient a1 = 0. In diesem Fall sind nur NQ = 4 Rauschquellen wirksam. Die Rauschzahl in (18.5) nimmt sprunghaft um den Faktor 2, oder äquivalent um 3dB, ab.
18.2.3
Ersatzschaltbild für einen Block 2. Ordnung
Zum Abschluss werden die Überlegungen zu den Wortlängeneffekten der Multiplikation und der Addition in Bild 18-7 zusammengeführt. Man beachte, dass der Block 2. Ordnung durch die Sättigungskennlinien, oder alternativ durch die Zweierkomplement-Überlaufkennlinien, im Falle eines Überlaufes nicht mehr linear ist. Wichtig ist ferner anzumerken: Durch die Wortlängeneffekte sind die in der Literatur angegebenen Filterstrukturen nicht mehr äquivalent. Je nachdem wo die Additionen und Multiplikationen im realen System auftreten, wirken sich die Wortlängeneffekte unterschiedlich aus. Anmerkung: Digitale Signalprozessoren besitzen meist spezielle Hardware-Komponenten, um die Störungen durch die quantisierte Arithmetik möglichst klein zu halten. So werden Akkumulatoren mit vergrößerter Wortlänge verwendet und eine automatische Überlauferkennung und Sättigungskennlinie unterstützt. Im Beispiel des Blockes 2. Ordnung in Bild 18-7 könnten durch zwei Überlaufbits im Akkumulator die vier Additionen in der Mitte ohne Fehler dargestellt werden. Erst wenn das Ergebnis, der Wert der Zustandsvariablen s1[n] in den Speicher übertragen wird, wird die Wortlängenverkürzung, z. B. Sättigung bei Überlauf, angewendet.
18.3 Vorbereitende Aufgaben
205
x[n] 2Vr2
5Vr2
b2
Vr2
b1
D
b0
y[n]
D s2[n]
a2
s1[n] a1/2
Bild 18-7 Nichtlineares Ersatzschaltbild für den Block 2. Ordnung mit Rauschquellen zu den Multiplikationen und Sättigungskennlinien zur Additionen
18.3
Vorbereitende Aufgaben
A18.1
Kleiner Grenzzyklus Das Auftreten von kleinen Grenzzyklen wird am Block 2. Ordnung in Bild 18-8 veranschaulicht. Es wird angenommen: (i)
Die Rechnung erfolgt im Dezimalsystem, wobei auf die erste Nachkommastelle (Dezimale) gerundet wird, z. B. [0.27]Q = 0.3
(ii) Die Filterkoeffizienten sind a2 = 0.8 und a1 = 0.9
(iii) Zum Zeitpunkt n = 0 ist die Erregung x[n] abgeklungen, d. h. x[n] = 0 für n t 0. Zu diesem Zeitpunkt haben die Zustandsgrößen, die Speicher, die Werte s1[0] = 0.2 und s2[0] = 0.2. Bestimmen Sie die fehlenden Werte der Zustandsgrößen s1[n] und s2[n] in Tabelle 18-2 und tragen Sie die Werte in das Zustandsdiagramm Bild 18-9 ein.
s2[n]
x[n]
s1[n]
D
D
Runden
Runden
a2
a1
y[n]
Bild 18-8 Block 2. Ordnung mit Runden (a2 = 0.8, a1 = 0.9)
206
18 Reale digitale Filter: Quantisierte Arithmetik
Tabelle 18-2 Zustandsgrößen zu Bild 18-8 n
0
1
s1[n]
0.2
0
s2[n]
0.2
0.2
2
3
4
0.2
5
6
0.2
Nach sechs Takten stellen sich die Zustandsgrößen wieder ein. Es ergibt sich ein kleiner Grenzzyklus mit Periode 6. Da die Zustandsgröße s1[n] am Ausgang beobachtet wird ergibt sich das periodische Ausgangssignal in der Größe einiger LSB. s2 / LSB 4
2
4
2
0 2
2
n =1
4
s1 / LSB
n =0
4 Bild 18-9 Kleiner Grenzzyklus: Zustandsgrößen im Zustandsraumdiagramm (Block 2. Ordnung)
A16.2
Großer Grenzzyklus Ausgehend vom Block 2. Ordnung in Bild 18-10 soll das Entstehen großer Grenzzyklen nachvollzogen werden. Es wird angenommen: (i)
Die Rechnung erfolgt im Dezimalsystem. Nach der Multiplikation wird das Betragsabschneiden auf die erste Nachkommastelle, z. B. [0.27]Q = 0.2, eingesetzt
(ii) Für die Darstellung der Zustandsgrößen wird die Zweierkomplement-Überlaufkennlinie entsprechend Bild 18-1 oben verwendet
(iii) Die Filterkoeffizienten sind a2 = 0.7 und a1 = 1.6
(iv) Zum Zeitpunkt n = 0 ist die Erregung x[n] abgeklungen, d. h. x[n] = 0 für n t 0. Und für die Zustandsgrößen, gelten die Werte s1[0] = 0.5 und s2[0] = 0.5.
Bild 18-11 zeigt die ersten resultierenden Werte für die Zustandsgrößen. Zeigen Sie, dass ein großer Grenzzyklus entsteht.
18.3 Vorbereitende Aufgaben
207
Hinweis: Im Zeitschritt n = 10 wiederholen sich die Werte der Zustandsgrößen s1[10] = s1[2] und s2[10] = s2[2]. Da der Block für n > 0 nicht mehr von außen erregt wird, stellt sich am Ausgang ein Grenzzyklus mit Periode 8 ein.
s2[n]
ÜK
x[n]
s1[n]
D
ÜK
BA
BA
a2
a1/2
y[n]
D
Bild 18-10 Block 2. Ordnung mit Betragsabschneiden (BA) nach der Multiplikation und Überlaufkennlinie (ÜK) für die Zustandsgrößen (a2 = 0.7, a1 = 1.6)
s2 1
n=0
0.5
1
0.5
0
2
0.5
1
s1
0.5
3
1
1 Bild 18-11 Großer Grenzzyklus: Zustandsgrößen im Zustandsraumdiagramm (Block 2. Ordnung)
208
18 Reale digitale Filter: Quantisierte Arithmetik
A16.3-3 Leistung des inneren Rauschens Zur Bestimmung der Leistung des inneren Rauschens wird eine Vergleichsmessung wie in Bild 18-12 durchgeführt. Der Simulation wird ein reales quantisiertes System mit der Wortlänge w zugrunde gelegt. Als Eingangssignal wird eine zunächst in [1, 1] gleichverteilte unkorrelierte Zufallszahlenfolge verwendet. Worauf ist bei der Quantisierung und Skalierung des Eingangssignals zu achten, damit eine Schätzung des inneren Rauschens möglich wird? Welche Rolle spielt dabei der Skalierungsfaktor c?
Ideales System (IEEE 754-1985)
Digitale Rauschquelle gleichverteilt in [1, 1]
rand
Skalierungs- c faktor
Quantisiertes Rauschsignal
filter
yref[n] Inneres Rauschen
Q
w Wortlänge
HQ(z) y[n] Quantisiertes System unter Test
Bild 18-12 Schätzung der Leistung des inneren Rauschens
18.4
Versuchsdurchführung
M18.1
Kleiner Grenzzyklus Der Block 2. Ordnung in Bild 18-8 soll auf kleine Grenzzyklen untersucht werden. Hierzu ist bei Impulserregung und einer Wortlänge von 16 Bits für verschiedene Polwinkel jeweils das Ausgangssignal zu beobachten. Die Zählerkoeffizienten sind b0 = 0.9375, b1 = 0, b2 = 0, und der Pol ist gegeben durch U = 0 .95 und M = 0° ... 90°. Untersuchen Sie mit dem Programm dsplab16_1 und filt2_rc, siehe Programmbeispiele 16-1 und 16-2, ob kleine Grenzzyklen auftreten. Tragen Sie die Ergebnisse in Tabelle 18-3 ein. Hinweise: (i) Ein Überblick über die Funktion der Programme genügt. In der Versuchsdurchführung wird nur der Parameter phi im Programm dsplab16_1, wie in der Tabelle 18-3 vorgegeben, eingestellt. (ii) Die Ergebnisse schwanken stark für unterschiedliche Polwinkel und Amplituden der Erregung.
18.4 Versuchsdurchführung Tabelle 18-3
Polwinkel M
209
Beispiel für kleine Grenzzyklen in einem Block 2. Ordnung mit Runden der Multiplikationsergebnisse auf eine Wortlänge von 16 Bits bei Impulserregung mit kleiner Amplitude 16*LSB. Angegeben sind die kleinsten und größten Werte ymin bzw. ymax und die Periode der Grenzzyklen ymin / LSB
ymax / LSB
Periode
11
11
12
0° 30° 60° 90°
Wiederholen Sie die Untersuchungen des Blockes 2. Ordnung für die Arithmetik mit Betragsabschneiden und Sättigung, siehe Programm filt2_ts. Können kleine Grenzzyklen beobachtet werden?
Programmbeispiel 18-1 Untersuchung von Grenzzyklen in einem Block 2. Ordnung % Limit cycles due to round-off in 2nd order block with quantized % coefficients and fixed-point arithmetic % used functions: filt2_rc.m, filt2_ts.m % dsplab18_1.m * mw * 06/21/2008 w = 16; LSB = 2^(-w+1); % word length and LSB MODE = 'rc' % rounding, two's-complement overflow % MODE = 'ts' % truncation to zero, saturation arithmetic rho = 0.95; phi = 30*pi/180; % pole magnitude and phase N = 200; % number of simulation cycles % Filter parameters b = [.9375 0 0]; % numerator coefficients a = [1 -2*rho*cos(phi) rho^2]; % denominator coefficients si = [0; 0]; % initial values for state space variables bq = LSB*round(b/LSB); % quantized coefficients aq = [1 2*LSB*round((a(2)/2)/LSB) LSB*round(a(3)/LSB)]; % Input signal - impulse sequence - quantized xq = zeros(1,N); xq(1) = 16*LSB; % Referenz system : 2nd order block with MATLAB default arithmetic [yref,zref] = filter(bq,aq,xq,si); switch MODE % 2nd order block with fixed-point arithmetic case 'rc' [y,s,OC] = filt2_rc(bq,aq,xq,si,w); case 'ts' [y,s,OC] = filt2_ts(bq,aq,xq,si,w); otherwise disp('Unknow method: MODE') end fprintf('overflow counter = %g\n',OC) % Indicate overflow % Search for limit cycle
210
18 Reale digitale Filter: Quantisierte Arithmetik
fprintf('search for limit cycle\n') start = 0; period = 0; k = 1; while k