📖 Scenario: You are analyzing a simple signal to understand its frequency components. This is common in audio processing, communications, and many engineering fields.
🎯 Goal: You will create a signal, compute its Fourier Transform, and then extract and display the magnitude and phase spectrum.
📋 What You'll Learn
Create a time-domain signal as a list of values
Define a sampling frequency variable
Compute the Fourier Transform using numpy's fft function
Calculate magnitude and phase spectrum from the Fourier Transform
Print the magnitude and phase arrays
💡 Why This Matters
🌍 Real World
Analyzing signals to find their frequency components is important in audio processing, communications, and engineering diagnostics.
💼 Career
Understanding magnitude and phase spectrum is essential for roles in signal processing, data analysis, and electrical engineering.
Progress0 / 4 steps
1
Create the signal data
Create a list called signal with these exact values: 1, 0, -1, 0.
Signal Processing
Hint
This is a simple 4-point signal representing one cycle of a wave.
2
Set the sampling frequency
Create a variable called fs and set it to 4 to represent the sampling frequency.
Signal Processing
Hint
The sampling frequency is how many samples per second we have. Here, it's 4.
3
Compute the Fourier Transform and extract magnitude and phase
Import numpy as np. Use np.fft.fft(signal) to compute the Fourier Transform and store it in fft_result. Then create magnitude as the absolute value of fft_result and phase as the angle of fft_result using np.abs() and np.angle().
Signal Processing
Hint
Use numpy's fft function to get frequency info, then get magnitude and phase with abs and angle.
4
Print the magnitude and phase spectrum
Print the magnitude array and then print the phase array.
Signal Processing
Hint
Use two print statements: one for magnitude, one for phase.
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
Step 1: Understand magnitude spectrum meaning
The magnitude spectrum shows how strong or intense each frequency is in a signal.
Step 2: Differentiate from phase spectrum
The phase spectrum shows timing, not strength, so it is not the magnitude.
Final Answer:
The strength or amplitude of different frequency components -> Option A
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
Step 1: Recall phase extraction function
In Python's NumPy, np.angle() returns the phase angles of complex numbers.
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.
Final Answer:
np.angle(F) -> Option B
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
Step 1: Compute FFT of x
The FFT of [1, 0, -1, 0] is [0+0j, 2+0j, 0+0j, 2+0j].
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].
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
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.
Step 2: Identify swapped assignments
The code assigns magnitude = np.angle(F) and phase = np.abs(F), which is reversed.
Final Answer:
Magnitude and phase are swapped; np.angle() should be for phase, np.abs() for magnitude -> Option D
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
Step 1: Compute magnitude and create mask
Calculate magnitude with np.abs(F). Create a boolean mask where magnitude > 5 to keep strong frequencies.
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.
Final Answer:
Calculate magnitude = np.abs(F), create mask = magnitude > 5, then set F_filtered = F * mask -> Option A
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 unknownstrongwhile earning +1 Grip toward your certificate.