diff --git a/bin/main.cpp b/bin/main.cpp index 7b51141..63f8006 100644 --- a/bin/main.cpp +++ b/bin/main.cpp @@ -13,6 +13,7 @@ auto main() -> int auto r = hr::run(setup); hack::log()("grad:", r.m_grad); + hack::log()("min:", r.m_min, "max:", r.m_max); if (!r.empty()) { diff --git a/src/plugins/fft/fft.cpp b/src/plugins/fft/fft.cpp index 3db8f16..6e48cd2 100644 --- a/src/plugins/fft/fft.cpp +++ b/src/plugins/fft/fft.cpp @@ -35,10 +35,11 @@ namespace hr::plugins for (size_t i = 0; i < m_frames; ++i) { // Конвертация в децибелы - auto a = fft.m_norm[i]; - if (a > 0.000001f) a = 20.0f * log10(a); - else a = -120.0f; // Минимальное значение для логарифмической шкалы - b.m_values.push_back(a); + auto v = fft.m_norm[i]; + if (v > 0.000001f) v = 20.0f * log10(v); + else v = -120.0f; // Минимальное значение для логарифмической шкалы + b.m_values.push_back(v); + m_result.set_min_max(v); } m_result.set_bit(0, b); } diff --git a/src/plugins/magnitude/magnitude.cpp b/src/plugins/magnitude/magnitude.cpp index a314f7d..101427d 100644 --- a/src/plugins/magnitude/magnitude.cpp +++ b/src/plugins/magnitude/magnitude.cpp @@ -20,15 +20,19 @@ namespace hr::plugins void magnitude::process(cvec_t& fft, fvec_t& base, real_time timestamp) { std::size_t frames = fft.size(); - base_t m = 0.f; - for (std::size_t i = 0; i < frames; ++i) m += fft.m_norm[i]; - m /= frames; + base_t v = 0.f; + for (std::size_t i = 0; i < frames; ++i) v += fft.m_norm[i]; + v /= frames; + + m_result.m_max = hack::math::max(m_result.m_max, v); + m_result.m_min = hack::math::min(m_result.m_min, v); result::bit b; - b.m_value = m; + b.m_value = v; b.m_duration = timestamp; m_result.set_bit(0, b); + m_result.set_min_max(v); } result magnitude::get_result() diff --git a/src/plugins/raw_data/raw_data.cpp b/src/plugins/raw_data/raw_data.cpp index 1f2ff1f..356798b 100644 --- a/src/plugins/raw_data/raw_data.cpp +++ b/src/plugins/raw_data/raw_data.cpp @@ -25,6 +25,7 @@ namespace hr::plugins b.m_value = v; b.m_duration = timestamp; m_result.set_bit(0, b); + m_result.set_min_max(v); } } diff --git a/src/utils/workers/result.hpp b/src/utils/workers/result.hpp index d5d4a4e..9fbf6d0 100644 --- a/src/utils/workers/result.hpp +++ b/src/utils/workers/result.hpp @@ -1,6 +1,7 @@ #pragma once #include +#include #include #include "utils/real_time/real_time.hpp" #include "utils/using.hpp" @@ -55,6 +56,18 @@ namespace hr // Второй вектор - данные для каждой линии, т.е. именно сими биты std::vector> m_data; + // максимальные и минимальные элементы в принципе в данном расчете + // в основном нужны для графической реализации + // соответственно метод ниже в попощь + base_t m_max = std::numeric_limits::min(); + base_t m_min = std::numeric_limits::max(); + void set_min_max(base_t v) + { + m_max = hack::math::max(m_max, v); + m_min = hack::math::min(m_min, v); + } + + // иногда нужна градуировка одна и тажа для всех бинов std::vector m_grad; };