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:
Fri Feb 21 05:29:09 2020 +0000
Branch:
35e9675a
Revision:
8:1f88fb3a4c57
Parent:
1:19c3a52c80c3
Child:
9:80a5ef57af11
Added RecalcRulsebaseParameter() and  set/get-Frequency/Period_pPulse-_Signal()

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 8:1f88fb3a4c57 43 /// register callback called every clock (not carrier pulse edges)
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 8:1f88fb3a4c57 48 /// register callback called every carrier pulse edges
aktk 1:19c3a52c80c3 49 void attachCallback_asPulseEdge(
aktk 1:19c3a52c80c3 50 Callback<void(bool, AMPulseTrain*)> arg_callback
aktk 1:19c3a52c80c3 51 );
aktk 1:19c3a52c80c3 52
aktk 8:1f88fb3a4c57 53 /// register callback as AMSignalExpression
aktk 1:19c3a52c80c3 54 void attachAMSignalExpression(
aktk 1:19c3a52c80c3 55 Callback<uint16_t(AMPulseTrain*)> arg_callback
aktk 1:19c3a52c80c3 56 );
aktk 1:19c3a52c80c3 57
aktk 1:19c3a52c80c3 58 void setFrequency_Carrier( uint32_t const arg_freq )
aktk 1:19c3a52c80c3 59 {
aktk 1:19c3a52c80c3 60 Carrier->setFrequency(arg_freq);
aktk 8:1f88fb3a4c57 61 RecalcPulsebaseParameter();
aktk 1:19c3a52c80c3 62 }
aktk 8:1f88fb3a4c57 63
aktk 8:1f88fb3a4c57 64 void setFrequency_Signal( uint32_t const arg_freq )
aktk 8:1f88fb3a4c57 65 {
aktk 8:1f88fb3a4c57 66 Signal->setFrequency(arg_freq);
aktk 8:1f88fb3a4c57 67 RecalcPulsebaseParameter();
aktk 8:1f88fb3a4c57 68 }
aktk 8:1f88fb3a4c57 69
aktk 8:1f88fb3a4c57 70 uint32_t getFrequency_Carrier()
aktk 8:1f88fb3a4c57 71 {
aktk 8:1f88fb3a4c57 72 return Carrier->getFrequency();
aktk 8:1f88fb3a4c57 73 }
aktk 8:1f88fb3a4c57 74
aktk 1:19c3a52c80c3 75 uint16_t getClockperiod_us();
aktk 8:1f88fb3a4c57 76
aktk 1:19c3a52c80c3 77 void incrementClock();
aktk 8:1f88fb3a4c57 78
aktk 8:1f88fb3a4c57 79 uint16_t getPeriod_pPulse_Signal()
aktk 8:1f88fb3a4c57 80 {
aktk 8:1f88fb3a4c57 81 return m_AMSIGNAL_PERIOD_PER_PULSE;
aktk 8:1f88fb3a4c57 82 }
aktk 8:1f88fb3a4c57 83
aktk 8:1f88fb3a4c57 84 uint16_t getPWidth_pPulse_Signal()
aktk 8:1f88fb3a4c57 85 {
aktk 8:1f88fb3a4c57 86 return m_AMSIGNAL_PWIDTH_PER_PULSE;
aktk 8:1f88fb3a4c57 87 }
aktk 8:1f88fb3a4c57 88
aktk 1:19c3a52c80c3 89 private:
aktk 1:19c3a52c80c3 90
aktk 1:19c3a52c80c3 91 Callback<void(bool, AMPulseTrain*)> m_callback_asClock;
aktk 1:19c3a52c80c3 92 void CallbackWrapper_asClock(bool arg_pulsestate);
aktk 1:19c3a52c80c3 93
aktk 1:19c3a52c80c3 94 Callback<void(bool, AMPulseTrain*)> m_callback_asPulseEdge;
aktk 1:19c3a52c80c3 95 void CallbackWrapper_asPulseEdge(bool arg_pulsestate);
aktk 1:19c3a52c80c3 96
aktk 1:19c3a52c80c3 97 Callback<uint16_t(AMPulseTrain*)> m_AMSignalExpression;
aktk 1:19c3a52c80c3 98 uint16_t CallbackWrapper_AMSignalExpression(AMSignal* arg_signal);
aktk 1:19c3a52c80c3 99
aktk 1:19c3a52c80c3 100 uint16_t m_AMSIGNAL_PERIOD_PER_PULSE;
aktk 1:19c3a52c80c3 101 uint16_t m_AMSIGNAL_PWIDTH_PER_PULSE;
aktk 8:1f88fb3a4c57 102 void RecalcPulsebaseParameter()
aktk 8:1f88fb3a4c57 103 {
aktk 8:1f88fb3a4c57 104 m_AMSIGNAL_PERIOD_PER_PULSE = Signal->getPeriod_us() / Carrier->getPeriod_us();
aktk 8:1f88fb3a4c57 105 m_AMSIGNAL_PWIDTH_PER_PULSE = 500 / Carrier->getPeriod_us();
aktk 8:1f88fb3a4c57 106 }
aktk 1:19c3a52c80c3 107 };
aktk 1:19c3a52c80c3 108
aktk 1:19c3a52c80c3 109 #endif