Hallo Zusammen,
derzeit versuche ich mich an einem kalman Filter.
Ich beginne mit einer einfachen Implementation und habe
mir aus diesem Grunde eine kleine Excel Tabelle erstellt,
wo ich die entsprechenden Werte eingeben kann.
Hierbei will ich zuerst meine Temperatursensoren KTY81-110 von
der "simplen" Mittelwertberechnung auf einen Kalman Filter umsetzen.
Mit Floating Point Mathematik scheint das laut Tabelle schon ganz
gut zu klappen. Die genauen Parameter habe ich noch nicht gefunden (Optimiert).
Nur soll die Routine im Atmega8 nicht auf Float Mathematik arbeiten,
sondern auf Fix Point Mathematik. Und hier habe ich meine ersten Problem.
Meine Routine arbeitet nicht so wie ich es gerne hätte.
Floating Point Mathe
Fix Point Mathe (Versuch der schief ging)Code:Public Sub CalculateSheet2Formular() Dim nNoise As Double Dim nEstimation As Double Dim nLastEstimation As Double Dim nPresition As Double Dim nLastPresition As Double Dim nKalmanKoeffizent As Double Dim nValue As Double Dim nADC As Long Dim nTemperatur As Long Dim objWorkbork As Workbook Dim i As Integer Set objWorkbork = ThisWorkbook nNoise = 0.2 nLastEstimation = 0 nPresition = 1 For i = 2 To 22 nADC = CDbl(objWorkbork.Sheets(2).Cells(i, 1).Value) nADC = nADC * 64 ' (<< 7) in ASM nTemperatur = 82 + nADC nTemperatur = nTemperatur / 101 nTemperatur = nTemperatur - 150 objWorkbork.Sheets(2).Cells(i, 2).Value = nTemperatur nValue = nTemperatur nLastPresition = nPresition nKalmanKoeffizent = nPresition / (nPresition + nNoise) nEstimation = nLastEstimation + nKalmanKoeffizent * (nValue - nLastEstimation) nPresition = (1 - nKalmanKoeffizent) * nPresition nLastEstimation = nEstimation objWorkbork.Sheets(2).Cells(i, 3).Value = nKalmanKoeffizent objWorkbork.Sheets(2).Cells(i, 4).Value = nPresition objWorkbork.Sheets(2).Cells(i, 5).Value = i - 1 objWorkbork.Sheets(2).Cells(i, 6).Value = nEstimation Next i End Sub
Hat jemand eine Hilfestellung ?Code:Public Sub CalculateSheet3Formular() Dim nNoise As Long Dim nEstimation As Long Dim nLastEstimation As Long Dim nPresition As Long Dim nLastPresition As Long Dim nKalmanKoeffizent As Long Dim nValue As Long Dim nADC As Long Dim nTemperatur As Long Dim objWorkbork As Workbook Dim i As Integer Set objWorkbork = ThisWorkbook nNoise = 2 nLastEstimation = 10 nPresition = 16 For i = 2 To 22 nADC = CDbl(objWorkbork.Sheets(3).Cells(i, 1).Value) nADC = nADC * 64 ' (<< 7) in ASM nTemperatur = 82 + nADC nTemperatur = nTemperatur / 101 nTemperatur = nTemperatur - 150 objWorkbork.Sheets(3).Cells(i, 2).Value = nTemperatur nValue = nTemperatur nLastPresition = nPresition nKalmanKoeffizent = nPresition * 100 / (nPresition + nNoise) nEstimation = nLastEstimation + (nKalmanKoeffizent * (nValue - nLastEstimation) / 100) nPresition = (100 - nKalmanKoeffizent) * nPresition nLastEstimation = nEstimation objWorkbork.Sheets(3).Cells(i, 3).Value = nKalmanKoeffizent objWorkbork.Sheets(3).Cells(i, 4).Value = nPresition objWorkbork.Sheets(3).Cells(i, 5).Value = i - 1 objWorkbork.Sheets(3).Cells(i, 6).Value = nEstimation Next i End Sub
Wie ist generell der beste Ansatz eine Floating Point Mathe in Fix Point zu wandeln.
Ich dachte bis jetzt immer, da Ansatz wäre den Zahlenbereich nach oben zu schieben,
die Berechnungen durchzuführen und danach den Bereich wieder anpassen.
Viele Gruess
R.







Zitieren

Lesezeichen