maked return result from signal generator
This commit is contained in:
@@ -18,6 +18,6 @@ auto main() -> int
|
||||
{
|
||||
std::vector<float> s;
|
||||
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);
|
||||
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
|
||||
{
|
||||
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) +
|
||||
|
||||
@@ -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:
|
||||
|
||||
Reference in New Issue
Block a user