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

Branch:
35e9675a
Revision:
8:1f88fb3a4c57
Parent:
1:19c3a52c80c3
Child:
9:80a5ef57af11
--- a/AMPulseTrain.h	Mon Jan 13 19:04:11 2020 +0000
+++ b/AMPulseTrain.h	Fri Feb 21 05:29:09 2020 +0000
@@ -40,15 +40,17 @@
     /// AM Signal
     AMSignal  * const Signal;
 
-
+    /// register callback called every clock (not carrier pulse edges)
     void attachCallback_asClock(
         Callback<void(bool,  AMPulseTrain*)> arg_callback
     );
 
+    /// register callback called every carrier pulse edges
     void attachCallback_asPulseEdge(
         Callback<void(bool,  AMPulseTrain*)> arg_callback
     );
 
+    /// register callback as AMSignalExpression
     void attachAMSignalExpression(
         Callback<uint16_t(AMPulseTrain*)> arg_callback
     );
@@ -56,20 +58,34 @@
     void setFrequency_Carrier( uint32_t const arg_freq )
     {
         Carrier->setFrequency(arg_freq);
-        m_AMSIGNAL_PERIOD_PER_PULSE = Signal->getPeriod_us() / Carrier->getPeriod_us();
-        m_AMSIGNAL_PWIDTH_PER_PULSE = 500 / Carrier->getPeriod_us();
+        RecalcPulsebaseParameter();
     }
-    
-    uint32_t getFrequency_Carrier(){return Carrier->getFrequency();}
-    
+
+    void setFrequency_Signal( uint32_t const arg_freq )
+    {
+        Signal->setFrequency(arg_freq);
+        RecalcPulsebaseParameter();
+    }
+
+    uint32_t getFrequency_Carrier()
+    {
+        return Carrier->getFrequency();
+    }
+
     uint16_t getClockperiod_us();
-    
+
     void incrementClock();
-    
-    uint16_t getPeriod_pPulse_Signal(){return m_AMSIGNAL_PERIOD_PER_PULSE;}
-    
-    uint16_t getPWidth_pPulse_Signal(){return m_AMSIGNAL_PWIDTH_PER_PULSE;}
-    
+
+    uint16_t getPeriod_pPulse_Signal()
+    {
+        return m_AMSIGNAL_PERIOD_PER_PULSE;
+    }
+
+    uint16_t getPWidth_pPulse_Signal()
+    {
+        return m_AMSIGNAL_PWIDTH_PER_PULSE;
+    }
+
 private:
 
     Callback<void(bool,  AMPulseTrain*)> m_callback_asClock;
@@ -83,6 +99,11 @@
 
     uint16_t m_AMSIGNAL_PERIOD_PER_PULSE;
     uint16_t m_AMSIGNAL_PWIDTH_PER_PULSE;
+    void RecalcPulsebaseParameter()
+    {
+        m_AMSIGNAL_PERIOD_PER_PULSE = Signal->getPeriod_us() / Carrier->getPeriod_us();
+        m_AMSIGNAL_PWIDTH_PER_PULSE = 500 / Carrier->getPeriod_us();
+    }
 };
 
 #endif
\ No newline at end of file