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
🔒 23. 3. 2019 Přešli jsme na HTTPS. Prosíme o kontrolu funkčnosti fóra.
!! 17.06.2018 (Jel.) Khanova škola zve nadšence ke spolupráci na překladech návodů pro učitele a rodiče.
! 04.11.2016 (Jel.) Čtete, prosím, před vložení dotazu, děkuji!
17.01.2016 (Jel.) Rok 2016 s novými a novějšími krystaly od kolegy Pavla!
17.01.2016 (Jel.) Nabídka knih z oborů matematiky, fyziky, chemie
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: 2131
Reputace:   67 
 

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: 2131
Reputace:   67 
 

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