["Gelöst"] 8 bit Logarhytmische Lookup Tabelle

Servus,

ich bin gerade bei einem Projekt, in dem ich eine 8 bit Zahl in eine loarhytmische 8 bit Zahl umwandeln muss. Klar, dafür gibts so Formeln für, aber bei meinem Projekt muss es fix gehen, Speicher ist egal (im Flash).

Hat vielleicht jemand eine komplette logarhtmische LOT da? von 0 bis 255 mit 256 Einträgen?

Danke im vorraus! :)

Verzweifler:
… loarhytmische …
Hat vielleicht jemand eine komplette logarhtmische LOT da? von 0 bis 255 mit 256 Einträgen?

Eine Lookup-Table habe ich zwar nicht zu bieten, dafür aber einen Link zur Wikipedia, aus dem Du die richtige Schreibung abgucken kannst: Logarithmus – Wikipedia

Gruß

Gregor

Hat vielleicht jemand eine komplette logarhtmische LOT da? von 0 bis 255 mit 256 Einträgen?

Kannst du die nicht selber vorherberechnen lassen?

Mit dem ram siehts bei meinem Projekt ein bisschen mau aus.

Dann lasse ich mir von meinem Rechenknecht einfach die Tabelle im Seriellen Monitor ausgeben, ich kopiere das in meinen Sketch und fertig... :P

Sketch:

void setup() {
  Serial.begin(9600);
  for(int x = 0; x < 256; x++){
    byte y = pow(2, (log10(256)/log10(2)) * x / 255);
    Serial.print(y);
    Serial.print(",");
    Serial.print(" ");
  }
}

void loop() {
}

Tabelle:

const byte log8[256] PROGMEM = {0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 5, 5, 5, 5, 5, 5, 5, 5, 6, 6, 6, 6, 6, 6, 6, 7, 7, 7, 7, 7, 7, 8, 8, 8, 8, 8, 8, 9, 9, 9, 9, 10, 10, 10, 10, 10, 11, 11, 11, 11, 12, 12, 12, 13, 13, 13, 13, 14, 14, 14, 15, 15, 15, 16, 16, 16, 17, 17, 18, 18, 18, 19, 19, 20, 20, 20, 21, 21, 22, 22, 23, 23, 24, 24, 25, 26, 26, 27, 27, 28, 29, 29, 30, 31, 31, 32, 33, 33, 34, 35, 36, 36, 37, 38, 39, 40, 41, 42, 43, 43, 44, 45, 46, 47, 49, 50, 51, 52, 53, 54, 55, 57, 58, 59, 60, 62, 63, 65, 66, 67, 69, 70, 72, 74, 75, 77, 79, 80, 82, 84, 86, 88, 90, 92, 94, 96, 98, 100, 102, 104, 107, 109, 112, 114, 117, 119, 122, 124, 127, 130, 133, 136, 139, 142, 145, 148, 151, 155, 158, 162, 165, 169, 173, 176, 180, 184, 188, 192, 197, 201, 205, 210, 215, 219, 224, 229, 234, 239, 245, 250, 255};

Edit:

Nutze gerade so eine mischung aus linear und logarithmisch:

void setup() {
  Serial.begin(9600);
  for(int x = 0; x < 256; x++){
    byte y = pow(2, (log10(256)/log10(2)) * x / 255);
    byte z = (x + y) / 2;
    Serial.print(z);
    Serial.print(",");
    Serial.print(" ");
  }
}

void loop() {
}

Tabelle:

const byte linlog8[256] PROGMEM = {0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9, 10, 10, 11, 11, 12, 12, 13, 13, 14, 14, 15, 15, 16, 17, 17, 18, 18, 19, 19, 20, 20, 21, 21, 22, 22, 23, 23, 24, 24, 25, 25, 26, 27, 27, 28, 28, 29, 29, 30, 30, 31, 31, 32, 32, 33, 34, 34, 35, 35, 36, 36, 37, 37, 38, 38, 39, 40, 40, 41, 41, 42, 42, 43, 43, 44, 45, 45, 46, 46, 47, 47, 48, 49, 49, 50, 50, 51, 52, 52, 53, 53, 54, 54, 55, 56, 56, 57, 58, 58, 59, 59, 60, 61, 61, 62, 62, 63, 64, 64, 65, 66, 66, 67, 68, 68, 69, 70, 70, 71, 72, 72, 73, 74, 74, 75, 76, 76, 77, 78, 79, 79, 80, 81, 81, 82, 83, 84, 84, 85, 86, 87, 88, 88, 89, 90, 91, 92, 92, 93, 94, 95, 96, 97, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 108, 109, 110, 111, 112, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 126, 127, 128, 129, 130, 132, 133, 134, 136, 137, 138, 140, 141, 142, 144, 145, 147, 148, 150, 151, 153, 154, 156, 157, 159, 161, 162, 164, 166, 168, 169, 171, 173, 175, 177, 179, 181, 183, 185, 187, 189, 191, 193, 195, 198, 200, 202, 205, 207, 209, 212, 214, 217, 220, 222, 225, 228, 231, 233, 236, 239, 242, 245, 249, 252, 255};

Adressiert wird das Array dann mit:

byte logVal = pgm_read_byte(linlog8 + val);

logVal => Ausgabe

val => Eingabe

Nur fürs Protokoll… :wink: