make discretized sin wave, which is stored internal array var. The iterator of which array can go ahead by calling a get function.

DSinGenerator.cpp

Committer:
aktk
Date:
2019-11-27
Revision:
0:6400e338266f

File content as of revision 0:6400e338266f:

#include "DSinGenerator.h"

DSinGenerator::DSinGenerator(
    uint16_t const arg_resolution_ofsin
):
    ampl_max(10),
    freq_max(5000),
    resolution_ofsin(arg_resolution_ofsin)
{
    init();
    setParam(0, 4000);
}

DSinGenerator::DSinGenerator(
    float const arg_ampl,
    uint16_t const arg_freq,
    uint16_t const arg_resolution_ofsin
): 
    ampl_max(10),
    freq_max(5000),
    resolution_ofsin(arg_resolution_ofsin)
{
    init();
    setParam(arg_ampl, arg_freq);
}

void DSinGenerator::setParam(
    float const arg_ampl,
    uint16_t const arg_freq
)
{
    setAmplitude(arg_ampl);
    setFrequency(arg_freq);
}

void DSinGenerator::setAmplitude(
    float const arg_ampl
)
{
    ampl = arg_ampl;
    for(int i = 0; i < resolution_ofsin; i++){
        discretized_sin_p16m16[i] = static_cast<int32_t>(4095.0 / ampl_max * ampl * discretized_sin[i] );
    }
}

void DSinGenerator::setFrequency(
    uint16_t const arg_freq
)
{
    freq = arg_freq;
    pwth = 1000000 / freq / resolution_ofsin;
}

void DSinGenerator::init()
{
    discretized_sin = new float[resolution_ofsin];
    discretized_sin_p16m16 = new int32_t[resolution_ofsin];
    
    for(int i = 0; i < resolution_ofsin; i++){
        discretized_sin[i] = sin( 2.0 * M_PI * static_cast<float>(i) / static_cast<float>(resolution_ofsin));
    }
}

float DSinGenerator::getValue()
{
    static int itr = 0;
    return ampl * discretized_sin[itr++ % resolution_ofsin];
}

int32_t DSinGenerator::getValue_p16m16()
{
    static int itr = 0;
    return discretized_sin_p16m16[itr++ % resolution_ofsin];
}

void DSinGenerator::getValueofSamplePoints(float arg_dsin[])
{
    memcpy(arg_dsin, discretized_sin, sizeof(float) * resolution_ofsin);
}