This makes Amplitude Modulated Pulse Train, which can be regarded as the discretized wave of the signal. Pulse Train can be defined by frequency and duty cycle, which can be temporarily changed, referring to PWM.

Dependents:   Interference_Simple

Committer:
aktk
Date:
Mon Jan 13 19:04:11 2020 +0000
Branch:
35e9675a
Revision:
7:5eae3f90d161
Parent:
1:19c3a52c80c3
Child:
8:1f88fb3a4c57
PulseTrain: Modified the arg names of the constructor.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
aktk 1:19c3a52c80c3 1 /** Defining Amplide Modulated Pulse Train Model
aktk 1:19c3a52c80c3 2 *
aktk 1:19c3a52c80c3 3 * \file AMPulseTrain.h
aktk 1:19c3a52c80c3 4 * \author Akifumi Takahashi
aktk 1:19c3a52c80c3 5 * \date 2019/12/02 -
aktk 1:19c3a52c80c3 6 * \version 1.0.2019.Dec
aktk 1:19c3a52c80c3 7 */
aktk 1:19c3a52c80c3 8
aktk 1:19c3a52c80c3 9 #ifndef AM_PULSE_TRAIN_H
aktk 1:19c3a52c80c3 10 #define AM_PULSE_TRAIN_H
aktk 1:19c3a52c80c3 11
aktk 1:19c3a52c80c3 12
aktk 1:19c3a52c80c3 13 #include "mbed.h"
aktk 1:19c3a52c80c3 14 #include "AMSignal.h"
aktk 1:19c3a52c80c3 15 #include "PulseTrain.h"
aktk 1:19c3a52c80c3 16
aktk 1:19c3a52c80c3 17 /** \Class Amplide Modulated Pulse Train Model
aktk 1:19c3a52c80c3 18 *
aktk 1:19c3a52c80c3 19 * Pulse Train Model which clock is defined in scale of us;
aktk 1:19c3a52c80c3 20 * the model pulses' height can be modulated as a product with m_ampl and any function
aktk 1:19c3a52c80c3 21 * returning a int as the coefficeincy.
aktk 1:19c3a52c80c3 22 * You can define the carrier pulse train's freq and duty cycle like PWM.
aktk 1:19c3a52c80c3 23 *
aktk 1:19c3a52c80c3 24 */
aktk 1:19c3a52c80c3 25 class AMPulseTrain
aktk 1:19c3a52c80c3 26 {
aktk 1:19c3a52c80c3 27 public:
aktk 1:19c3a52c80c3 28 /** Constractor
aktk 1:19c3a52c80c3 29 */
aktk 1:19c3a52c80c3 30 AMPulseTrain(
aktk 1:19c3a52c80c3 31 /// Carrier Pulse Train
aktk 1:19c3a52c80c3 32 PulseTrain * const arg_carrier = new PulseTrain(),
aktk 1:19c3a52c80c3 33 /// Initial AM Signal expression
aktk 1:19c3a52c80c3 34 AMSignal * const arg_signal = new AMSignal()
aktk 1:19c3a52c80c3 35 );
aktk 1:19c3a52c80c3 36
aktk 1:19c3a52c80c3 37 /// Carrier Pulse Train
aktk 1:19c3a52c80c3 38 PulseTrain * const Carrier;
aktk 1:19c3a52c80c3 39
aktk 1:19c3a52c80c3 40 /// AM Signal
aktk 1:19c3a52c80c3 41 AMSignal * const Signal;
aktk 1:19c3a52c80c3 42
aktk 1:19c3a52c80c3 43
aktk 1:19c3a52c80c3 44 void attachCallback_asClock(
aktk 1:19c3a52c80c3 45 Callback<void(bool, AMPulseTrain*)> arg_callback
aktk 1:19c3a52c80c3 46 );
aktk 1:19c3a52c80c3 47
aktk 1:19c3a52c80c3 48 void attachCallback_asPulseEdge(
aktk 1:19c3a52c80c3 49 Callback<void(bool, AMPulseTrain*)> arg_callback
aktk 1:19c3a52c80c3 50 );
aktk 1:19c3a52c80c3 51
aktk 1:19c3a52c80c3 52 void attachAMSignalExpression(
aktk 1:19c3a52c80c3 53 Callback<uint16_t(AMPulseTrain*)> arg_callback
aktk 1:19c3a52c80c3 54 );
aktk 1:19c3a52c80c3 55
aktk 1:19c3a52c80c3 56 void setFrequency_Carrier( uint32_t const arg_freq )
aktk 1:19c3a52c80c3 57 {
aktk 1:19c3a52c80c3 58 Carrier->setFrequency(arg_freq);
aktk 1:19c3a52c80c3 59 m_AMSIGNAL_PERIOD_PER_PULSE = Signal->getPeriod_us() / Carrier->getPeriod_us();
aktk 1:19c3a52c80c3 60 m_AMSIGNAL_PWIDTH_PER_PULSE = 500 / Carrier->getPeriod_us();
aktk 1:19c3a52c80c3 61 }
aktk 1:19c3a52c80c3 62
aktk 1:19c3a52c80c3 63 uint32_t getFrequency_Carrier(){return Carrier->getFrequency();}
aktk 1:19c3a52c80c3 64
aktk 1:19c3a52c80c3 65 uint16_t getClockperiod_us();
aktk 1:19c3a52c80c3 66
aktk 1:19c3a52c80c3 67 void incrementClock();
aktk 1:19c3a52c80c3 68
aktk 1:19c3a52c80c3 69 uint16_t getPeriod_pPulse_Signal(){return m_AMSIGNAL_PERIOD_PER_PULSE;}
aktk 1:19c3a52c80c3 70
aktk 1:19c3a52c80c3 71 uint16_t getPWidth_pPulse_Signal(){return m_AMSIGNAL_PWIDTH_PER_PULSE;}
aktk 1:19c3a52c80c3 72
aktk 1:19c3a52c80c3 73 private:
aktk 1:19c3a52c80c3 74
aktk 1:19c3a52c80c3 75 Callback<void(bool, AMPulseTrain*)> m_callback_asClock;
aktk 1:19c3a52c80c3 76 void CallbackWrapper_asClock(bool arg_pulsestate);
aktk 1:19c3a52c80c3 77
aktk 1:19c3a52c80c3 78 Callback<void(bool, AMPulseTrain*)> m_callback_asPulseEdge;
aktk 1:19c3a52c80c3 79 void CallbackWrapper_asPulseEdge(bool arg_pulsestate);
aktk 1:19c3a52c80c3 80
aktk 1:19c3a52c80c3 81 Callback<uint16_t(AMPulseTrain*)> m_AMSignalExpression;
aktk 1:19c3a52c80c3 82 uint16_t CallbackWrapper_AMSignalExpression(AMSignal* arg_signal);
aktk 1:19c3a52c80c3 83
aktk 1:19c3a52c80c3 84 uint16_t m_AMSIGNAL_PERIOD_PER_PULSE;
aktk 1:19c3a52c80c3 85 uint16_t m_AMSIGNAL_PWIDTH_PER_PULSE;
aktk 1:19c3a52c80c3 86 };
aktk 1:19c3a52c80c3 87
aktk 1:19c3a52c80c3 88 #endif