Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependents: Interference_Simple
AMPulseTrain.h
- Committer:
- aktk
- Date:
- 2020-01-06
- Revision:
- 1:19c3a52c80c3
- Child:
- 8:1f88fb3a4c57
File content as of revision 1:19c3a52c80c3:
/** Defining Amplide Modulated Pulse Train Model
*
* \file AMPulseTrain.h
* \author Akifumi Takahashi
* \date 2019/12/02 -
* \version 1.0.2019.Dec
*/
#ifndef AM_PULSE_TRAIN_H
#define AM_PULSE_TRAIN_H
#include "mbed.h"
#include "AMSignal.h"
#include "PulseTrain.h"
/** \Class Amplide Modulated Pulse Train Model
*
* Pulse Train Model which clock is defined in scale of us;
* the model pulses' height can be modulated as a product with m_ampl and any function
* returning a int as the coefficeincy.
* You can define the carrier pulse train's freq and duty cycle like PWM.
*
*/
class AMPulseTrain
{
public:
/** Constractor
*/
AMPulseTrain(
/// Carrier Pulse Train
PulseTrain * const arg_carrier = new PulseTrain(),
/// Initial AM Signal expression
AMSignal * const arg_signal = new AMSignal()
);
/// Carrier Pulse Train
PulseTrain * const Carrier;
/// AM Signal
AMSignal * const Signal;
void attachCallback_asClock(
Callback<void(bool, AMPulseTrain*)> arg_callback
);
void attachCallback_asPulseEdge(
Callback<void(bool, AMPulseTrain*)> arg_callback
);
void attachAMSignalExpression(
Callback<uint16_t(AMPulseTrain*)> arg_callback
);
void setFrequency_Carrier( uint32_t const arg_freq )
{
Carrier->setFrequency(arg_freq);
m_AMSIGNAL_PERIOD_PER_PULSE = Signal->getPeriod_us() / Carrier->getPeriod_us();
m_AMSIGNAL_PWIDTH_PER_PULSE = 500 / Carrier->getPeriod_us();
}
uint32_t getFrequency_Carrier(){return Carrier->getFrequency();}
uint16_t getClockperiod_us();
void incrementClock();
uint16_t getPeriod_pPulse_Signal(){return m_AMSIGNAL_PERIOD_PER_PULSE;}
uint16_t getPWidth_pPulse_Signal(){return m_AMSIGNAL_PWIDTH_PER_PULSE;}
private:
Callback<void(bool, AMPulseTrain*)> m_callback_asClock;
void CallbackWrapper_asClock(bool arg_pulsestate);
Callback<void(bool, AMPulseTrain*)> m_callback_asPulseEdge;
void CallbackWrapper_asPulseEdge(bool arg_pulsestate);
Callback<uint16_t(AMPulseTrain*)> m_AMSignalExpression;
uint16_t CallbackWrapper_AMSignalExpression(AMSignal* arg_signal);
uint16_t m_AMSIGNAL_PERIOD_PER_PULSE;
uint16_t m_AMSIGNAL_PWIDTH_PER_PULSE;
};
#endif