32 lines
723 B
C++
32 lines
723 B
C++
#pragma once
|
|
|
|
/**
|
|
* @file oscillation.hpp
|
|
* @brief FFT-based oscillation detection (Phase 25).
|
|
*/
|
|
|
|
#include <vector>
|
|
|
|
namespace fces {
|
|
|
|
class OscillationDetector {
|
|
public:
|
|
static constexpr int WINDOW_SIZE = 64;
|
|
static constexpr float POWER_THRESHOLD = 0.5f;
|
|
static constexpr int MIN_PERIOD = 4;
|
|
static constexpr int MAX_PERIOD = 16;
|
|
|
|
void update(float loss);
|
|
bool detect() const;
|
|
float get_score() const;
|
|
float get_variance_50() const;
|
|
void reset();
|
|
|
|
private:
|
|
std::vector<float> loss_history_;
|
|
static std::vector<float> detrend(const std::vector<float>& signal);
|
|
static std::vector<float> compute_power_spectrum(const std::vector<float>& signal);
|
|
};
|
|
|
|
} // namespace fces
|