Akifumi Takahashi / AMPulseTrain

Dependents:   Interference_Simple

Committer:
aktk
Date:
Fri Feb 21 05:31:49 2020 +0000
Branch:
35e9675a
Revision:
9:80a5ef57af11
Parent:
8:1f88fb3a4c57
Modified types of Signal and Carrier from "* const" to just "*"

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 9:80a5ef57af11 32 PulseTrain * arg_carrier = new PulseTrain(),
aktk 1:19c3a52c80c3 33 /// Initial AM Signal expression
aktk 9:80a5ef57af11 34 AMSignal * arg_signal = new AMSignal()
aktk 1:19c3a52c80c3 35 );
aktk 1:19c3a52c80c3 36
aktk 1:19c3a52c80c3 37 /// Carrier Pulse Train
aktk 9:80a5ef57af11 38 PulseTrain * Carrier;
aktk 1:19c3a52c80c3 39
aktk 1:19c3a52c80c3 40 /// AM Signal
aktk 9:80a5ef57af11 41 AMSignal * 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