📖 Scenario: You are analyzing a simple signal that changes over time. You want to find out the main frequencies in this signal using a tool called FFT (Fast Fourier Transform).
🎯 Goal: Build a program that creates a time signal, sets up the sampling rate, applies FFT using np.fft.fft, and prints the frequency components.
📋 What You'll Learn
Create a numpy array called time_signal with specific values
Create a variable called sampling_rate with a given value
Use np.fft.fft on time_signal and store the result in frequency_components
Print the frequency_components array
💡 Why This Matters
🌍 Real World
FFT is used in audio processing, image analysis, and many fields to find hidden frequencies in signals.
💼 Career
Understanding FFT helps in roles like data analyst, signal processing engineer, and any job involving time series data.
Progress0 / 4 steps
1
Create the time signal
Create a numpy array called time_signal with these exact values: [0, 1, 0, -1].
NumPy
Hint
Use np.array to create the array with the exact values.
2
Set the sampling rate
Create a variable called sampling_rate and set it to 4.
NumPy
Hint
Sampling rate is how many samples per second. Just assign the number 4 to sampling_rate.
3
Apply FFT to the time signal
Use np.fft.fft on time_signal and save the result in a variable called frequency_components.
NumPy
Hint
Use np.fft.fft(time_signal) to get the frequency components.
4
Print the frequency components
Print the variable frequency_components to see the FFT result.
NumPy
Hint
Use print(frequency_components) to display the FFT output.
Practice
(1/5)
1. What does the np.fft.fft() function do in numpy?
easy
A. It calculates the mean of an array.
B. It sorts an array in ascending order.
C. It generates random numbers.
D. It computes the Fast Fourier Transform of a signal.
Solution
Step 1: Understand the purpose of FFT
FFT converts time-domain data into frequency-domain data quickly.
Step 2: Identify the function role
np.fft.fft() computes this Fast Fourier Transform on input data.
Final Answer:
It computes the Fast Fourier Transform of a signal. -> Option D
Quick Check:
FFT = Fast Fourier Transform [OK]
Hint: FFT = Fast Fourier Transform, converts time to frequency [OK]
Common Mistakes:
Confusing FFT with sorting or averaging functions
Thinking FFT generates random data
Mixing FFT with statistical calculations
2. Which of the following is the correct syntax to compute the FFT of a numpy array data?
easy
A. np.fft(data).fft()
B. np.fft.fft(data)
C. fft(np.data)
D. np.fft_fft(data)
Solution
Step 1: Recall numpy FFT syntax
The correct function call is np.fft.fft() with the data array as argument.
Step 2: Check each option
Only np.fft.fft(data) matches the correct syntax; others are invalid or incorrect.
Final Answer:
np.fft.fft(data) -> Option B
Quick Check:
Correct function call = np.fft.fft(data) [OK]
Hint: Use np.fft.fft(array) to compute FFT [OK]
Common Mistakes:
Swapping function and module order
Using wrong function names
Passing wrong argument types
3. What is the output of the following code?
import numpy as np
x = np.array([1, 0, 0, 0])
fft_x = np.fft.fft(x)
print(np.round(fft_x, 2))
medium
A. [1.+0.j 0.+0.j 0.+0.j 0.+0.j]
B. [1.+0.j 1.+0.j 1.+0.j 1.+0.j]
C. [4.+0.j 0.+0.j 0.+0.j 0.+0.j]
D. [0.+0.j 0.+0.j 0.+0.j 0.+0.j]
Solution
Step 1: Understand input signal
The input array has one '1' followed by zeros, representing a unit impulse (delta function).
Step 2: Compute FFT of impulse
The FFT of a unit impulse of length 4 is [4.+0.j 0.+0.j 0.+0.j 0.+0.j], because the sum of the input is 1 at position 0, but the FFT sums all elements, so the DC component is 4.
Final Answer:
[4.+0.j 0.+0.j 0.+0.j 0.+0.j] -> Option C
Quick Check:
Impulse FFT = DC component equals sum of input [OK]
Hint: FFT of unit impulse = all ones [Incorrect], actually FFT of [1,0,0,0] = [4,0,0,0] [OK]
Common Mistakes:
Thinking FFT shows sum only at DC ([4.+0.j 0.+0.j 0.+0.j 0.+0.j])
Ignoring complex number format
Misreading array rounding
4. Identify the error in this code snippet:
import numpy as np
signal = [1, 2, 3, 4]
fft_signal = np.fft.fft(signal, n=-1)
print(fft_signal)
medium
A. The FFT length n cannot be smaller than the input length.
B. The print statement syntax is incorrect.
C. The function np.fft.fft does not accept the parameter n.
D. The input signal must be a numpy array, not a list.
Solution
Step 1: Check FFT length parameter
The input signal length is 4, but n=-1 is smaller than input length.
Step 2: Understand FFT behavior with n parameter
FFT length n must be at least the input length or zero-padded; smaller n truncates data causing error or unexpected results.
Final Answer:
The FFT length n cannot be smaller than the input length. -> Option A
Quick Check:
FFT length n ≥ input length [OK]
Hint: FFT length n ≥ input length [OK]
Common Mistakes:
Thinking lists are invalid input
Believing n can be any number
Assuming print syntax error
5. You have a noisy signal stored in a numpy array noisy_signal. You want to remove high-frequency noise by zeroing FFT components above index 5. Which code correctly applies this filter and returns the cleaned signal?
hard
A. fft_vals = np.fft.fft(noisy_signal)
fft_vals[5:] = 0
clean_signal = np.fft.ifft(fft_vals).real
B. fft_vals = np.fft.fft(noisy_signal)
fft_vals[:5] = 0
clean_signal = np.fft.ifft(fft_vals).real
C. fft_vals = np.fft.ifft(noisy_signal)
fft_vals[5:] = 0
clean_signal = np.fft.fft(fft_vals).real
D. clean_signal = np.fft.fft(noisy_signal)
clean_signal[5:] = 0
Solution
Step 1: Compute FFT of noisy signal
Use np.fft.fft(noisy_signal) to get frequency components.
Step 2: Zero out high-frequency components
Set FFT values from index 5 onward to zero to remove high frequencies.
Step 3: Compute inverse FFT to get cleaned signal
Apply np.fft.ifft() and take real part to get filtered time-domain signal.