Bird
Raised Fist0
Signal Processingdata~10 mins

Magnitude and phase spectrum in Signal Processing - Step-by-Step Execution

Choose your learning style10 modes available
Concept Flow - Magnitude and phase spectrum
Input Signal
↓
Apply Fourier Transform
↓
Obtain Complex Spectrum
↓
Calculate Magnitude
↓
Magnitude Spectrum
Start with a signal, apply Fourier Transform to get complex values, then separate into magnitude and phase spectra.
Execution Sample
Signal Processing
import numpy as np
x = np.array([1, 0, -1, 0])
X = np.fft.fft(x)
magnitude = np.abs(X)
phase = np.angle(X)
Compute the Fourier Transform of a simple signal and extract its magnitude and phase spectra.
Execution Table
StepVariableValueExplanation
1x[1 0 -1 0]Input signal array
2X[0.+0.j 1.-1.j 0.+0.j 1.+1.j]FFT result (complex spectrum)
3magnitude[0. 1.41421356 0. 1.41421356]Magnitude is absolute value of FFT
4phase[0. -0.78539816 0. 0.78539816]Phase is angle of FFT in radians
💡 All steps complete: magnitude and phase spectra computed from FFT.
Variable Tracker
VariableStartAfter FFTAfter MagnitudeAfter Phase
x[1 0 -1 0][1 0 -1 0][1 0 -1 0][1 0 -1 0]
XN/A[0.+0.j 1.-1.j 0.+0.j 1.+1.j][0.+0.j 1.-1.j 0.+0.j 1.+1.j][0.+0.j 1.-1.j 0.+0.j 1.+1.j]
magnitudeN/AN/A[0. 1.41421356 0. 1.41421356][0. 1.41421356 0. 1.41421356]
phaseN/AN/AN/A[0. -0.78539816 0. 0.78539816]
Key Moments - 3 Insights
Why is the magnitude at index 0 zero even though the input signal has non-zero values?
The magnitude at index 0 corresponds to the DC component (average value). Here, the input signal sums to zero, so the DC component magnitude is zero, as shown in execution_table step 3.
Why do some FFT values have both real and imaginary parts?
FFT outputs complex numbers representing both amplitude and phase information. The real and imaginary parts combine to form magnitude and phase, as seen in execution_table step 2.
What does the phase spectrum tell us about the signal?
The phase spectrum shows the angle of each frequency component, indicating its shift in time. This is shown in execution_table step 4 where phase values are angles in radians.
Visual Quiz - 3 Questions
Test your understanding
Look at the execution_table at step 3, what is the magnitude value at index 1?
A1.41421356
B0
C0.78539816
D1
💡 Hint
Check the 'magnitude' values in execution_table row with Step 3.
At which step do we get the complex spectrum from the input signal?
AStep 1
BStep 2
CStep 3
DStep 4
💡 Hint
Look for the step where variable 'X' is assigned complex values in execution_table.
If the input signal was all zeros, what would the magnitude spectrum be?
ASame as phase spectrum
BAll ones
CAll zeros
DUndefined
💡 Hint
Consider how FFT of zero signal behaves and check variable_tracker for magnitude values.
Concept Snapshot
Magnitude and phase spectrum:
- Apply Fourier Transform to signal
- Output is complex numbers
- Magnitude = absolute value (strength)
- Phase = angle (shift)
- Used to analyze frequency content
Full Transcript
This visual execution shows how to get magnitude and phase spectra from a signal. We start with a simple input array. Applying Fourier Transform gives complex numbers representing frequencies. Then, magnitude is the absolute value of these complex numbers, showing strength of each frequency. Phase is the angle, showing timing shifts. The tables trace each step and variable changes clearly.

Practice

(1/5)
1. What does the magnitude spectrum represent in signal processing?
easy
A. The strength or amplitude of different frequency components
B. The timing or phase shift of frequency components
C. The original time-domain signal values
D. The noise level in the signal

Solution

  1. Step 1: Understand magnitude spectrum meaning

    The magnitude spectrum shows how strong or intense each frequency is in a signal.
  2. Step 2: Differentiate from phase spectrum

    The phase spectrum shows timing, not strength, so it is not the magnitude.
  3. Final Answer:

    The strength or amplitude of different frequency components -> Option A
  4. Quick Check:

    Magnitude spectrum = strength [OK]
Hint: Magnitude = strength of frequencies, phase = timing [OK]
Common Mistakes:
  • Confusing magnitude with phase
  • Thinking magnitude shows time values
  • Mixing magnitude with noise level
2. Which Python function is used to get the phase spectrum from a Fourier Transform result stored in variable F?
easy
A. np.abs(F)
B. np.angle(F)
C. np.fft(F)
D. np.real(F)

Solution

  1. Step 1: Recall phase extraction function

    In Python's NumPy, np.angle() returns the phase angles of complex numbers.
  2. Step 2: Differentiate from magnitude and other functions

    np.abs() returns magnitude, np.fft() is not a valid function, and np.real() returns real parts only.
  3. Final Answer:

    np.angle(F) -> Option B
  4. Quick Check:

    Phase spectrum = np.angle() [OK]
Hint: Use np.angle() for phase, np.abs() for magnitude [OK]
Common Mistakes:
  • Using np.abs() instead of np.angle() for phase
  • Trying to use np.fft() which is invalid
  • Confusing real part with phase
3. Given the code:
import numpy as np
x = np.array([1, 0, -1, 0])
F = np.fft.fft(x)
magnitude = np.abs(F)
phase = np.angle(F)
print(np.round(magnitude, 2))
print(np.round(phase, 2))

What is the printed magnitude and phase arrays?
medium
A. [4.00 0.00 0.00 0.00] [0.00 0.00 0.00 0.00]
B. [0.00 2.00 0.00 2.00] [0.00 0.00 0.00 0.00]
C. [2.00 2.00 2.00 2.00] [ 0.00 -1.57 3.14 1.57]
D. [2.00 0.00 2.00 0.00] [0.00 1.57 3.14 -1.57]

Solution

  1. Step 1: Compute FFT of x

    The FFT of [1, 0, -1, 0] is [0+0j, 2+0j, 0+0j, 2+0j].
  2. Step 2: Calculate magnitude and phase arrays

    Magnitude is [2.00 2.00 2.00 2.00]. Phase angles are [0.00 -1.57 3.14 1.57].
  3. Final Answer:

    [2.00 2.00 2.00 2.00] [ 0.00 -1.57 3.14 1.57] -> Option C
  4. Quick Check:

    Magnitude = [2 2 2 2], Phase = approx [-pi/2, pi, pi/2] [OK]
Hint: FFT magnitude is abs(), phase is angle() in radians [OK]
Common Mistakes:
  • Confusing magnitude with real part
  • Not rounding phase correctly
  • Mixing up signs of phase angles
4. The following code attempts to compute magnitude and phase but has an error:
import numpy as np
x = np.array([1, 2, 3, 4])
F = np.fft.fft(x)
magnitude = np.angle(F)
phase = np.abs(F)
print(magnitude)
print(phase)

What is the error?
medium
A. No error; code runs correctly
B. np.fft.fft() is used incorrectly; should be np.fft.ifft()
C. The input array x must be complex numbers
D. Magnitude and phase are swapped; np.angle() should be for phase, np.abs() for magnitude

Solution

  1. Step 1: Check function usage for magnitude and phase

    Magnitude is the absolute value, so np.abs() should be used for magnitude, not np.angle(). Phase is angle, so np.angle() is for phase.
  2. Step 2: Identify swapped assignments

    The code assigns magnitude = np.angle(F) and phase = np.abs(F), which is reversed.
  3. Final Answer:

    Magnitude and phase are swapped; np.angle() should be for phase, np.abs() for magnitude -> Option D
  4. Quick Check:

    Magnitude = abs(), Phase = angle() [OK]
Hint: Remember: abs() for magnitude, angle() for phase [OK]
Common Mistakes:
  • Swapping magnitude and phase functions
  • Thinking FFT input must be complex
  • Confusing FFT and IFFT usage
5. You have a noisy signal and want to keep only frequencies with magnitude above 5. Which steps correctly apply this filter using FFT results stored in F?
hard
A. Calculate magnitude = np.abs(F), create mask = magnitude > 5, then set F_filtered = F * mask
B. Calculate phase = np.angle(F), create mask = phase > 5, then set F_filtered = F * mask
C. Calculate magnitude = np.abs(F), create mask = magnitude < 5, then set F_filtered = F * mask
D. Calculate magnitude = np.abs(F), create mask = magnitude > 5, then set F_filtered = np.abs(F) * mask

Solution

  1. Step 1: Compute magnitude and create mask

    Calculate magnitude with np.abs(F). Create a boolean mask where magnitude > 5 to keep strong frequencies.
  2. Step 2: Apply mask to original FFT data

    Multiply the complex FFT array F by the mask to zero out weak frequencies, preserving phase and magnitude of strong ones.
  3. Final Answer:

    Calculate magnitude = np.abs(F), create mask = magnitude > 5, then set F_filtered = F * mask -> Option A
  4. Quick Check:

    Filter by magnitude > 5, multiply mask with F [OK]
Hint: Filter frequencies by magnitude mask, multiply mask with FFT [OK]
Common Mistakes:
  • Filtering by phase instead of magnitude
  • Using magnitude < 5 to keep frequencies
  • Multiplying mask with magnitude only, losing phase info
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard