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

DSin.h

Committer:
aktk
Date:
2019-12-02
Revision:
1:b01e84ce3ae0

File content as of revision 1:b01e84ce3ae0:

/** Defining Discretized Sinusoidal Wave Model 
 *
 *  \file   DSin.h
 *  \author Akifumi Takahashi
 *  \date   2019/Nov/28 ver.1 publish
 *  \version 1.0.2019.Nov
 *  \version 2.0.2019.Dec
 */
 
#ifndef DISCRETIZED_SINUSOIDAL_WAVE_MODEL_H
#define DISCRETIZED_SINUSOIDAL_WAVE_MODEL_H
#define _USE_MATH_DEFINES
#include <cmath>

#ifndef M_PI
#define M_PI 3.141592
#endif

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

public:
    float const ampl_max;
    uint16_t const freq_max;
    uint16_t const resolution_ofsin; // = arg_resolution_ofsin below
    
    DSin(
        uint16_t const arg_resolution_ofsin = 20
    );
    DSin(
        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 DSin::getAmplitude()
{
    return m_ampl;
}

inline uint16_t DSin::getFrequency()
{
    return m_freq;
}

inline uint16_t DSin::getPulseWidth()
{
    return m_pwth;
}
#endif