root/applications/pmsm/pmsm_estim.cpp @ 676

Revision 676, 1.7 kB (checked in by smidl, 15 years ago)

logger refactoring

Line 
1
2/*!
3\file
4\brief Multi-Estimator (developped for PMSM)
5
6
7 */
8
9#include "base/user_info.h"
10#include "base/loggers.h"
11#include "estim/kalman.h"
12#include "pmsmDS.h"
13#include "filters.h"
14#include "base/datasources.h"
15
16
17using namespace bdm;
18int main ( int argc, char* argv[] ) {
19        const char *fname;
20        if ( argc>1 ) {fname = argv[1]; }
21        else { cout << "Missing configuration file.\n Usage: \n $> estimator config_file.cfg"<<endl; abort(); }
22        UIFile F ( fname );
23
24        shared_ptr<logger> L = UI::build <logger>( F, "logger" );
25        shared_ptr<DS>  pDS = UI::build<DS> ( F, "system" );
26        Array<shared_ptr<BM> > Es;                      // array of estimators
27        UI::get( Es, F, "estimator" );
28        int nE = Es.length();   //number of estimators
29        int Ndat;                               //number of data records
30        F.lookupValue ( "experiment.ndat",Ndat );
31               
32        pDS->log_register ( *L, "true" );
33        string Ename;
34        for (int i=0; i<nE; i++){
35                try {
36                        UI::get ( Ename, F.getRoot()["estimators"][i], "name",UI::optional );
37                } catch ( ...) {
38                        Ename="Est"+num2str ( i );
39                }
40                Es(i)->log_register(*L,Ename); // estimate
41        }
42        L->init();
43
44        vec dt=zeros ( pDS->_drv()._dsize() );   //data variable
45        Array<datalink*> Dls(nE); 
46        for (int i=0; i<nE; i++){
47                Dls(i)=new datalink( Es(i)->_drv(),pDS->_drv() ); //datalink between a datasource and estimator
48        }
49       
50        // Main cycle
51        for ( int tK=1;tK<Ndat;tK++ ) {
52                // Data Source
53                pDS->step();                                                    // simulator step
54                pDS->getdata ( dt );                                    // read data
55                pDS->log_write ();
56               
57                // Estimators
58                for (int i=0; i<nE; i++){
59                        Es(i)->bayes ( Dls(i)->pushdown ( dt ) );               // update estimates
60
61                        Es(i)->log_write ();
62                }
63                // Regulators
64                L->step();
65        }
66
67        L->finalize();
68
69        for (int i=0; i<nE; i++){
70                delete Dls(i);
71        }
72        return 0;
73}
Note: See TracBrowser for help on using the browser.