Zahlenformate SigProc-4-Zahlenformate 1 Einfluss der Zahlendarstellung • Auf Genauigkeit und ImplementierungsAufwand (HW-Kosten) • Einfache Formate einfach in HW zu implementieren aber begrenzter Zahlenbereich und komplizierte Arithmetik • Aufwendige Formate großer HWAufwand, aber großer Zahlenbereich und immuner in der Arithmetik SigProc-4-Zahlenformate 2 X = (b− A , , b−1 , b0 , b1 , , bB ) r B −i b r ∑ i , i= − A 0 ≤ bi ≤ ( r − 1) bi Ziffer r A B Zahlenbasis, Radix Zahl der ganzzahligen Stellen Zahl der Kommastellen (123.456)10 = 1 × 102 + 2 × 101 + 3 × 100 + 4 × 10−1 + 5 × 10−2 + 6 × 10−3 SigProc-4-Zahlenformate 3 Binäre Festkommaformate • Dezimalpunkt Binärpunkt (3.3125)10 ⇒ 11B 0101 −1 −2 −3 =1⋅ 2 + 1⋅ 2 + 0 ⋅ 2 + 1⋅ 2 + 0 ⋅ 2 + 0 ⋅ 2 1 1 =2 + 1 +0 + +0 + 4 16 1 0 −4 Durch den Binärpunkt ist der Zahlenbereich festgelegt. SigProc-4-Zahlenformate 4 Für 0 B 111111 ist der Wertebereich b −b −b 1 − 2 (größteZahl) und 2 (kleinste Zahl) 0.984375D und 0.015625D SigProc-4-Zahlenformate 5 Negative Zahlen Ein Bit wird für das Vorzeichen spendiert X 1.b b b für X ≤ 1 • Sign-Magnitude= X = 1.b b b + 00 01 für X ≤ 1 • Two‘s Compliment • Offset Binary = X 1.b b b für X ≤ 1 • One‘s Compliment 1 2 SM 2C 1C SigProc-4-Zahlenformate 1 2 1 2 B B B 6 Decimal Sign-magnitude 2’s complement Offset binary 1’s compliment 7 0111 0111 1111 0111 6 0110 0110 1110 0110 5 0101 0101 1101 0101 4 0100 0100 1100 0100 3 0011 0011 1011 0011 2 0010 0010 1010 0010 1 0001 0001 1001 0001 0 0000 0000 1000 0000 -0 1000 - - 1111 -1 1001 1111 0111 1110 -2 1010 1110 0110 1101 -3 1011 1101 0101 1100 -4 1100 1100 0100 1011 -5 1101 1011 0011 1010 -6 1110 1010 0010 1001 -7 1111 1001 0001 1000 -8 - 1000 0000 - SigProc-4-Zahlenformate 7 Sign-magnitude • Einfache Erzeugung negativer Zahlen, schlecht geeignet zum Rechnen, nur in speziellen HW-Implementierungen verwendet, zwei Nullen. • In DSPs wird meistens 2‘s compliment verwendet. SigProc-4-Zahlenformate 8 Offset-binary • Findet Verwendung bei A/D-Wandlern. • Umwandlung in 2‘s compliment durch Inversion des MSB SigProc-4-Zahlenformate 9 2‘s compliment • Negative Zahlen durch Inversion der positiven Zahl und addieren von 1 3D = 0011 1100 +0001 1101 = -3D • Addition und Subtraktion können mit derselben HW ausgeführt werden SigProc-4-Zahlenformate 10 Unterschiedliche Wortlänge: Aufpassen beim Überlauf! +15 00001111 +3 0011 ―――――――――― +18 00010010 aber +15 00001111 -3 1101 ―――――――――― +28 00011100 SigProc-4-Zahlenformate Ungleiche Wortlänge 11 Lösung: Sign-extended operation +15 0 0 0 0 1111 -3 1 1 1 1 1101 ―――――――――― +12 1 0 0 0 01100 weggelassen, von Hardware unterstützt SigProc-4-Zahlenformate 12 Auswirkungen der endlichen Wortlänge • • • • Werte nur mit endlicher Genauigkeit dargestellt Erhöhung des Grundrauschen der Signale Erzeugt nichtideale Antworten der digitalen Filter Führt zu zusätzlichem Rauschen bei der A/DWandlung • Kann zu ungenauen arithmetische Ergebnissen führen Die Probleme werden bei kleiner Wortlänge größer. SigProc-4-Zahlenformate 13 A/D-Wandler Quantisierungsfehler Beispiel: 8-bit Wandler Signalbereich von − 1 bis + 1 Volt 2U p 2 Volt 7.8125 mV LSB = = = 8 b 2 2 Quantisierungsfehler SigProc-4-Zahlenformate 14 Sign-magnitude Format SigProc-4-Zahlenformate Quantisierungsfehler LSB ± = ±3.905 15mV 2 Quantisierungsfehler im Frequenzbereich Rauschen SigProc-4-Zahlenformate 16 Quantifizierung des Rauschens Signal-to-noise ratio Signalpower SNR = Noisepower SigProc-4-Zahlenformate 17 Ein wenig Statistik x[1] + x[2] + + x[ N ] 1 N = x = x n [ ] Mittelwert ∑ N n =1 N 1 N 2 σ = − x n x n [ ] [ ] { } Varianz ∑ N − 1 n =1 2 1 σ = N 2 N ∑{x[n] − x [n]} 2 für große N n =1 SigProc-4-Zahlenformate 18 σ2 ist Amplitude zum Quadrat, also Leistung der Abweichung vom Mittelwert. Für ein Zufallssignal x[n] ist σ2 die Leistung des fluktuierenden Anteils des Signals. Bei Wechselgrößen ist der Effektivwert eines Signal identisch mit der Standardabweichung: = σ x= eff 1 N N ∑ x[n] 2 n =1 SigProc-4-Zahlenformate 19 Quantisierungsrauschen ist ein Zufallssignal und wir können daher die Rauschleistung durch die Varianz ausdrücken: Signalpower = SNR = Noisepower 2 σ Signal = 10log 2 σ A/D-Rauschen SigProc-4-Zahlenformate 20 Die Quantisierungsfehler liegen zwischen –q/2 und q/2 und treten mit gleicher Wahrscheinlichkeit auf. Wahrscheinlichkeitsdichtefunktion des A/D-Fehlers Bei gleichwahrscheinlichen Signalamplituden ist die mittlere Leistung des Fehlersignals (Rauschen) 2U p 1 q/2 2 q2 e p (e)de = e de = ; q σ= ∫ = ∫ q −q / 2 − / 2 q 12 2b 2 A/D-Rauschen q/2 2 2 U 2 U ( p) 2 p σ A/D-Rauschen = = 2b b 2 3 2 ⋅ SigProc-4-Zahlenformate 12 ( 2 ) 2 21 Zur Berechnung der SNR haben wir jetzt die Rauschleistung, es fehlt aber noch die Signalleistung. Über das Signal wissen wir nicht viel, wir können aber den Effektivwert ermittlen. Für die weitere Beschreibung führen wir den Lastfaktor LF ein: Effektivwert LF = Es ist auch der Crest factor CF = 1/LF gebräuchlich. Spitzenwert Aussteuerung des A/D-Wandlers Signalleistung SigProc-4-Zahlenformate 22 LF = 1 LF= LF = LF = = 0.71 1 2 SigProc-4-Zahlenformate 2 = 0.58 12 = 0.33 0.25 1 34 23 Ein Sinussignal hat einen LF von 1/√2 = 0,71 (-3 dB unter Up). Eine regulär laufende Maschine hat ein LF von 0,66. Bei Auftreten von Störungen (z.B. Lagerabnützungen) treten Signalspitzen (mit geringer Energie) auf, die den LF verkleinern. SigProc-4-Zahlenformate 24 Effektivwert σ Signal = LF = Spitzenwert Up ⇒ σ 2 Signal = ( LF ) U p2 2 ( LF ) U p2 2 2b SNR 10log LF = ⋅ 10log 3 2 2 ( ) ( ) 2b U p / 3 ⋅ 2 2 = 4.77 + 6.02 × b + 20log LF SNR SigProc-4-Zahlenformate 25 Eingangssignal = Sinus SNRA / = 4.77 + 6.02 ⋅ b + 20log LF D SigProc-4-Zahlenformate 26 Der LF ist nie größer als – 3 dB (Vollaussteuerung des A/D-Wandlers mit Sinusschwingung) und wir erhalten für maximale Sinusausteuerung ( SNRA/Dmax= 4.77 + 6.02 ⋅ b + 20log 1 / 2 ) = 1.76 + 6.02 × b SigProc-4-Zahlenformate 27 Zusammenfassung A/D (1) • Ein ideal A/D-gewandeltes Signal kann kein besseres S/N-Verhältnis als 4.77 + 6.02 × b + 20log LF SNRA/= D haben. • Ein 8-bit A/D-Wandler hat im besten Fall ein SNR von 49.9 dB. Ein kontinuierliches Signal mit besserem SNR wird auf die 49.9 dB verschlechtert oder es muss ein A/D-Wandler mit höherer Auflösung eingesetzt werden. SigProc-4-Zahlenformate 28 Zusammenfassung A/D (2) • Reale A/D-Wandler reduzieren das ideale SNR um 3 – 6 dB. • Es ist unvorsichtig einen A/D-Wandler voll auszusteuern, da sonst die Gefahr der Übersteuerung besteht. Es muss der Effektivwert gesucht werden, der den A/D-Wandler nicht (selten) übersteuert! Aber der Signalverlauf ist statistisch! • Es ist unzweckmäßig einen A/D-Wandler einzusetzen, der ein deutlich besseres SNR hat als das kontinuierliche Signal. SigProc-4-Zahlenformate 29 Zusammenfassung A/D (3) • Es wurde angenommen, dass die Quantisierungsfehler einem stationären (nicht zeitabhängigem) Zufallsprozess entsprechen. • Die Wahrscheinlichkeitsdichte ist gleichverteilt, was nur bei hochwertigen A/DWandlern erreicht werden kann (keine Codeaussetzer beim Wandler). • Die Quantisierungsfehler sind nicht mit dem Eingangssignal korreliert, was in der Praxis bei Signalen mit reichem Spektralinhalt gegeben ist (Sprache, Musik, Messwerte). SigProc-4-Zahlenformate 30 OVERFLOW SigProc-4-Zahlenformate 31 Overflow (ohne Vorzeichen) Übertrag 1 1 1 1 0 1 0 1 0 + 1 0 0 1 1 1 1 0 1 0 0 0 1 +42 +39 +81 Overflow error Für die Summe von m b-bit Zahlen werden b + log 2 ( m ) Stellen benötigt. SigProc-4-Zahlenformate 32 Overflow bei 2er Complement • Unter bestimmten Bedingungen erzeugt ein Overflow beim Addieren von zwei Zahlen keinen Fehler. • Beim Addieren mehrere Zahlen entstehende Überläufe in der Zwischensumme, erzeugen aber keinen Fehler in der Endsumme, wenn die Summe kleiner als 2b-1 ist. SigProc-4-Zahlenformate 33 4-bit 2‘sSigProc-4-Zahlenformate compliment 34 Overflow (2er Komplement) Übertrag 0 1 0 1 0 1 1 + 0 0 1 0 0 1 1 0 1 1 1 + 0 1 0 1 1 1 1 0 1 0 1 0 0 0 -5 +2 -3 -2 +6 +4 SigProc-4-Zahlenformate Kein Overflow Mit Overflow, aber gültiges positives Ergebnis 35 Overflow (2er Kompliment) 0 1 + 1 1 0 1 0 + 0 0 1 0 0 0 0 1 1 1 1 0 0 1 1 0 1 1 1 1 1 1 1 1 0 -7 -6 +3 +7 +7 -2 Mit Overflow, ungültiges positives Ergebnis Ohne Overflow, ungültiges negatives Ergebnis SigProc-4-Zahlenformate 36 Wenn das Übertragsbit in das Vorzeichenbit dem Vorzeichenbit entspricht, kann das Überlaufbit ignoriert werden und das Ergebnis ist gültig. Wenn das Übertragsbit in das Vorzeichenbit unterschiedlich vom Vorzeichenbit ist, ist das Ergebnis ist ungültig. SigProc-4-Zahlenformate 37 = 1 1 + 0 1 0 1 1 1 1 0 1 0 1 0 0 0 Übertrag -2 +6 +4 Mit Overflow, aber gültiges positives Ergebnis SigProc-4-Zahlenformate 38 ≠ ≠ 0 1 + 1 1 0 1 0 + 0 0 1 0 0 0 0 1 1 1 1 0 0 1 1 0 1 1 1 1 1 1 1 1 0 Übertrag -7 -6 +3 Mit Overflow, ungültiges positives Ergebnis Übertrag +7 +7 -2 SigProc-4-Zahlenformate Ohne Overflow, ungültiges negatives Ergebnis39 Zwei Additionen ≠ ≠ 1 0 + 0 0 1 1 1 1 1 0 1 1 1 0 0 1 Übertrag +7 +6 Overflow Fehler -3 beim Zwischenergebnis 0 1 + 1 1 0 0 1 0 1 1 0 1 0 1 1 0 Übertrag -3 Der Betrag der Summe der 4-bit Zahlen (7 + 6 – 7 = 6) und ist kleiner als 2 = 8. -7 +6 Gültiges positives Ergebnis 4-1 Eine Folge von b-Bit Additionen liefert auch bei Zwischenfehlern ein richtiges Gesamtergebnis, wenn der Betrag des Ergebnisses kleiner SigProc-4-Zahlenformate als 2b-1 ist. 40 Eine Folge von b-Bit Additionen liefert auch bei Zwischenfehlern ein richtiges Gesamtergebnis, wenn der Betrag des Ergebnisses kleiner als 2b-1 ist. + 0 0 1 0 0 1 1 1 1 1 1 0 0 1 1 0 1 0 1 0 1 1 0 +7 +6 -3 -5 -8 Overflow Fehler beim Zwischenergebnis Ungültiges negatives Ergebnis Der Betrag der Summe der 4-bit Zahlen (7 + 6 – 5 = 8) und ist nicht kleiner als 24-1 = 8. SigProc-4-Zahlenformate 41 Behandlung des Overflows SigProc-4-Zahlenformate 42 Durch Abschneiden Beim Abschneiden wird der Datenwert auf einen Wert gesetzt der ≤ dem Datenwert ist, z.B. 1.7 1 q xTrunc = − 2 2 q 2 σ Trunc = 12 SigProc-4-Zahlenformate 43 Rundungsfehler bei der Division durch 2T durch Verschieben 31/16: 1 1 1 1 1 0 0 0 0 1 = 1 31/16 = 1.937 richtiger Quotient − tunc. Quotient Fehler [ % ] ⋅ 100 richtiger Quotient 1.937 − 1 = = 48% 1.937 SigProc-4-Zahlenformate 44 1 − 2−T = ⋅ 100 Errtruncmax [%] −T N + (1 − 2 ) Maximaler Fehler Der größte Fehler tritt auf, wenn alle abgeschnittenen Bits gleich 1 sind b1 1 1 1 1 – 2-T Der Fehler ist Null wenn alle abgeschnittenen Bits Null sind. /2 /4 /256 SigProc-4-Zahlenformate Wortlänge 45 Rundung −0.5 ≤ x < 0.5 0.5 ≤ x < 1.5 ⇒ 0 ⇒ 1 xTrunc = 0 σ 2Trunc SigProc-4-Zahlenformate q2 = 12 46 Festkomma Zahlenauflösung • Gleichbleibende Auflösung X max − X min ∆= 2b − 1 • Intervall steigt mit dem Wertebereich SigProc-4-Zahlenformate 47 Qm.n-Formate SigProc-4-Zahlenformate 48 16-bit Dynamikbereich SigProc-4-Zahlenformate Genauigkeit 49 16-bit Skalierung Dynamikbereich SigProc-4-Zahlenformate 50 Die meisten DSPs unterstützen Bruchzahlen im Qm.n-Format. Assembler kennt nur Ganzzahlen, der Programmierer muss entsprechende Normierung vornehmen: 1. Normalisieren in den Bereich des gewünschten Q-Formats 2. Multiplizieren mit 2n, n ist die Zahl der Nachkomma-Bits 3. Runden auf die nächste Ganzzahl z.B.: 1.18 im Q.15-Format 1. Normalisieren, damit die Zahl im Bereich -1 bis + 1 liegt 1.18/2 = 0.59 2. Multiplizieren mit 215 0.59 x 32768 =19333.12 3. Runden auf 19333 4B85h SigProc-4-Zahlenformate 51 Fixed floating point DSPs SigProc-4-Zahlenformate 52 Anwendungen SigProc-4-Zahlenformate 53 Floating Point Binärformate x= m ⋅ 2 e Exponent Mantisse 32-bit floating point Formate verwenden typisch 24 bit für die Mantisse 8 bit für den Exponenten ( ! In der Mathematik ist Mantisse die Bezeichnung für die Nachkommastellen!) SigProc-4-Zahlenformate 54 Auflösung sinkt bei größeren Zahlen: Abstand zwischen benachbarten FP-Zahlen wird größer wenn die Zahlen größer werden. Festkomma Gleitkomma • Gleichmäßige Auflösung über den gesamten Zahlenbereich • • Kleiner Dynamikbereich • Feinere Auflösung für kleine Zahlen, gröbere Auflösung für große Zahlen. Größerer Dynamikberich SigProc-4-Zahlenformate 55 Festkomma 231-1 2x109 2 G Beispiel 32 bit : Gleitkomma (Vorzeichen) 23 Mantisse (Vorzeichen) 7 Exponent: 0.100 0 ⋅ 211111111 =12 × 2 −127 ≈ 0.3 × 10−38 0.1111 ⋅ 201111111 =(1 − 2 −23 ) × 2 −127 ≈ 1.7 × 1038 Dynamikbereich ca. 1076 , unterschiedliche Auflösung SigProc-4-Zahlenformate 56 Um die Null darzustellen muss nur die Mantisse Null sein, der Exponent kann beliebig sein. Die Wahl von Mantisse und Exponent, die Darstellung der Null und die Behandlung des Overflows führen zu unterschiedlichen Gleitkommadarstellungen, z.B. IEEE 754 Format SigProc-4-Zahlenformate 57 Formate • • • • Single Double Single extended Double extended SigProc-4-Zahlenformate 32 (23 +8) 64 (52 +11) >42 (>30 + >10) >78 (>62 + >14) 58 IEEE 32-bit floating-point format 0 S 1 … E 8 9 … M 31 Exponent 8-bit length, coded in biased (non-negative) form as E - 127 Mantissa 23-bit length, 0 ≤ M < 1 ( 1) S ⋅ 2 E −127 ( M ) X =− 2r − 1 − 1 r number of bits of E Conventions: 0 ; ∞-∞ 0 1 1 2. If E =255 (max.) and M=0, than X =− ( 1) s ⋅ ∞ ⇒ ∞; ⇒ −∞ 0 −0 ( 1) s ⋅ 2 E −127 (1.M ) normalized 3. If 0 < E < 255, than X =− 1. If E 255 (max.) and M ≠ 0, than X is not a number (NaN) 4. If E =0 and M ≠ 0, than X =− ( 1) s ⋅ 2 −126 (0.M ) denormalized (fixed point) 5. If E =0 and M =0, than X =− ( 1) s ⋅ 0 where 1.M is a number with one integer bit and 23 fractional bits and SigProc-4-Zahlenformate 0.M is a fraction. 59 Beispiel : 010000 0101010 00 S E M 130−127 X =−1 × 2 0 13 × 1010 00 = 2 × = 13 8 3 The range of 32-bit floating point numbers in this format is from 2 −23 × 2 −126 = 2 −149 = 1.4013 × 10−45 to 128 38 −24 − × 1 2 2 3.4028 10 = × ( ) Zehn Hoch (Powers of Ten): Quark (10−16 ) ⇔ Grenze des Alls (1025 ) SigProc-4-Zahlenformate 60 S EEEEEEEE MMMMMMMMMMMMMMMMMMMMMMM 0 1 8 9 3 1 E = 255 M ≠ 0 0 11111111 00000000010000000000000 1 11111111 00001000000100000010000 = NaN = NaN E = 255 M = 0 0 11111111 000000000O0000000000000 1 11111111 00000000000000000000000 = ∞ = - ∞ E = 0 M = 0 0 00000000 000000000O0000000000000 1 00000000 00000000000000000000000 = 0 = - 0 SigProc-4-Zahlenformate 61 Exponent biased by 28 − 1 − 1 = 127 Exponenten von −126 bis +127 darstellbar. (0 und 255 reserviert) Grund leichtere Vergleichbarkeit von Zahlen in diesem Format. 0 < E < 255 ⇒ V =− ( 1) S ⋅ 2 E −127 ⋅ (1.M ) 0 10000000 00000000000000000000000 = +1•2(128-127)•1.0 = 2 6.5 0 10000001 10100000000000000000000 = +1•2(129-127)•1.101 = 1 10000001 10100000000000000000000 = -1•2(129-127)•1.101 = -6.5 0 00000001 00000000000000000000000 = +1•2(1-127)•1.0 = 2-126 0 00000000 10000000000000000000000 = +1•2(-126)•0.1 = 2-127 1 00000000 00000000000000000000001 = -1•2(-126)•0.0…1 = -2-149 Kleinste neg. Zahl E= 000, M ≠ 0 ⇒ V =− ( 1) S ⋅ 2 −126 ⋅ (0.M ) SigProc-4-Zahlenformate 62 http://www.h-schmidt.net/FloatApplet/IEEE754de.html SigProc-4-Zahlenformate 63 IEEE 754 not only a format … • Rounding algorithms • Arithmetic operations (add, subtract, multiply, divide, square root, fusedmultiply-add, remainder, etc.) • Conversions (between formats, to and from strings, etc.) • Exception handling Invalid (√-1), /0, over/under-flow http://754r.ucbtest.org/standards/754.pdf (ANSI/IEEE Std 754–1985) 64