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
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.