Bird
Raised Fist0
Signal Processingdata~10 mins

Short-Time Fourier Transform (STFT) in Signal Processing - Step-by-Step Execution

Choose your learning style10 modes available
Concept Flow - Short-Time Fourier Transform (STFT)
Input Signal
↓
Split into Overlapping Windows
↓
Apply Window Function to Each Segment
↓
Compute FFT of Each Windowed Segment
↓
Collect FFT Results
↓
Form Time-Frequency Matrix (Spectrogram)
STFT splits a signal into small overlapping parts, applies a window to each, then finds frequency content using FFT, producing a time-frequency view.
Execution Sample
Signal Processing
import numpy as np
from scipy.signal import stft

x = np.sin(2*np.pi*5*np.linspace(0,1,100))
f, t, Zxx = stft(x, nperseg=20)
This code computes the STFT of a 5 Hz sine wave sampled 100 times over 1 second using windows of length 20.
Execution Table
StepActionInput Segment IndicesWindow AppliedFFT Output ShapeNotes
1Split signal into first window0-19Hann window11 complex valuesFirst 20 samples selected and windowed
2Compute FFT of first window0-19Hann window11 complex valuesFFT shows frequency content of first segment
3Split signal into second window10-29Hann window11 complex valuesWindow shifted by 10 samples (50% overlap)
4Compute FFT of second window10-29Hann window11 complex valuesFFT of second segment
5Repeat for all windowsvariesHann window11 complex values eachProcess continues until end of signal
6Collect all FFT resultsall windowsHann windowMatrix shape (freq_bins x time_slices)Final STFT matrix formed
7ExitN/AN/AN/AAll windows processed, STFT complete
💡 All signal segments processed with overlapping windows, STFT matrix fully computed
Variable Tracker
VariableStartAfter 1After 2After 3Final
xFull signal array (length 100)UnchangedUnchangedUnchangedUnchanged
segment_indicesN/A0-1910-2920-39Last window indices
windowed_segmentN/ASegment 0-19 * HannSegment 10-29 * HannSegment 20-39 * HannLast windowed segment
FFT_outputN/A11 complex values11 complex values11 complex valuesAll FFTs collected in matrix
STFT_matrix_shapeN/AN/AN/AN/A(freq_bins=11, time_slices=9)
Key Moments - 3 Insights
Why do we use overlapping windows instead of non-overlapping?
Overlapping windows (see rows 1 and 3 in execution_table) ensure smooth transitions and better time resolution by capturing signal changes between segments.
What does the window function do to each segment?
The window (like Hann) reduces edge effects by tapering segment ends, preventing sharp jumps that distort FFT results (rows 1 and 3).
Why is the FFT output complex numbers?
FFT outputs complex values representing both amplitude and phase of frequencies, essential for reconstructing signal frequency content (rows 2 and 4).
Visual Quiz - 3 Questions
Test your understanding
Look at the execution_table, what is the input segment indices for the third window processed?
A20-39
B0-19
C10-29
D30-49
💡 Hint
Check the 'Input Segment Indices' column for step 5 or infer from overlapping windows shifting by 10 samples
At which step does the STFT matrix get fully formed?
AStep 4
BStep 6
CStep 2
DStep 1
💡 Hint
Look for the step mentioning 'Final STFT matrix formed' in the 'Notes' column
If the window length (nperseg) was increased, how would the FFT output shape change?
ANo change in FFT output size
BFewer frequency bins (smaller FFT output)
CMore frequency bins (larger FFT output)
DFFT output becomes real numbers only
💡 Hint
FFT output length equals window length; increasing window length increases frequency resolution
Concept Snapshot
Short-Time Fourier Transform (STFT):
- Splits signal into overlapping windows
- Applies window function (e.g., Hann) to each segment
- Computes FFT on each windowed segment
- Produces time-frequency matrix (spectrogram)
- Balances time and frequency resolution via window size and overlap
Full Transcript
The Short-Time Fourier Transform (STFT) breaks a signal into small overlapping parts. Each part is multiplied by a window function to reduce edge effects. Then, the FFT is computed on each windowed segment to find its frequency content. These FFT results are collected into a matrix showing how frequencies change over time. Overlapping windows help capture smooth transitions. The FFT outputs complex numbers representing amplitude and phase. Increasing window size increases frequency resolution but reduces time resolution. This process creates a time-frequency view of the signal.

Practice

(1/5)
1. What is the main purpose of the Short-Time Fourier Transform (STFT) in signal processing?
easy
A. To compress a signal into fewer data points
B. To analyze how frequencies change over time in a signal
C. To remove noise from a signal completely
D. To convert a signal from digital to analog form

Solution

  1. Step 1: Understand STFT function

    STFT breaks a signal into small time segments and finds frequency content in each segment.
  2. Step 2: Identify main goal

    This helps us see how frequencies change over time, unlike a normal Fourier transform which shows overall frequencies.
  3. Final Answer:

    To analyze how frequencies change over time in a signal -> Option B
  4. Quick Check:

    STFT = frequency changes over time [OK]
Hint: STFT = frequency analysis in short time windows [OK]
Common Mistakes:
  • Confusing STFT with noise removal
  • Thinking STFT compresses data
  • Mixing STFT with analog conversion
2. Which of the following is the correct Python function call to compute STFT using the scipy library on a signal array named signal with a window size of 256?
easy
A. scipy.stft(signal, nperseg=256)
B. scipy.stft(signal, window=256)
C. scipy.signal.fft(signal, window=256)
D. scipy.signal.stft(signal, nperseg=256)

Solution

  1. Step 1: Recall scipy STFT syntax

    The STFT function is in scipy.signal as stft(), and the window size is set by nperseg parameter.
  2. Step 2: Match correct syntax

    scipy.signal.stft(signal, nperseg=256) uses scipy.signal.stft(signal, nperseg=256), which is correct syntax.
  3. Final Answer:

    scipy.signal.stft(signal, nperseg=256) -> Option D
  4. Quick Check:

    Correct function and parameter = scipy.signal.stft(signal, nperseg=256) [OK]
Hint: Use scipy.signal.stft with nperseg for window size [OK]
Common Mistakes:
  • Using scipy.stft instead of scipy.signal.stft
  • Confusing fft() with stft()
  • Passing window size as 'window' instead of 'nperseg'
3. Given the following Python code using scipy.signal.stft, what is the shape of the output array Zxx?
import numpy as np
from scipy.signal import stft
signal = np.sin(2 * np.pi * 5 * np.linspace(0, 1, 100))
f, t, Zxx = stft(signal, nperseg=20)
print(Zxx.shape)
medium
A. (11, 6)
B. (20, 5)
C. (50, 2)
D. (10, 10)

Solution

  1. Step 1: Calculate frequency bins

    With nperseg=20, frequency bins = nperseg//2 + 1 = 10 + 1 = 11 rows.
  2. Step 2: Calculate time segments

    Signal length=100, window=20, default no overlap means about 6 segments (100/20 rounded up).
  3. Final Answer:

    (11, 6) -> Option A
  4. Quick Check:

    Zxx shape = (freq bins, time segments) = (11, 6) [OK]
Hint: Output shape = (nperseg/2+1, number of windows) [OK]
Common Mistakes:
  • Confusing nperseg with output shape rows
  • Miscounting time segments
  • Assuming output shape equals input length
4. Identify the error in this STFT code snippet and choose the correct fix:
from scipy.signal import stft
signal = [1, 2, 3, 4, 5]
f, t, Zxx = stft(signal, nperseg=10)
print(Zxx)
medium
A. Error: nperseg is larger than signal length; fix by setting nperseg=5
B. Error: signal must be a numpy array; fix by converting signal to np.array(signal)
C. Error: stft requires window parameter; fix by adding window='hann'
D. No error; code runs fine

Solution

  1. Step 1: Check nperseg vs signal length

    Signal length is 5, but nperseg=10 is larger, which causes a warning or error in scipy.
  2. Step 2: Fix nperseg value

    Set nperseg to 5 or less to match signal length and avoid error.
  3. Final Answer:

    Error: nperseg is larger than signal length; fix by setting nperseg=5 -> Option A
  4. Quick Check:

    nperseg ≤ signal length to avoid error [OK]
Hint: nperseg must not exceed signal length [OK]
Common Mistakes:
  • Ignoring nperseg size error
  • Thinking signal type causes error
  • Adding unnecessary window parameter
5. You want to analyze a music clip with fast-changing notes using STFT. Which combination of window size and overlap will give you better time resolution but less frequency resolution?
hard
A. Large window size with high overlap
B. Large window size with low overlap
C. Small window size with high overlap
D. Small window size with low overlap

Solution

  1. Step 1: Understand window size effect

    Small window size improves time resolution but reduces frequency resolution.
  2. Step 2: Understand overlap effect

    High overlap keeps time segments close, improving time detail further.
  3. Final Answer:

    Small window size with high overlap -> Option C
  4. Quick Check:

    Better time resolution = small window + high overlap [OK]
Hint: Small window + high overlap = better time detail [OK]
Common Mistakes:
  • Choosing large window for better time resolution
  • Ignoring overlap effect
  • Assuming low overlap improves time resolution
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