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
00001 /** Defining Amplide Modulated Pulse Train Model 00002 * 00003 * \file AMPulseTrain.h 00004 * \author Akifumi Takahashi 00005 * \date 2019/12/02 - 00006 * \version 1.0.2019.Dec 00007 */ 00008 00009 #ifndef AM_PULSE_TRAIN_H 00010 #define AM_PULSE_TRAIN_H 00011 00012 00013 #include "mbed.h" 00014 #include "AMSignal.h" 00015 #include "PulseTrain.h" 00016 00017 /** \Class Amplide Modulated Pulse Train Model 00018 * 00019 * Pulse Train Model which clock is defined in scale of us; 00020 * the model pulses' height can be modulated as a product with m_ampl and any function 00021 * returning a int as the coefficeincy. 00022 * You can define the carrier pulse train's freq and duty cycle like PWM. 00023 * 00024 */ 00025 class AMPulseTrain 00026 { 00027 public: 00028 /** Constractor 00029 */ 00030 AMPulseTrain( 00031 /// Carrier Pulse Train 00032 PulseTrain * arg_carrier = new PulseTrain(), 00033 /// Initial AM Signal expression 00034 AMSignal * arg_signal = new AMSignal() 00035 ); 00036 00037 /// Carrier Pulse Train 00038 PulseTrain * Carrier; 00039 00040 /// AM Signal 00041 AMSignal * Signal; 00042 00043 /// register callback called every clock (not carrier pulse edges) 00044 void attachCallback_asClock( 00045 Callback<void(bool, AMPulseTrain*)> arg_callback 00046 ); 00047 00048 /// register callback called every carrier pulse edges 00049 void attachCallback_asPulseEdge( 00050 Callback<void(bool, AMPulseTrain*)> arg_callback 00051 ); 00052 00053 /// register callback as AMSignalExpression 00054 void attachAMSignalExpression( 00055 Callback<uint16_t(AMPulseTrain*)> arg_callback 00056 ); 00057 00058 void setFrequency_Carrier( uint32_t const arg_freq ) 00059 { 00060 Carrier->setFrequency(arg_freq); 00061 RecalcPulsebaseParameter(); 00062 } 00063 00064 void setFrequency_Signal( uint32_t const arg_freq ) 00065 { 00066 Signal->setFrequency(arg_freq); 00067 RecalcPulsebaseParameter(); 00068 } 00069 00070 uint32_t getFrequency_Carrier() 00071 { 00072 return Carrier->getFrequency(); 00073 } 00074 00075 uint16_t getClockperiod_us(); 00076 00077 void incrementClock(); 00078 00079 uint16_t getPeriod_pPulse_Signal() 00080 { 00081 return m_AMSIGNAL_PERIOD_PER_PULSE; 00082 } 00083 00084 uint16_t getPWidth_pPulse_Signal() 00085 { 00086 return m_AMSIGNAL_PWIDTH_PER_PULSE; 00087 } 00088 00089 private: 00090 00091 Callback<void(bool, AMPulseTrain*)> m_callback_asClock; 00092 void CallbackWrapper_asClock(bool arg_pulsestate); 00093 00094 Callback<void(bool, AMPulseTrain*)> m_callback_asPulseEdge; 00095 void CallbackWrapper_asPulseEdge(bool arg_pulsestate); 00096 00097 Callback<uint16_t(AMPulseTrain*)> m_AMSignalExpression; 00098 uint16_t CallbackWrapper_AMSignalExpression(AMSignal* arg_signal); 00099 00100 uint16_t m_AMSIGNAL_PERIOD_PER_PULSE; 00101 uint16_t m_AMSIGNAL_PWIDTH_PER_PULSE; 00102 void RecalcPulsebaseParameter() 00103 { 00104 m_AMSIGNAL_PERIOD_PER_PULSE = Signal->getPeriod_us() / Carrier->getPeriod_us(); 00105 m_AMSIGNAL_PWIDTH_PER_PULSE = 500 / Carrier->getPeriod_us(); 00106 } 00107 }; 00108 00109 #endif
Generated on Tue Jul 12 2022 22:17:22 by
1.7.2