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@9:80a5ef57af11, 2020-02-21 (annotated)
- 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?
| User | Revision | Line number | New 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 |