Modulation concept (AM, FM, PM) in Signal Processing - Time & Space Complexity
We want to understand how the time to modulate a signal changes as the input size grows.
How does the processing time increase when we handle longer signals or more samples?
Analyze the time complexity of the following modulation code snippet.
# Simple amplitude modulation (AM) example
for i in range(len(signal)):
carrier[i] = carrier_amplitude * sin(2 * pi * carrier_freq * i / sample_rate)
modulated_signal[i] = (1 + modulation_index * signal[i]) * carrier[i]
This code creates an AM signal by multiplying a carrier wave with the input signal samples.
Identify the loops, recursion, array traversals that repeat.
- Primary operation: Loop over each sample to compute carrier and modulated signal values.
- How many times: Once for every sample in the input signal.
As the number of samples increases, the number of calculations grows directly with it.
| Input Size (n) | Approx. Operations |
|---|---|
| 10 | About 10 calculations |
| 100 | About 100 calculations |
| 1000 | About 1000 calculations |
Pattern observation: Doubling the input size roughly doubles the work done.
Time Complexity: O(n)
This means the time to modulate grows in direct proportion to the number of samples.
[X] Wrong: "Modulating more samples takes the same time as fewer samples because the code is simple."
[OK] Correct: Each sample requires separate calculations, so more samples mean more work and more time.
Understanding how processing time grows with signal length helps you design efficient signal processing systems and explain your approach clearly.
"What if we added nested loops to apply modulation multiple times? How would the time complexity change?"
Practice
Solution
Step 1: Understand modulation types
Amplitude Modulation (AM) changes the amplitude of the carrier wave to carry information.Step 2: Compare with other modulation types
Frequency Modulation changes frequency, Phase Modulation changes phase, so they are not correct here.Final Answer:
Amplitude Modulation (AM) -> Option BQuick Check:
Amplitude change = AM [OK]
- Confusing amplitude change with frequency or phase
- Choosing FM or PM instead of AM
- Thinking pulse modulation is amplitude modulation
c(t) = A_c cos(2πf_c t) with message signal m(t)?Solution
Step 1: Recall FM formula
Frequency Modulation changes the frequency of the carrier. The instantaneous frequency isf_c + k_f m(t).Step 2: Match formula to options
s(t) = A_c cos(2π(f_c + k_f m(t)) t) showss(t) = A_c cos(2π(f_c + k_f m(t)) t), which correctly represents FM.Final Answer:
s(t) = A_c cos(2π(f_c + k_f m(t)) t) -> Option CQuick Check:
Frequency inside cosine = FM [OK]
- Choosing amplitude modulation formula instead
- Ignoring the time variable in frequency term
- Adding message signal outside cosine
import numpy as np A_c = 1 k_a = 0.5 f_c = 5 fs = 50 t = np.arange(0, 1, 1/fs) m_t = np.sin(2 * np.pi * 1 * t) s_t = A_c * (1 + k_a * m_t) * np.cos(2 * np.pi * f_c * t) print(np.round(s_t[:5], 3))
Solution
Step 1: Calculate message and carrier values
Messagem_tis a 1 Hz sine wave sampled at 50 Hz. Carrier frequency is 5 Hz. Calculate first 5 samples ofs_tusing AM formula.Step 2: Compute first 5 samples
Using formula:s_t = 1 * (1 + 0.5 * m_t) * cos(2π * 5 * t), the first 5 rounded values are approximately [1.0, 0.309, -0.809, -1.191, -0.691].Final Answer:
[1.0, 0.309, -0.809, -1.191, -0.691] -> Option AQuick Check:
AM signal first samples = [1.0, 0.309, -0.809, -1.191, -0.691] [OK]
- Mixing up frequency and amplitude terms
- Not rounding values correctly
- Using wrong sampling frequency
import numpy as np A_c = 1 k_p = 0.5 f_c = 10 fs = 100 t = np.arange(0, 1, 1/fs) m_t = np.sin(2 * np.pi * 2 * t) s_t = A_c * np.cos(2 * np.pi * f_c * t + k_p * np.sin(m_t)) print(np.round(s_t[:5], 3))
Solution
Step 1: Analyze modulation term in PM formula
Phase modulation usesk_p * m_tinside the cosine argument, notk_p * np.sin(m_t).Step 2: Identify the error in code
The code incorrectly appliesnp.sin(m_t)instead of directly usingm_tas the phase modulation signal.Final Answer:
The modulation term should be k_p * m_t, not k_p * np.sin(m_t) -> Option DQuick Check:
PM uses message signal directly in phase [OK]
- Applying sine twice on message signal
- Confusing amplitude with phase modulation
- Incorrect time vector or sampling frequency
m(t) that has sudden jumps (discontinuities). Which modulation technique among AM, FM, and PM is best to minimize distortion caused by these jumps, and why?Solution
Step 1: Understand effect of sudden jumps on modulation
Sudden jumps cause rapid changes in signal. AM changes amplitude, which is sensitive to noise and distortion.Step 2: Compare FM and PM for handling jumps
FM changes frequency, which is more robust to amplitude noise and sudden jumps than AM. PM also changes phase but can be more sensitive to rapid phase shifts.Final Answer:
FM, because frequency changes are less affected by amplitude noise -> Option AQuick Check:
FM resists distortion from sudden jumps [OK]
- Choosing AM thinking amplitude is always best
- Assuming PM handles jumps better than FM
- Ignoring noise sensitivity differences
Ready to prove it?
Pass the test and this pattern moves unknown
