make discretized sin wave, which is stored internal array var. The iterator of which array can go ahead by calling a get function.
Diff: DSinGenerator.cpp
- Revision:
- 0:6400e338266f
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/DSinGenerator.cpp Wed Nov 27 23:03:42 2019 +0000 @@ -0,0 +1,79 @@ +#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); +} \ No newline at end of file