maked return result from signal generator
This commit is contained in:
@@ -18,6 +18,6 @@ auto main() -> int
|
|||||||
{
|
{
|
||||||
std::vector<float> s;
|
std::vector<float> s;
|
||||||
for (auto p : r.m_data) s.push_back(p.m_value[0]);
|
for (auto p : r.m_data) s.push_back(p.m_value[0]);
|
||||||
// hack::log()(s);
|
hack::log()(s);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -9,5 +9,8 @@ auto main() -> int
|
|||||||
|
|
||||||
auto s = generator.generate(st);
|
auto s = generator.generate(st);
|
||||||
hack::log()(st.get_name());
|
hack::log()(st.get_name());
|
||||||
hack::log()(s);
|
|
||||||
|
std::vector<float> ss;
|
||||||
|
for (auto p : s.m_data) ss.push_back(p.m_value[0]);
|
||||||
|
hack::log()(ss);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -4,41 +4,49 @@
|
|||||||
|
|
||||||
namespace hr
|
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)
|
switch (st.m_type)
|
||||||
{
|
{
|
||||||
case signal_type::type::SIN:
|
case signal_type::type::SIN:
|
||||||
res = sin(noise);
|
tmp = sin(noise);
|
||||||
break;
|
break;
|
||||||
case signal_type::type::SQUARE:
|
case signal_type::type::SQUARE:
|
||||||
res = square(noise);
|
tmp = square(noise);
|
||||||
break;
|
break;
|
||||||
case signal_type::type::TRIANGLE:
|
case signal_type::type::TRIANGLE:
|
||||||
res = triangle(noise);
|
tmp = triangle(noise);
|
||||||
break;
|
break;
|
||||||
case signal_type::type::SAW:
|
case signal_type::type::SAW:
|
||||||
res = saw(noise);
|
tmp = saw(noise);
|
||||||
break;
|
break;
|
||||||
case signal_type::type::SPEECH_LIKE:
|
case signal_type::type::SPEECH_LIKE:
|
||||||
res = speech_like(noise);
|
tmp = speech_like(noise);
|
||||||
break;
|
break;
|
||||||
case signal_type::type::NOISE_ONLY:
|
case signal_type::type::NOISE_ONLY:
|
||||||
res = noise_only();
|
tmp = noise_only();
|
||||||
break;
|
break;
|
||||||
case signal_type::type::THREE_SINES:
|
case signal_type::type::THREE_SINES:
|
||||||
res = three_sines(noise);
|
tmp = three_sines(noise);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
result res;
|
||||||
|
for (auto t : tmp)
|
||||||
|
{
|
||||||
|
result::bit b;
|
||||||
|
b.m_value.push_back(t);
|
||||||
|
res.set_bit(b);
|
||||||
|
}
|
||||||
|
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
std::vector<float> signal_generator::sin(NOISE noise)
|
std::vector<float> signal_generator::sin(NOISE noise)
|
||||||
{
|
{
|
||||||
std::vector<float> signal(m_params.m_samples);
|
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 t = i * 0.02f;
|
||||||
signal[i] = m_params.m_amplitude * std::sin(m_params.m_frequency * t * 2 * M_PI);
|
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_generator::square(NOISE noise)
|
||||||
{
|
{
|
||||||
std::vector<float> signal(m_params.m_samples);
|
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 t = i * 0.02f;
|
||||||
float phase = m_params.m_frequency * t * 2 * M_PI;
|
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_generator::triangle(NOISE noise)
|
||||||
{
|
{
|
||||||
std::vector<float> signal(m_params.m_samples);
|
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 t = i * 0.02f;
|
||||||
float phase = fmod(m_params.m_frequency * t, 1.0f); // 0..1
|
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_generator::saw(NOISE noise)
|
||||||
{
|
{
|
||||||
std::vector<float> signal(m_params.m_samples);
|
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 t = i * 0.02f;
|
||||||
float phase = fmod(m_params.m_frequency * t, 1.0f); // 0..1
|
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::vector<float> signal(m_params.m_samples);
|
||||||
std::uniform_real_distribution<> dist(-m_params.m_amplitude, m_params.m_amplitude);
|
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);
|
signal[i] = dist(m_gen);
|
||||||
|
|
||||||
return signal;
|
return signal;
|
||||||
@@ -147,7 +155,7 @@ namespace hr
|
|||||||
// Модуляция амплитуды (как при произношении слогов)
|
// Модуляция амплитуды (как при произношении слогов)
|
||||||
float envelope_freq = 2.0f; // частота слогов
|
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 t = i * 0.02f;
|
||||||
float value = 0.0f;
|
float value = 0.0f;
|
||||||
@@ -201,7 +209,7 @@ namespace hr
|
|||||||
float a1 = m_params.m_amplitude;
|
float a1 = m_params.m_amplitude;
|
||||||
float a2 = m_params.m_amplitude * 0.5f;
|
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;
|
float t = i * 0.02f;
|
||||||
signal[i] = a1 * std::sin(2 * M_PI * f1 * t) +
|
signal[i] = a1 * std::sin(2 * M_PI * f1 * t) +
|
||||||
|
|||||||
@@ -2,6 +2,7 @@
|
|||||||
|
|
||||||
#include <random>
|
#include <random>
|
||||||
#include "utils/workers/signal_type.hpp"
|
#include "utils/workers/signal_type.hpp"
|
||||||
|
#include "utils/workers/result.hpp"
|
||||||
|
|
||||||
// Генерирует простую синусоиду и др. полезности см. workers/signal_type.hpp
|
// Генерирует простую синусоиду и др. полезности см. workers/signal_type.hpp
|
||||||
namespace hr
|
namespace hr
|
||||||
@@ -24,7 +25,8 @@ namespace hr
|
|||||||
public:
|
public:
|
||||||
signal_generator() : m_gen(12345) {}
|
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:
|
public:
|
||||||
struct signal_params
|
struct signal_params
|
||||||
@@ -32,7 +34,7 @@ namespace hr
|
|||||||
float m_amplitude = 1.0f; // A
|
float m_amplitude = 1.0f; // A
|
||||||
float m_frequency = 1.0f; // 1/T
|
float m_frequency = 1.0f; // 1/T
|
||||||
float m_noise_level = 0.7f;
|
float m_noise_level = 0.7f;
|
||||||
int m_samples = 1200;
|
std::size_t m_samples = 1200;
|
||||||
} m_params;
|
} m_params;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|||||||
Reference in New Issue
Block a user