root/applications/pmsm/pmsm_estim.cpp @ 666

Revision 666, 1.6 kB (checked in by smidl, 15 years ago)

pmsm details

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_add ( *L );
33        string nic="";
34        for (int i=0; i<nE; i++){
35                Es(i)->log_add(*L,nic); // estimate
36        }
37        L->init();
38
39        vec dt=zeros ( pDS->_drv()._dsize() );   //data variable
40        Array<datalink*> Dls(nE); 
41        for (int i=0; i<nE; i++){
42                Dls(i)=new datalink( Es(i)->_drv(),pDS->_drv() ); //datalink between a datasource and estimator
43        }
44       
45        // Main cycle
46        for ( int tK=1;tK<Ndat;tK++ ) {
47                // Data Source
48                pDS->step();                                                    // simulator step
49                pDS->getdata ( dt );                                    // read data
50                pDS->logit ( *L );
51               
52                // Estimators
53                for (int i=0; i<nE; i++){
54                        Es(i)->bayes ( Dls(i)->pushdown ( dt ) );               // update estimates
55
56                        Es(i)->logit (*L);
57                }
58                // Regulators
59                L->step();
60        }
61
62        L->finalize();
63
64        for (int i=0; i<nE; i++){
65                delete Dls(i);
66        }
67        return 0;
68}
Note: See TracBrowser for help on using the browser.