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
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
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
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
↑ 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
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
.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