Matematické Fórum

Nevíte-li si rady s jakýmkoliv matematickým problémem, toto místo je pro vás jako dělané.

Nástěnka
22. 8. 2021 (L) Přecházíme zpět na doménu forum.matweb.cz!
04.11.2016 (Jel.) Čtete, prosím, před vložení dotazu, děkuji!
23.10.2013 (Jel.) Zkuste před zadáním dotazu použít některý z online-nástrojů, konzultovat použití můžete v sekci CAS.

Nejste přihlášen(a). Přihlásit

#1 19. 01. 2019 20:57

Simonik
Zelenáč
Příspěvky: 3
Reputace:   
 

Kalmanův filtr

Ahoj,
v modwlu rakety je použito barometrické čidlo na měření výšky rakety. Filtrace je provedena :
//Call KalmanInit() once. 

//KalmanInit() - Call before any iterations of KalmanCalc()
void KalmanInit()
{
  kalman_q=4.0001;  //filter parameters, you can play around with them
  kalman_r=.20001;  // but these values appear to be fairly optimal

  kalman_x = 0;
  kalman_p = 0;
  kalman_x_temp = 0;
  kalman_p_temp = 0;

  kalman_x_last = 0;
  kalman_p_last = 0;

}

//KalmanCalc() - Calculates new Kalman values from float value "altitude"
// This will be the ASL altitude during the flight, and the AGL altitude during dumps
float KalmanCalc (float altitude)
{

  //Predict kalman_x_temp, kalman_p_temp
  kalman_x_temp = kalman_x_last;
  kalman_p_temp = kalman_p_last + kalman_r;

  //Update kalman values
  kalman_k = (f_1/(kalman_p_temp + kalman_q)) * kalman_p_temp;
  kalman_x = kalman_x_temp + (kalman_k * (altitude - kalman_x_temp));
  kalman_p = (f_1 - kalman_k) * kalman_p_temp;

  //Save this state for next time
  kalman_x_last = kalman_x;
  kalman_p_last = kalman_p;

  //Assign current Kalman filtered altitude to working variables
  //KAlt = kalman_x; //FLOAT Kalman-filtered altitude value
  return kalman_x;


Podle mě to žádný Kalmanův filtr není. Udělal jsem si tabulku v Excelu. Ještě než raketa vystartuje, tak se se kalman_k ustálí na 0,2 a už se nemění. To je pak jak exponenciální klouzavý průměr 5-ti hodnot.
Nebo se pletu?

Offline

 

#2 20. 01. 2019 10:53

MichalAld
Moderátor
Příspěvky: 5361
Reputace:   130 
 

Re: Kalmanův filtr

No, otázka se týká toho, co tenhle kus kódu přesně dělá, nebo zdali to co dělá by mohl být Kalmanův filtr ?

Tu první část nemám moc chuti luštit, to si můžeš udělat i sám (a napsat to sem jako nějaký jednoduchý a srozumitelný vzorec, jako třeba

$x_{(i+1)} = ax_{(i)}+bu_{(i)}$

Pak se klidně zamyslím nad tím, jestli by to nemohl být i kalmanův filtr.

Netuším, co je to ten tvůj "exponenciální klouzavý průměr", ale obyčejný klouzavý průměr je jeden z mnoha možných FIR filtrů - a to tenhle kód určitě není, na to tam není dost proměnných. Pokud by to měl být klouzavý průměr s délkou 5, muselo by tam být někde uloženo 5 po sobě jdoucích hodnot.

Kalmanův filtr je naproti tomu IIR filtr, a v principu by mohl být i řádu 1. Takže úplně vyloučit to nelze.

Na druhou stranu - IIR filtrů lze taktéž navrhnout nekonečné množství, které se liší jen řádem a volbou konstant, a jen jeden z nich je Kalmanův - protože ten je v jistém smyslu optimální. Jinak řečeno - Kalmanův filtr je hlavně způsob, jak určit řád a koeficienty IIR filtru - tak aby byl (v tom zmíněném smyslu) optimální. Když optimální není, není to Kalmanův filtr.

K tomu, abychom jej navrhli potřebujeme znát popis originálního systému a parametry náhodných signálů, co do toho vstupují. Pokud je neznáme, těkžo poznáme, zdali je navržený filtr zrovna Kalmanův, nebo nějaký jiný.

Pokud se ti podaří z toho kódu odvodit srozumitelný matematický popis toho, co dělá, můžu aspoň kouknout, zdali to vypadá tak, jak se Kalmanův filtr (v knížkách) popisuje.

Offline

 

#3 20. 01. 2019 16:14

Simonik
Zelenáč
Příspěvky: 3
Reputace:   
 

Re: Kalmanův filtr

↑ MichalAld:
Díky za odpověď. Pro exponenciální klouzavý průměr si nemusím pamatovat data :

Y = (Y * (N-1) + X) / N

Alespoň podle http://petr-kubac.blog.cz/1308/matemati … avy-prumer kde to krásně ukázal Petr Kubac.

Co se týká kalmana, tak jsem si myslel, že základem je model a odhadnutí hodnoty a na základě odhadu a nasměřené hodnoty se mění kalmanovo zesílení. To v tom kodu není. Kod jsem nechtěl zjednodušovat, abych v tom neudělal chybu.

Nějak "lidsky" ten Kalmanův filtr nikde popsán není.

Zkusil by to někdo, prosím, ten kod ověřit a říct svůj názor?

Díky

Offline

 

#4 20. 01. 2019 17:02 — Editoval MichalAld (20. 01. 2019 17:02)

MichalAld
Moderátor
Příspěvky: 5361
Reputace:   130 
 

Re: Kalmanův filtr

Bylo by extrémě vhodné, kdyby jsi používal nějaké věrohodné zdroje pro získávání, a zejména dokládání svých informací.

Simonik napsal(a):

Co se týká kalmana, tak jsem si myslel, že základem je model a odhadnutí hodnoty a na základě odhadu a nasměřené hodnoty se mění kalmanovo zesílení.

Né, nemění se zesílení, jen se ta odchylka skutečné hodnoty od predikované připočte jako korekce do toho modelu. Vynásobená vhodnou maticí koeficientů - a optimální volba těch koeficientů - to je právě to, co nazýváme Kalmanovým filtrem.


Simonik napsal(a):

Nějak "lidsky" ten Kalmanův filtr nikde popsán není.

Však to taky není věc pro "lidi"... hi

Simonik napsal(a):

To v tom kodu není. Kod jsem nechtěl zjednodušovat, abych v tom neudělal chybu.
Zkusil by to někdo, prosím, ten kod ověřit a říct svůj názor?

Fórum není žádná "charitativní poradna" ... když nemáš chuť něco zkusit sám, proč by to za tebe měl dělat někdo jiný ?

Offline

 

#5 20. 01. 2019 18:54

Simonik
Zelenáč
Příspěvky: 3
Reputace:   
 

Re: Kalmanův filtr

.Fórum není žádná "charitativní poradna" ... když nemáš chuť něco zkusit sám, proč by to za tebe měl dělat někdo jiný ?

Vždyť jsem psal, že jsem si podle toho kodu udělal Excelovskou tabulku a došel jsem k nějakému závěru. Ten potřebuji potvrdit anebo vyvrátit či vysvětlit. Kod nechci zjednodušovat, abych tam nezanesl nějakou chybu. Howg.

Offline

 

Zápatí

Powered by PunBB
© Copyright 2002–2005 Rickard Andersson