FhSim  3.1.0
Marine systems simulation
Loading...
Searching...
No Matches
Samplifier.h
1#ifndef SAMPLIFIER_H
2#define SAMPLIFIER_H
3
4#include <sfh/util/CircularBuffer.h>
5#include <string>
6
7#include <fhsim/simobject/SimObject.h>
8#include <memory>
9#include <mutex>
10#include <random>
11#include <vector>
12
94class Samplifier : public SimObject
95{
96 public:
97 Samplifier(const std::string& simObjectName, ISimObjectCreator* const creator);
98 ~Samplifier() { };
99
100 virtual void OdeFcn(const double T, const double* const X, double* const XDot) const override;
101 virtual void AcceptedStep(const double T, const double* const X) override;
102 virtual void InitialConditionSetup(const double T, const double* const currentIC, double* const updatedIC, ISimObjectCreator* const creator);
103 virtual void FinalSetup(const double T, const double* const X, ISimObjectCreator* const creator) { m_IsSettingUp = false; };
104 const double* Output(const double T, const double* const X, const int Index);
105
106
107 protected:
108 std::unique_ptr<ISignalPort*[]> m_Input_i;
109 void SetOutputPortValues(const double T, const double* const X) const;
110 ICommonComputation* m_SetOutputPortValues;
111
112 private:
114 double NextSampleInstant(const int PortNo, const int PortIndex, const double T);
116 static double TimeTolerance(const double T);
117 bool isOutlier(double probability);
118 bool fiftyFifty();
119 double getNoise(const int PortNo, const int PortIndex);
120
121 bool m_IsSettingUp;
122 int m_PortWidth, m_seed, m_DummyIndex;
123 std::unique_ptr<int[]> m_PortSize_i;
124
125 std::vector<std::unique_ptr<double[]>> m_noiseBias;
126 std::vector<std::unique_ptr<double[]>> m_noiseStdDev;
127 std::vector<std::unique_ptr<double[]>> m_samplingPeriod;
128 std::vector<std::unique_ptr<double[]>> m_signalSampleTime;
129 std::vector<std::unique_ptr<double[]>> m_firstSampleTime;
130 std::vector<std::unique_ptr<double[]>> m_outlierProbability;
131 std::vector<std::unique_ptr<double[]>> m_lossProbability;
132 std::vector<std::unique_ptr<int[]>> m_lostSamples;
133 std::vector<std::unique_ptr<int[]>> m_avgLostSamples;
134 std::vector<std::unique_ptr<double[]>> m_timeDelay;
135 mutable std::vector<std::unique_ptr<double[]>> m_WriteBuffer;
136 mutable std::vector<std::unique_ptr<double[]>> m_ReadBuffer;
137
138 mutable std::mutex m_SignalResource;
139 std::vector<std::unique_ptr<CircularBuffer<std::pair<double, double>, 1024>[]>> m_measurementBuffer;
140
141 std::mt19937 m_generator;
142 std::uniform_real_distribution<double> m_uniform;
143 std::vector<std::unique_ptr<std::normal_distribution<double>[]>> m_normals;
144};
145
146
147#endif // include guard
Definition Samplifier.h:95