diff --git a/bin/main.cpp b/bin/main.cpp index b4e9601..6b55657 100644 --- a/bin/main.cpp +++ b/bin/main.cpp @@ -18,6 +18,6 @@ auto main() -> int { std::vector s; for (auto p : r.m_data) s.push_back(p.m_value[0]); - // hack::log()(s); + hack::log()(s); } } diff --git a/bin/main.signal_generator.cpp b/bin/main.signal_generator.cpp index 31ba0f1..3f8c2e7 100644 --- a/bin/main.signal_generator.cpp +++ b/bin/main.signal_generator.cpp @@ -9,5 +9,8 @@ auto main() -> int auto s = generator.generate(st); hack::log()(st.get_name()); - hack::log()(s); + + std::vector ss; + for (auto p : s.m_data) ss.push_back(p.m_value[0]); + hack::log()(ss); } diff --git a/src/utils/signal_generator/signal_generator.cpp b/src/utils/signal_generator/signal_generator.cpp index 0a49584..f7045b8 100644 --- a/src/utils/signal_generator/signal_generator.cpp +++ b/src/utils/signal_generator/signal_generator.cpp @@ -4,41 +4,49 @@ namespace hr { - std::vector signal_generator::generate(signal_type st, NOISE noise) + result signal_generator::generate(signal_type st, NOISE noise) { - std::vector res; + std::vector tmp; switch (st.m_type) { case signal_type::type::SIN: - res = sin(noise); + tmp = sin(noise); break; case signal_type::type::SQUARE: - res = square(noise); + tmp = square(noise); break; case signal_type::type::TRIANGLE: - res = triangle(noise); + tmp = triangle(noise); break; case signal_type::type::SAW: - res = saw(noise); + tmp = saw(noise); break; case signal_type::type::SPEECH_LIKE: - res = speech_like(noise); + tmp = speech_like(noise); break; case signal_type::type::NOISE_ONLY: - res = noise_only(); + tmp = noise_only(); break; case signal_type::type::THREE_SINES: - res = three_sines(noise); + tmp = three_sines(noise); break; } + result res; + for (auto t : tmp) + { + result::bit b; + b.m_value.push_back(t); + res.set_bit(b); + } + return res; } std::vector signal_generator::sin(NOISE noise) { std::vector signal(m_params.m_samples); - for (int i = 0; i < m_params.m_samples; ++i) + for (std::size_t i = 0; i < m_params.m_samples; ++i) { float t = i * 0.02f; signal[i] = m_params.m_amplitude * std::sin(m_params.m_frequency * t * 2 * M_PI); @@ -57,7 +65,7 @@ namespace hr std::vector signal_generator::square(NOISE noise) { std::vector signal(m_params.m_samples); - for (int i = 0; i < m_params.m_samples; ++i) + for (std::size_t i = 0; i < m_params.m_samples; ++i) { float t = i * 0.02f; float phase = m_params.m_frequency * t * 2 * M_PI; @@ -77,7 +85,7 @@ namespace hr std::vector signal_generator::triangle(NOISE noise) { std::vector signal(m_params.m_samples); - for (int i = 0; i < m_params.m_samples; ++i) + for (std::size_t i = 0; i < m_params.m_samples; ++i) { float t = i * 0.02f; float phase = fmod(m_params.m_frequency * t, 1.0f); // 0..1 @@ -100,7 +108,7 @@ namespace hr std::vector signal_generator::saw(NOISE noise) { std::vector signal(m_params.m_samples); - for (int i = 0; i < m_params.m_samples; ++i) + for (std::size_t i = 0; i < m_params.m_samples; ++i) { float t = i * 0.02f; float phase = fmod(m_params.m_frequency * t, 1.0f); // 0..1 @@ -123,7 +131,7 @@ namespace hr std::vector signal(m_params.m_samples); std::uniform_real_distribution<> dist(-m_params.m_amplitude, m_params.m_amplitude); - for (int i = 0; i < m_params.m_samples; ++i) + for (std::size_t i = 0; i < m_params.m_samples; ++i) signal[i] = dist(m_gen); return signal; @@ -147,7 +155,7 @@ namespace hr // Модуляция амплитуды (как при произношении слогов) float envelope_freq = 2.0f; // частота слогов - for (int i = 0; i < m_params.m_samples; ++i) + for (std::size_t i = 0; i < m_params.m_samples; ++i) { float t = i * 0.02f; float value = 0.0f; @@ -201,7 +209,7 @@ namespace hr float a1 = m_params.m_amplitude; float a2 = m_params.m_amplitude * 0.5f; - for (int i = 0; i < m_params.m_samples; ++i) + for (std::size_t i = 0; i < m_params.m_samples; ++i) { float t = i * 0.02f; signal[i] = a1 * std::sin(2 * M_PI * f1 * t) + diff --git a/src/utils/signal_generator/signal_generator.hpp b/src/utils/signal_generator/signal_generator.hpp index e1ef7bf..d9a8036 100644 --- a/src/utils/signal_generator/signal_generator.hpp +++ b/src/utils/signal_generator/signal_generator.hpp @@ -2,6 +2,7 @@ #include #include "utils/workers/signal_type.hpp" +#include "utils/workers/result.hpp" // Генерирует простую синусоиду и др. полезности см. workers/signal_type.hpp namespace hr @@ -24,7 +25,8 @@ namespace hr public: signal_generator() : m_gen(12345) {} - std::vector generate(signal_type st, NOISE noise = NOISE::NO); + public: + result generate(signal_type st, NOISE noise = NOISE::NO); public: struct signal_params @@ -32,7 +34,7 @@ namespace hr float m_amplitude = 1.0f; // A float m_frequency = 1.0f; // 1/T float m_noise_level = 0.7f; - int m_samples = 1200; + std::size_t m_samples = 1200; } m_params; private: