-
        

Ergebnis 1 bis 6 von 6

Thema: wie kann man wertetabellen interpolieren?

  1. #1
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    27.02.2006
    Beiträge
    178

    wie kann man wertetabellen interpolieren?

    Anzeige

    SMARTPHONES & TABLETS-bis zu 77% RABATT-Kostenlose Lieferung-Aktuell | Cool | Unentbehrlich
    es gibt in Bascom ja die funktion lookup.
    hier wird ein (x-)wert einem (y-) wert zugewiesen und ausgegeben.
    meine frage:
    wie kann ich zwischenwerte interpolieren?
    d.h. ich möchte für einen (Mess)wert der zwischen 2 x-werten der lookup Tabelle liegt, einen interpolierten y-Wert ausgeben.
    wie geht das am einfachsten in bascom?

    gruß
    holger

  2. #2
    Erfahrener Benutzer Robotik Einstein Avatar von Dirk
    Registriert seit
    30.04.2004
    Ort
    NRW
    Beiträge
    3.791

    Interpolieren

    Hallo Holger,

    1. kann man die Distanz zwischen den Tabellenwerten als linear annehmen. In einer Schleife sucht man die beiden X-Tabellenwerte, zwischen denen der neue X-Wert liegt.
    Betrachtet man die Distanz zwischen den beiden Tabellenwerten als 100%, dann kann man errechnen, um wieviel % der neue X-Wert z.B. oberhalb des unteren der beiden Tabellenwerte liegt. Nehmen wir an, dies sei 50%, damit liegt der neue Wert genau in der Mitte des Intervalls.
    Um den zugehörigen Y-Wert zu bekommen, sucht man die Y-Werte heraus, die zu dem Intervall gehören. Der neue Y-Wert muss jetzt auch 50% oberhalb des unteren Grenzwerts liegen.

    2. kann man versuchen, eine Formel für die Tabellenwerte zu finden. Wenn man Excel hat, geht das damit rel. einfach: Man erstellt eine Tabelle mit den X-/Y-Werten, macht daraus eine Grafik und läßt Excel dazu eine Formel errechnen. Hat bei mir z.B. bei IR-Distanzsensoren ganz gut geklappt.

    Gruß Dirk

  3. #3
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    27.02.2006
    Beiträge
    178
    hallo dirk,

    zu 1:, das ist klar.
    zu 2:, gute idee, aber eine kurve kann ich leider nicht drüberlegen, das hatte ich schon probiert. da passt einfach nichts - weder exponentiell noch logarithmisch usw.

    gibt es denn in Bascom keine möglichkeit, die interpolation für eine lookup tabelle automatisch durchführen zu lassen?

    oder gibt es andere, geeignetere möglichkeiten anstelle von lookup?

    holger

  4. #4
    Erfahrener Benutzer Robotik Einstein Avatar von Dirk
    Registriert seit
    30.04.2004
    Ort
    NRW
    Beiträge
    3.791

    Interpolation

    Hallo Holger,

    gibt es denn in Bascom keine möglichkeit, die interpolation für eine lookup tabelle automatisch durchführen zu lassen?
    ... doch, das ist doch die Möglichkeit 1. aus meinem Post!

    Hier 'mal ein bißchen Code als Beispiel:
    Code:
    Dim Temp As Byte
    Dim Ausgabe As Word , Ausgabe2 As Word
    Dim Volt As Single
    Dim S As String * 16
    Dim Summ As Word
    Dim Index As Word , Index2 As Word
    
    '50 ADC-Messungen der geglätteten PWM über 1 Zyklusdauer (max. 101ms):
      Summ = 0
      For Temp = 1 To 50
        Ausgabe = Irdistanz_lv                                  'ADC0: PWM (DC)
        Summ = Summ + Ausgabe
        Waitms 2                                                'alle 2ms
      Next Temp
      Summ = Summ / 50                                          '50 Messungen
      If Summ < 15 Then Summ = 15
    
    'Anfang der Tabellensuchschleife:
      Index = 1
      Do
        Ausgabe2 = Lookup(index , Adcdata)
        If Summ < Ausgabe2 Then
          Index2 = Index - 1
          Ausgabe = Lookup(index2 , Adcdata)
          Volt = Ausgabe2 - Ausgabe
          Volt = Volt / 10
          Exit Do
        End If
        Index = Index + 1
      Loop Until Index > 36
      If Index = 37 Then
        Volt = 3599
      Else
        Ausgabe2 = Summ - Ausgabe
        Volt = Volt * Ausgabe2
        Ausgabe = Index2 * 10
        Volt = Volt + Ausgabe
        Volt = Volt * 10
      End If
      Ausgabe = Volt
      Locate 4 , 1
      S = Str(ausgabe)
      S = Format(s , "000.0")
      Lcd "Dpw: " ; S ; " Grad"
    ')
      Waitms 500
    
    Loop
    
    'Programm Ende:
    
    End
    
    'ADC-Messwerte für 0..360 Grad Peilung in 10 Grad-Schritten:
    Adcdata:
    Data 15% , 30% , 44% , 57% , 71% , 84% , 98% , 110% , 123% , 135% , 147%
    Data 158% , 168% , 179% , 190% , 200% , 209% , 219% , 228% , 237% , 246%
    Data 255% , 264% , 272% , 280% , 288% , 297% , 305% , 312% , 319% , 327%
    Data 334% , 341% , 348% , 355% , 362% , 370%
    Da habe ich einen CMPS03 (I2C-Kompass-Modul) nach Glättung der PWM mit einem ADC ausgelesen. (Das ist im Prinzip völlig unnötig, da man ja den I2C-Wert hat! Ich wollte aber 'mal sehen, ob das geht.)
    Die Meßwerte stehen in der Tabelle Adcdata:
    Der Code findet auch die Zwischenwerte der Tabelle unter der Annahme, dass die Intervalle linear sind. Lass dich nicht durch merkwürdige Variablennamen irritieren, z.B. Volt (wird im Programm auch noch für eine Spannung verwendet).
    Es geht um die Suchschleife, wobei ich zugebe, dass sie nicht unbedingt selbsterklärend oder elegant ist. Jedenfalls gibt das Prog abhängig vom ADC-Wert (in Summ, Werte 15..370) die Himmelsrichtung als 0..3599 (dargestellt als 000.0 .. 359.9) aus.
    Vielleicht kannst du daraus ja eine eigene Routine für deine Anwendung basteln! Zum Testen der Routine (ohne ADC) kannst du z.B. den Teil mit der "Suchschleife" in eine for...next Schleife von 15 bis 370 (FOR Summ = 15 To 370) tun und dir die Ausgabe auf dem LCD ansehen.

    Gruß Dirk

  5. #5
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    27.02.2006
    Beiträge
    178
    danke, den code muss ich mir mal zu gemüte führen (bin bascom-anfänger!)
    ich meld mich dann wieder!

    gruß
    holger

  6. #6
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    27.02.2006
    Beiträge
    178
    also alles bestens, dein code hat mir sehr geholfen.
    ich konnte nachvollziehen, wie du vorgegangen bist und habe den code für meine zwecke angepasst und es klappt!

    holger

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •