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
Ich bin mir gerade nicht sicher ob du nicht nur einfaches skalieren suchst... 10Bit = 1024 Schritte, 8 = 256 ... (Wert / 1024) * 256
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
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?
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 :(
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.
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
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?
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.
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.