Forum: Digitale Signalverarbeitung / DSP / Machine Learning Filter in Matlab berechnen Berechnungsgenauigkeit einstellen


von Andre R. (anra)


Lesenswert?

Hallo zusammen,

habe folgendes Problem.

Der DSP den ich einsetze hat folgendes Zahlenformat

1 Bit Vorzeichen
8 Bit Exponent
23 Bit Fraction

Wie kann ich einen freieinstellbaren Fiilter in Matlab simulieren. Bzw. 
wie kann ich die Berechnungsgenauigkeit in Matlab einstellen. Meines 
wissens rechnet Matlab mit double Genauigkeit.

Weiß jemand einen Trick oder wie man das umstellen kann. Finde einfach 
nix.

Danke
AnRa

von fred maier (Gast)


Lesenswert?

Du kannst in Matlab mit dem single Befehl  solche Zahlen erzeugen und 
dann den Filter programmieren.

Achtung: In sehr seltenen Fällen werden andere Rundungsregeln verwendet.

Am Einfachsten siehst du dir die Matlabhilfe zu single an.

Kleines Beispiel vorab:

format long
single(pi)
double(pi)

von Andre R. (anra)


Lesenswert?

Danke

hab dein Beispiel ausporbiert

Bei single zeigt er dann eine 8 Stellige Zahl an. Ich hoffe er rechnet 
dann auch mit der weiter.
Es entsteht trotzdem folgendes Problem: 23 Bit entsprecht der zahl 
8388608 Das sind nur 7 Stellen.

Noch eine Idee?

von Andreas S. (andreas) (Admin) Benutzerseite


Lesenswert?

Single hilft dir nicht weiter. Entweder verwendest du die Fixed-Point 
Toolbox, oder du schreibst dir selber Funktionen zur Simulation der 
auftretenden Rundungsfehler.

von Andre R. (anra)


Lesenswert?

Wieso Fixed Point.
Der DSP ist ein floating point und die toolbox habe ich leider nicht.

von Mark B. (markbrandis)


Lesenswert?

Andre R. schrieb:
> und die toolbox habe ich leider nicht.

Dann nimm halt GNU Octave?

von Andre R. (anra)


Lesenswert?

das hab ich auch mal ausprobiert. Bin aber auf Grund der fehlenden 
Oberfläche irgendwie nicht zurecht gekommen.

Die frage ist nur, wofür brauche ich die fixed point toolbox wenn ich 
einen floting point dsp habe?

von fred maier (Gast)


Lesenswert?

Ähm, 'single precision' (32 bit im Sinne von IEEE 754) hat zwischen 7 
und 8 Stellen.

Du hast auch noch das "versteckte" Bit bei einer normalisierten Zahl. 
Also implizit i.d.R. 24bit in der Mantisse.

Darstellung +/- (1+x)^e

x 23 bit
e 8 bit
Vorzeichen 1 bit

Mantisse =fraction

Es gibt noch eine Ausnahme bei "gradual underflow".

von Andre R. (anra)


Lesenswert?

hui Danke

von Andreas S. (andreas) (Admin) Benutzerseite


Lesenswert?

Ups, sorry, habe die 8 Bit Exponent einfach überlesen. Dann gilt was 
fred maier geschrieben hat. Für die Verwendung von single in MATLAB 
gibt's hier ein paar Beispiele:
http://www.mathworks.de/products/matlab/demos.html?file=/products/demos/shipping/matlab/singleMath.html

von Dennis (Gast)


Lesenswert?

Wenn wir schon mal dabei sind, wie schaut denn die ganze Sache in 
Fixpoint aus, sprich die Konvertierung der berechneten 
Filterkoeffizienten in ein Format a la Q1.15 oder Q2.14 ? Danke, Dennis

von Andreas S. (andreas) (Admin) Benutzerseite


Lesenswert?

Siehe meine erste Antwort.

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.