FhSim  3.1.0
Marine systems simulation
Loading...
Searching...
No Matches
FreqDomainIdent.h
1#ifndef _CREQDOMAIN_IDENT_H_
2#define _CREQDOMAIN_IDENT_H_
3
4#include <complex>
5#include <vector>
6
7#include <Eigen/Eigen>
8
9using namespace Eigen;
10
11namespace Ship{
12 class PotentialData;
13
15 {
16 public:
17 enum IDENTIFICATION_TYPE
18 {
19 INVERSE_FREQUENCY,
20 VECTOR_FITTING
21 };
22
24 {
25 Matrix< double, Dynamic, Dynamic > num;
26 Matrix< double, Dynamic, Dynamic > den;
27 };
28
30 {
31 Matrix< double, Dynamic, Dynamic > A;
32 Matrix< double, Dynamic, Dynamic > B;
33 Matrix< double, Dynamic, Dynamic > C;
34 Matrix< double, Dynamic, Dynamic > D;
35 };
36
37
38 FreqDomainIdent::IDENTIFICATION_TYPE IdentificationMethod() const { return Type; }
39 void IdentificationMethod(FreqDomainIdent::IDENTIFICATION_TYPE val) { Type = val; }
40
41 double GetAinf( int DOF1, int DOF2, unsigned int SpeedNo=0)
42 {
43 return Ainf[SpeedNo](DOF1,DOF2);
44 }
45
46 void SetPotentialData( Ship::PotentialData *Data );
47
48 Polynomial IdentifyTF(unsigned int DOF1, unsigned int DOF2, unsigned int SpeedNo=0, bool UseHanWindow=false);
49 StateSpace IdentifySS(unsigned int DOF1, unsigned int DOF2, unsigned int SpeedNo=0, bool UseHanWindow=false);
50
51 private:
52 static const std::complex<double> j;
53
54 //static Matrix< std::complex<double>, Dynamic, Dynamic > Poly( Matrix< std::complex<double>, Dynamic, Dynamic > &coeff );
55
56 static Matrix< std::complex<double>, 1, Dynamic > PolyVal( const Matrix< double, Dynamic, Dynamic > &coeff, const Matrix< std::complex<double>, 1, Dynamic > &val);
57
58 //static Matrix< std::complex<double>, Dynamic , Dynamic > Roots( Matrix< double, Dynamic, Dynamic > &coeff);
59
60 //static Matrix< std::complex<double>, 1, Dynamic> HannWindow( unsigned int N );
61
62 //static Matrix<double, 1, Dynamic> Interp1D( Matrix<double, 1, Dynamic> &x1, Matrix<double, 1, Dynamic> &val, const Matrix<double, 1, Dynamic> &x2 );
63
64 static Matrix< std::complex<double>, 1, Dynamic > FreqResp( const Polynomial &p, const Matrix< std::complex<double>, 1, Dynamic> &freqs );
65
66 //static Polynomial InvFreq( const Matrix< std::complex<double>, 1, Dynamic > &FreqRes, const Matrix<double, 1, Dynamic > &Freq, unsigned int nNum, unsigned int nDen, Matrix< std::complex<double>, 1, Dynamic > Weight );
67
68 static StateSpace Tf2SS( const Polynomial& poly );
69
70 //static Polynomial InverseFrequency( const Matrix< std::complex<double>,1,Dynamic> &K, const Matrix< double,1,Dynamic>& w, unsigned int order_num, unsigned int order_den, bool DisciriminateEdges=false);
71 static Polynomial VectorFitting( Matrix< std::complex<double>,1, Dynamic> K, Matrix<double,1, Dynamic> w, int i, int dummy, bool UseHanWindow );
72 IDENTIFICATION_TYPE Type;
73 PotentialData *data = nullptr;
74 std::vector<Matrix<double,6, 6> > Ainf;
75 };
76}
77
78#endif
Definition FreqDomainIdent.h:15
Definition PotentialData.h:30
Simple waypoint object.
Definition CableAttach.h:58
@ Polynomial
Single canonical (monomial) polynomial through all points.
Definition FreqDomainIdent.h:24
Definition FreqDomainIdent.h:30