LookUp Tabelle mit Variablen

Gast #3287196
Lesenswert?

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
Gast #3287205
Lesenswert?

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
Gast #3287217
Lesenswert?

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
Gast #3287224
Lesenswert?

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
Gast #3287231
Lesenswert?

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.
Gast #3287233
Lesenswert?

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....
#3287287
Lesenswert?

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.
#3287328
Lesenswert?

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.
#3287345
Lesenswert?

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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren