diff --git a/TestProject/RNG/model/ConstantModel.h b/TestProject/RNG/model/ConstantModel.h new file mode 100644 index 0000000..b3a3a27 --- /dev/null +++ b/TestProject/RNG/model/ConstantModel.h @@ -0,0 +1,10 @@ +#pragma once +#include +#include +using json = nlohmann::json; + +struct ConstantModel : IModel { + float c; + ConstantModel(const json& params, float defaultVal) : c(defaultVal) {} + float evaluate(size_t) override { return c; } +}; diff --git a/TestProject/RNG/model/DriftModel.h b/TestProject/RNG/model/DriftModel.h new file mode 100644 index 0000000..85be56c --- /dev/null +++ b/TestProject/RNG/model/DriftModel.h @@ -0,0 +1,11 @@ +#pragma once +#include +#include +using json = nlohmann::json; + +struct DriftModel : IModel { + float base, drift_rate; + DriftModel(const json& params, float defaultVal) + : base(defaultVal), drift_rate(params.value("drift_rate", 0.0f)) {} + float evaluate(size_t t) override { return base + drift_rate * t; } +}; diff --git a/TestProject/RNG/model/LinearModel.h b/TestProject/RNG/model/LinearModel.h new file mode 100644 index 0000000..a9b305f --- /dev/null +++ b/TestProject/RNG/model/LinearModel.h @@ -0,0 +1,11 @@ +#pragma once +#include +#include +using json = nlohmann::json; + +struct LinearModel : IModel { + float k, b; + LinearModel(const json& params, float defaultVal) + : k(params.value("k", 0.0f)), b(defaultVal) {} + float evaluate(size_t t) override { return k * t + b; } +}; diff --git a/TestProject/RNG/model/NormalModel.h b/TestProject/RNG/model/NormalModel.h new file mode 100644 index 0000000..dbcb764 --- /dev/null +++ b/TestProject/RNG/model/NormalModel.h @@ -0,0 +1,12 @@ +#pragma once +#include +#include +#include +using json = nlohmann::json; + +struct NormalModel : IModel { + float mean, sigma; + NormalModel(const json& params, float defaultVal) + : mean(defaultVal), sigma(params.value("sigma", 0.01f)) {} + float evaluate(size_t) override { return RandT::GuassRand(mean, sigma); } +}; diff --git a/TestProject/RNG/model/SineModel.h b/TestProject/RNG/model/SineModel.h new file mode 100644 index 0000000..f765b15 --- /dev/null +++ b/TestProject/RNG/model/SineModel.h @@ -0,0 +1,13 @@ +#pragma once +#include +#include +#include +using json = nlohmann::json; + +struct SineModel : IModel { + float A, omega, phi, offset; + SineModel(const json& params, float defaultVal) + : A(params.value("A", 1.0f)), omega(params.value("omega", 1.0f)), + phi(params.value("phi", 0.0f)), offset(defaultVal) {} + float evaluate(size_t t) override { return A * sinf(omega * t + phi) + offset; } +}; diff --git a/TestProject/RNG/model/SpikeModel.h b/TestProject/RNG/model/SpikeModel.h new file mode 100644 index 0000000..00ad9a8 --- /dev/null +++ b/TestProject/RNG/model/SpikeModel.h @@ -0,0 +1,19 @@ +#pragma once +#include +#include +#include +using json = nlohmann::json; + +struct SpikeModel : IModel { + float base, amplitude, probability; + SpikeModel(const json& params, float defaultVal) + : base(defaultVal) + , amplitude(params.value("amplitude", 1.0f)) + , probability(params.value("probability", 0.01f)) {} + float evaluate(size_t) override { + if ((double)rand() / RAND_MAX < probability) { + return base + ((rand() % 2) ? amplitude : -amplitude); + } + return base; + } +}; diff --git a/TestProject/RNG/model/UniformModel.h b/TestProject/RNG/model/UniformModel.h new file mode 100644 index 0000000..ce569af --- /dev/null +++ b/TestProject/RNG/model/UniformModel.h @@ -0,0 +1,12 @@ +#pragma once +#include +#include +#include +using json = nlohmann::json; + +struct UniformModel : IModel { + float center, delta; + UniformModel(const json& params, float defaultVal) + : center(defaultVal), delta(params.value("delta", 0.01f)) {} + float evaluate(size_t) override { return RandT::RandT(center - delta, center + delta); } +};