Hallo Leute, folgende Aufgabenstellung: 4 Eingangssignale --> 1 Output A B C sind % Werte von 0..100, gereiht von High nach Low das Activ Flag hat einen wertebereich von 0..1 A B C Activ(0) --> A B A C Activ(0) --> B .... Kann man das vernünftig in einer LookUp darstellen, obwohl sich natürlich A B C ständig ändern? das ganze natürlich in ANSI C. LG
Was soll denn unter welchen umstaenden zurueck gegeben werden? In deinem Beispiel ist es immer der groeszte Wert - liegt das am activ-flag?
PC oder µC? Für einen µC dürfte die Tabelle zu groß werden. Grüße, René
Danke für die schnellen Antworten, die Tabelle hat 12 Reihen, mit 4 Inputs und 1nem Output. Am µC würde die LookUp implementiert werden. Leider ist es nicht immer der größte Wert. Das Activ Flag greift in Spezial Fällen Lg
Spielt denn nur die Größenreihenfolge von A, B, C eine Rolle oder die genauen %-Werte? Im ersten Fall kann man eine LUT über die Reihenfolge machen, dann sinds nämlich nur noch 3*2*1=6 Möglichkeiten und nicht 100*100*100=1000000
Es spielt nur die Größenreihenfolge eine Rolle, nicht genaue % Werte. Wie könnte so etwas aussehen?
Gamo schrieb: > 4 Eingangssignale --> 1 Output > > A B C sind % Werte von 0..100, gereiht von High nach Low > das Activ Flag hat einen wertebereich von 0..1 > > A B C Activ(0) --> A > B A C Activ(0) --> B wenn es nur darum geht, den größten der 3 oder das Active Flag zu nutzen, wozu dann die Tabelle? Oder muss der größte Werte dann umgerechnet werden? Schreib doch mal Pseudo Code, vielleicht wird es dann klarer (wenigstens für mich...) Grüße
Du vergleichst die Werte um die Reihenfolge zu ermitteln. Du nimmst ein Byte, speicherst in Bits 2-3 welches von A,B,C das größte ist (als Zahl von 0-2), in Bit 1 welches der beiden übrig gebliebenen das zweitgrößte ist, und in Bit 0 das "Active Flag". Das Byte nimmst du dann als Index für eine LUT mit 12 Einträgen (0-11), in der du pro Eintrag den Index des Eingabewerts speicherst, der durchgeleitet werden soll.
Das Problem ist das Activ Flag, somit ist es nicht immer der Fall, dass der größte Wert auch der Output ist. Für mich ist die Frage, ob es möglich ist, dass in einer LUT darzustellen. Gibt es vielleich eine andere Möglichkeit, eventuell mit einem input vector und einem Output vector zu arbeiten....
Kannst du den Zusammenhang etwas besser bzw. genauer beschreiben?
Deine 'Beschreibung' im Eröffnungsposting ist reichlich schwammig.
Falls die Zusammenhänge nicht völlig willkürlich sind, dann ist es auch
möglich sie vernünftig auszudrücken. Und dann kann man auch Code dafür
schreiben, ohne eine LUT bemühen zu müssen.
> die Tabelle hat 12 Reihen, mit 4 Inputs und 1nem Output.
Das ist jetzt noch nicht allzuviel. Problematisch wird es genau dann,
wenn eine Wertekombination als Input kommt, die nicht in der LUT
enthalten ist.
Hier die Tabelle:
1 | High Medium Low Activation Output |
2 | |
3 | A B C 0 A |
4 | A C B 0 A |
5 | B A C 0 B |
6 | B C A 0 B |
7 | C A B 0 A |
8 | C B A 0 B |
9 | |
10 | A B C 1 A |
11 | A C B 1 A |
12 | B A C 1 A |
13 | B C A 1 C |
14 | C A B 1 C |
15 | C B A 1 C |
Gamo schrieb: >
1 | > High Medium Low Activation Output |
2 | > |
3 | > A B C 0 A |
4 | > A C B 0 A |
5 | > B A C 0 B |
6 | > B C A 0 B |
7 | > C A B 0 A |
8 | > C B A 0 B |
d.h. wenn Activation gleich 0 ist, dann spielt C keine Rolle mehr und das Ergebnis ist der größere Wert von A und B
1 | if( Activation == 0 ) |
2 | Result = ( A > B ) ? A : B; |
>
1 | > A B C 1 A |
2 | > A C B 1 A |
3 | > B A C 1 A |
4 | > B C A 1 C |
5 | > C A B 1 C |
6 | > C B A 1 C |
7 | > |
und hier ist es umgekehrt. Wenn Activation gleich 1 ist, dann spielt B keine Rolle mehr
1 | else
|
2 | Result = ( A > C ) ? A : C; |
Das wars. Deine LUT Implementierung reduziert sich auf den 4-Zeiler
1 | if( Activation == 0 ) |
2 | Result = ( A > B ) ? A : B; |
3 | else
|
4 | Result = ( A > C ) ? A : C; |
und du brauchst die Werte noch nicht mal vorher der Größe nach ordnen.
Danke,dass habe ich bereits in Verwendung. Ich wollte jedoch zur Übung das ganze etwas schwieriger gestalten und in einer LUT mit Referenzen verpacken.
Gamo schrieb: > Danke,dass habe ich bereits in Verwendung. > > Ich wollte jedoch zur Übung das ganze etwas schwieriger gestalten und in > einer LUT mit Referenzen verpacken. Für eine LUT brauchst du Zahlenwerte. Du hast keine Zahlenwerte. Du hast irgendwas schwammiges mit A, B und C. Eine Lookup Table macht dir den Zusammenhang: Wenn der Messwert 867 ist, dann ist das Ergebnis 23. Wenn der Messwert 868 ist, dann ist das Ergebnis 25. Wenn der Messwert x ist, dann ist das Ergebnis davon y. Und man benutzt sie wenn es keine einfache Formel oder Formalismus gibt, so dass man y aus x errechnen kann. Das geht natürlich auch 2-dimensional, bzw. n-dimensional. Aber der Speicherverbrauch steigt extrem mit jeder weiteren Dimension. Bei dir
1 | A B C active Result |
2 | 0 0 0 0 0 |
3 | 1 0 0 0 1 |
4 | 2 0 0 0 2 |
5 | 3 .... |
6 | 99 0 0 0 99 |
7 | |
8 | 0 1 0 0 1 |
9 | 1 1 0 0 1 |
10 | 2 1 0 0 2 |
11 | 3 .... |
12 | 99 1 0 0 99 |
13 | |
14 | 0 2 0 0 2 |
15 | 1 2 0 0 2 |
16 | 2 2 0 0 2 |
17 | 3 2 0 0 3 |
18 | ... |
19 | 99 2 0 0 99 |
20 | |
21 | 0 3 0 0 3 |
22 | 1 3 0 0 3 |
23 | .... |
24 | 99 99 0 0 99 |
25 | ... |
26 | 0 0 1 0 0 |
27 | ... |
alle Kombinationen, jeder mit jedem. mit allen möglichen Zahlenwerten.
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.