Forum: Digitale Signalverarbeitung / DSP / Machine Learning 10bit Signal auf 8 bit runter manipulieren


von Simoniya (Gast)


Lesenswert?

Hallo

ich arbeiter gerade mit Matlab Simulink und habe folgendes Problem:

Ich bekomme über einen Eingang ein CAN Signal das folgendermassen 
defieniert ist:

10Bit Auflösung , Mindestwert -5,12, Maximaler Wert 5,12, Resolution ist 
0,00999.

Nun möchte ich einen Block erzeugen, der genau dieses Signal manipuliert 
um zu schauen, wie sich das Gesamtsystem meines Modells ändert wenn ich 
z.B. das Signal auf 8 Bit reduziere oder 7 Bit. Dabei soll auch der Min 
und Max Wert geändert werden.

Weiss jemand ob es dazu was gibt bzw. wie ich es berechnen kann?

Im Grunde nur eine Manipulation des Eingangssignals

von Nils S. (kruemeltee) Benutzerseite


Lesenswert?

Ich bin mir gerade nicht sicher ob du nicht nur einfaches skalieren 
suchst...


10Bit = 1024 Schritte, 8 = 256 ...

(Wert / 1024) * 256

von user (Gast)


Lesenswert?

naja einfach die hinteren x Bits wegwerfen bis die Anzahl der Bits wie 
gewünscht ist z.B.

1010 1010 10

die hinteren 2 Bits weggeworfen

1010 1010

von Guest (Gast)


Lesenswert?

Wie ueblich: kommt drauf an.
Was du suchst nennt sich Quantisieren. Dabei gibt es LSB und MSB 
quantisieren. LSB aendert die Genauigkeit, MSB den Wertebereich.
Ausserdem gibt es skalieren.
Letztendlich musst du wissen was du willst. Man kann so quantisieren, 
dass ein diskretes, stabiles System auch stabil bleibt oder so dass der 
mathematische Fehler gering ist. Man kann beim MSB quantisieren mehrere 
verschiedene Kennlinien benutzen, zB eine Saettigung oder eine mit 
Overflow.
Also, was hast du vor?

von Simoniya (Gast)


Lesenswert?

Hallo

ich möchte darstellen, dass das Eingangssignal bei einer Bit Änderung, 
zum Beispiel von 10 Bit auf 8Bit oder 7 Bit schlechter wird. Zum 
Beispiel steuere ich mit den 10 Bit ein Winkel an. Wenn ich nun die 10 
Bit auf 7 Bit reduiziere und auch die Min und Max Werte ändere, möchte 
ich die Auswirkung auf den Winkel sehen. Ich möchte dann die Winkel 
übereinander legen, um darzustellen wie diese für 10Bit, 8 Bit, 7 Bit 
und z.B. 3 Bit aussehen.

In Simulink gibt es zwar einen Quantizer aber bei dem kann man kaum was 
einstellen bzw. kein Min, Max Werte und auch keine Bit Anzahl :(

von Jay (Gast)


Lesenswert?

Simoniya schrieb:
> ich möchte darstellen, dass das Eingangssignal bei einer Bit Änderung,
> zum Beispiel von 10 Bit auf 8Bit oder 7 Bit schlechter wird.

Das Eingangssignal wird nicht schlechter. Das Eingangssignal ist was es 
ist. Eventuell, aber da drückst du dich nicht klar aus, willst du ein 
oder mehrere digitale Signale von deinem (digitalen) Eingangssignal 
ableiten, mit unterschiedlichen Anzahlen von Quantisierungsstufen.

Dabei willst du etwas "reduzieren". Wenn damit gemeint ist einfach LSBs 
wegzulassen, dann kannst du das natürlich machen. Aber, du erhältst 
dadurch nicht das Äquivalent dessen, was du erhalten würdest, wenn du 
direkt mit einer entsprechend geringeren Anzahl von Quantisierungsstufen 
abgetastet hättest.

Man kann sicher ausrechnen, wie man eine echte Änderung der 
Quantisierungsstufen macht. Notfalls indem man das Signal komplett 
rekonstruiert und neu abtastet. Aber das habe ich nie gerechnet und 
wahrscheinlich gibt es da auch Abkürzungen.

Was mir viel wichtiger erscheint als wie die Rechnung nun genau geht 
(das ist nur Fleißarbeit) erscheint mir allerdings, das du dir erst 
einmal darüber klar wirst, was du eigentlich willst, was das in Bezug 
auf das Signal bedeutet und das du dich klar ausdrückst.

> In Simulink

Da ist wahrscheinlich eines deiner Hauptprobleme. Simulationen nützen 
nur wirklich was, wenn man die Theorie hinter dem was man da macht 
verstanden hat. Mehr oder wenig sinnlos mit Blöcken (Formeln/Funktionen) 
rumspielen und nach Schlagwörtern suchen, bis etwas rauskommt was schön 
aussieht, nützt nichts. DU musst erst deine Theorie im Griff haben.

von Pandur S. (jetztnicht)


Lesenswert?

Was du machen moechtest ist den Bereich beibehalten, dh die Grenzen so 
lassen, aber die hinteren N Bits auf Null setzen.

Also 0b 11 0101 0110 --> 0b 11 0101 0000    von 10 auf 7 bit = 3 bit 
Nullen

von Guest (Gast)


Lesenswert?

Simoniya schrieb:
> ch möchte darstellen, dass das Eingangssignal bei einer Bit Änderung,
> zum Beispiel von 10 Bit auf 8Bit oder 7 Bit schlechter wird. Zum
> Beispiel steuere ich mit den 10 Bit ein Winkel an. Wenn ich nun die 10
> Bit auf 7 Bit reduiziere und auch die Min und Max Werte ändere, möchte
> ich die Auswirkung auf den Winkel sehen. Ich möchte dann die Winkel
> übereinander legen, um darzustellen wie diese für 10Bit, 8 Bit, 7 Bit
> und z.B. 3 Bit aussehen.

Was soll das heissen, die min und max Werte aendern? Willst du den 
Bereich strecken/stauchen? Was soll das alles? Was ist dein System, die 
gesamte Umgebung, wozu machst du das?

von Chris (Gast)


Lesenswert?

Was du suchst nennt sich "binary fraction"
Hier kann man zB definieren, dass eine Zahl 8 Bit hat, wobei die ersten 
4 Bit die Vorkommazahl bezeichnen, die letzten vier die Nachkommazahl.
Dass ganze gibt es noch "signed", dann bedeutet das erste Bit das 
Vorzeichen. Also eine " signed binary fraction" im Q4.4 Format sieht 
beispielsweise so aus:
01101100
Das heißt:
Die erste 0 sagt sie ist positiv.
Die 3 folgenden Bit bedeuten: 6,
Die vier letzten Bits bedeuten: 1*2^-1+1*2^-2+0+0=0,75
Also ergibt das insgesamt: 6,75

Was du jetzt möchtest, ist von einem Q10.0 in eine Q10.-2 Zahl zu 
runden. Den Faktor 100 kannst du dir ja dazu denken. Das Q10.0 Format 
geht von -512 bis 511 in 1er Schritten. Das Q10,-2 Format geht ebenfalls 
von -512 bis 511, allerdings nur in 4er Schritten.

Hierbei wird also nicht die Range, sondern die Anzahl der 
Zwischenschritte reduziert. Wenn du das alles verstanden hast, wirst du 
merken, dass dem Computer völlig egal ist, ob du ihm eine Zahl im Q10.0 
Format oder im Q2.8 Format gibst. Er wird immer das gleiche rechnen. 
Lediglich die Interpretation deinerseits ists anders. Deswegen fühle ich 
mich noch verpflichtet dir zu sagen, dass wenn du das alles simulieren 
möchtest, und den unterschied zwischen Q10.0 und Q10.-2 zeigen möchtest, 
du einfach nur die letzten beiden Bits immer auf "00" runden musst. Das 
hat den gleichen Effekt.

von Volle (Gast)


Lesenswert?

dafür gibt es doch den Fixed-Point Designer


http://de.mathworks.com/products/fixed-point-designer/

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.