maked return result from signal generator

This commit is contained in:
2026-02-18 19:46:53 +03:00
parent b3151cad76
commit 0b9c830f58
4 changed files with 33 additions and 20 deletions

View File

@@ -4,41 +4,49 @@
namespace hr
{
std::vector<float> signal_generator::generate(signal_type st, NOISE noise)
result signal_generator::generate(signal_type st, NOISE noise)
{
std::vector<float> res;
std::vector<float> 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<float> signal_generator::sin(NOISE noise)
{
std::vector<float> 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<float> signal_generator::square(NOISE noise)
{
std::vector<float> 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<float> signal_generator::triangle(NOISE noise)
{
std::vector<float> 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<float> signal_generator::saw(NOISE noise)
{
std::vector<float> 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<float> 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) +

View File

@@ -2,6 +2,7 @@
#include <random>
#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<float> 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: