Forum: Digitale Signalverarbeitung / DSP / Machine Learning Best practice DSP - Integer/Float/Integer-Konvertierung


von Albert H. (Gast)


Lesenswert?

Hallo zusammen,

Ich werde beruflich das erste Mal mit einer Thematik konfrontiert und 
möchte mich gerne über das "beste Vorgehen" erkundigen. Ich hoffe also 
auf Erfahrungswerte bspw. :-)

Folgendes Projektszenario:
Analog Audio Input -> ADC -> DSP -> Class-D Amplifier -> Analog Audio 
Output

Vom ADC bis zum Class-D Amplifier wird digital übertragen. Der ADC hat 
eine Auflösung von 24 Bit. Die Abtastwerte werden mit einer Wortbreite 
von 32 Bit in den obersten 24 Bit übertragen. Als DSP kommt ein Floating 
Point DSP zum Einsatz. Er filtert das Signal mit diversen 
biquadratischen IIR Filtern. Die Fitlerkoeffizienten liegen im Bereich 
[-3.0f;+3.0f] (circa). Der DSP sendet das gefilterte Signal dem Class-D 
Amplifier mit einer Wortbreite von ebenfalls 32 Bit, wobei nur die 
obersten 20 Bit vom Class-D Amplifier ausgewertet werden.

Meine Frage bezieht sich eigentlich nur auf den DSP intern:
Ist es sinnvoll die Integer Abtastwerte nicht nur 1:1 ins SP Floating 
Point Format zu konvertieren sondern auch auf die Amplitude auf [-1;+1] 
zu normieren ehe die Biquads das Signal filtern? Gibt es 
"standardisierte" Vorgehensweisen? Oder technische/mathematische 
Begründungen die Normierung zu tun oder eben nicht zu tun?

Normierung bedeutet ja auch zusätzlicher Rechenaufwand bei der Integer 
nach Float Konvertierung (Division) als auch bei der Float nach Integer 
Konvertierung (Multiplikation).

Grüße
Albert

von Wolfgang (Gast)


Lesenswert?

Die Umsetzung in Float ist eigentlich eine Normierung, meist auf den 
Zahlenbereich [1; 2[ (z.B. IEEE 754). Der Normierungsfaktor steckt dann 
im Exponenten. Es macht also keinen Sinn, die Zahlen vorher noch extra 
anders zu normieren.

von Strubi (Gast)


Lesenswert?

Moin,

die Frage lässt sich nicht ganz allgemein beantworten. Meistens geht es 
mit float gut, problematisch wird's eher dann, wenn es um Fehler oder 
Quantisierungen und (-Rauschen) geht. Dabei fallen auch wiederum die 
Rundungs-Optionen der DSPs ins Gewicht (die man meistens über C-Code gar 
nicht erreicht).
Wenn Du deinen Wertebereich einschränken kannst, d.h. weisst, dass Werte 
nie eine gewisse Grenze überschreiten, kannst Du den Fehler schon mal 
gut abschätzen. Ich hatte aber auch schon Fälle auf dem Tisch, wo eine 
fract-Arithmetik die bessere Fehlerabschätzung liefert.
Der binäre Fehler ist bei float abhängig vom Exponenten, bei fract ist 
er eben fix, was die Fehlerfortpflanzung berechenbar macht.

Grüsse,

- Strubi

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.