0
0
Signal Processingdata~20 mins

Spectrogram visualization in Signal Processing - Practice Problems & Coding Challenges

Choose your learning style9 modes available
Challenge - 5 Problems
🎖️
Spectrogram Mastery
Get all challenges correct to earn this badge!
Test your skills under time pressure!
Predict Output
intermediate
2:00remaining
What is the shape of the spectrogram matrix?
Given a signal sampled at 1024 Hz with 1 second duration, a window size of 256 samples, and an overlap of 128 samples, what is the shape of the spectrogram matrix produced by the following code?
Signal Processing
import numpy as np
from scipy.signal import spectrogram
fs = 1024
signal = np.sin(2 * np.pi * 50 * np.linspace(0, 1, fs, endpoint=False))
f, t, Sxx = spectrogram(signal, fs=fs, window='hann', nperseg=256, noverlap=128)
print(Sxx.shape)
A(256, 8)
B(128, 8)
C(129, 8)
D(129, 7)
Attempts:
2 left
💡 Hint
Remember the number of frequency bins is nperseg//2 + 1, and the number of time segments depends on overlap.
data_output
intermediate
2:00remaining
Identify the dominant frequency from the spectrogram data
Using the spectrogram data from the code below, which frequency has the highest average power over time?
Signal Processing
import numpy as np
from scipy.signal import spectrogram
fs = 500
t = np.linspace(0, 2, 2*fs, endpoint=False)
signal = np.sin(2 * np.pi * 60 * t) + 0.5 * np.sin(2 * np.pi * 120 * t)
f, _, Sxx = spectrogram(signal, fs=fs, nperseg=128)
avg_power = Sxx.mean(axis=1)
max_freq = f[np.argmax(avg_power)]
print(round(max_freq))
A60
B120
C90
D30
Attempts:
2 left
💡 Hint
Look for the frequency with the highest mean power across all time segments.
visualization
advanced
2:00remaining
Which plot shows the correct spectrogram visualization?
You run the following code to plot a spectrogram of a signal. Which option shows the correct plot output?
Signal Processing
import numpy as np
import matplotlib.pyplot as plt
from scipy.signal import spectrogram
fs = 1000
t = np.linspace(0, 1, fs, endpoint=False)
signal = np.sin(2 * np.pi * 100 * t)
f, t_spec, Sxx = spectrogram(signal, fs=fs, nperseg=256)
plt.pcolormesh(t_spec, f, 10 * np.log10(Sxx), shading='gouraud')
plt.ylabel('Frequency [Hz]')
plt.xlabel('Time [sec]')
plt.title('Spectrogram')
plt.colorbar(label='Intensity [dB]')
plt.show()
AA plot with frequency on y-axis from 0 to 1000 Hz, time on x-axis from 0 to 1 sec, and no visible lines.
BA plot with time on y-axis and frequency on x-axis, showing a vertical line at 100 Hz.
CA plot with frequency on y-axis from 0 to 500 Hz, time on x-axis from 0 to 1 sec, and a bright horizontal line at 100 Hz.
DA plot with frequency on x-axis and time on y-axis, showing a bright horizontal line at 100 Hz.
Attempts:
2 left
💡 Hint
Remember the spectrogram frequency axis goes from 0 to Nyquist frequency (fs/2).
🔧 Debug
advanced
2:00remaining
Why does this spectrogram plot show no signal?
The code below produces a spectrogram plot, but the plot is completely dark with no visible signal. What is the most likely cause?
Signal Processing
import numpy as np
import matplotlib.pyplot as plt
from scipy.signal import spectrogram
fs = 1000
t = np.linspace(0, 1, fs, endpoint=False)
signal = np.sin(2 * np.pi * 50 * t)
f, t_spec, Sxx = spectrogram(signal, fs=fs, nperseg=1024)
plt.pcolormesh(t_spec, f, 10 * np.log10(Sxx), shading='gouraud')
plt.show()
AThe sampling frequency fs is too low to capture 50 Hz signal.
BThe window size nperseg is larger than the signal length, causing no segments to be computed.
CThe signal is zero, so no power is shown.
DThe plotting function plt.pcolormesh is used incorrectly without axis labels.
Attempts:
2 left
💡 Hint
Check the relationship between signal length and nperseg parameter.
🚀 Application
expert
3:00remaining
How to detect time-varying frequency components using spectrogram?
You have a signal composed of two sine waves: one at 50 Hz active during the first half of the signal, and another at 150 Hz active during the second half. Which approach using spectrogram visualization best reveals these time-varying frequency components?
AUse a short window size (e.g., 64 samples) with overlap to get good time resolution and plot the spectrogram.
BUse a very long window size (e.g., 1024 samples) without overlap to get best frequency resolution.
CUse no windowing and plot the raw FFT of the entire signal.
DUse a window size equal to the entire signal length to maximize frequency resolution.
Attempts:
2 left
💡 Hint
Short windows improve time resolution but reduce frequency resolution.