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

DSinGenerator.h

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

File content as of revision 0:6400e338266f:

/** Defining Discretized Sinusoidal Wave Generator 
 *
 *  \file   DSinGenerator.h
 *  \author Akifumi Takahashi
 *  \date   2019/Nov/28 ver.1 publish
 *  \version 1.0.2019.Nov
 */
 
#ifndef DISCRETIZED_SINUSOIDAL_WAVE_GENERATOR_H
#define DISCRETIZED_SINUSOIDAL_WAVE_GENERATOR_H
#define _USE_MATH_DEFINES
#include <cmath>

#ifndef M_PI
#define M_PI 3.141592
#endif

#include "mbed.h"
/** \Class DISCRETIZED SINUSOIDAL WAVE GENERATOR
 *
 *  Generate a discretized sinusoidal wave whose value type is float, 
 *  and the range is from (-1.0f * ampl) to (1.0f * ampl).
 *
 */
class DSinGenerator
{
private:
    /// Amplitude of sinusoidal wave (mA)
    float ampl;
    
    /// Frequency of the wave (Hz)
    uint16_t freq;
    
    /// Pulse width fineness of dicretization (us) 
    /// pwth = 1000000 / freq / resolution_ofsin;
    uint16_t pwth;
    
    float*      discretized_sin;
    int32_t*    discretized_sin_p16m16;
    
    void init();

public:
    float const ampl_max;
    uint16_t const freq_max;
    uint16_t const resolution_ofsin; // = arg_resolution_ofsin below
    
    DSinGenerator(
        uint16_t const arg_resolution_ofsin = 20
    );
    DSinGenerator(
        float const arg_ampl,
        uint16_t const arg_freq,
        uint16_t const arg_resolution_ofsin = 20
    );
    
    void setParam(
        float const arg_ampl,
        uint16_t const arg_freq
    );
    
    void setAmplitude(
        float const arg_ampl
    );
    
    void setFrequency(
        uint16_t const arg_freq
    );
    
    float getValue();
    int32_t getValue_p16m16();
    
    void getValueofSamplePoints(float[]);
    
    float    getAmplitude();    //inline
    uint16_t getFrequency();    //inline
    uint16_t getPulseWidth(); //inline
    
};


inline float DSinGenerator::getAmplitude()
{
    return ampl;
}

inline uint16_t DSinGenerator::getFrequency()
{
    return freq;
}

inline uint16_t DSinGenerator::getPulseWidth()
{
    return pwth;
}
#endif