0
0
SciPydata~20 mins

Why signal processing extracts information in SciPy - Challenge Your Understanding

Choose your learning style9 modes available
Challenge - 5 Problems
🎖️
Signal Processing Mastery
Get all challenges correct to earn this badge!
Test your skills under time pressure!
Predict Output
intermediate
2:00remaining
Output of Fourier Transform on a Simple Signal
What is the output magnitude array of the Fourier Transform applied to a simple sine wave signal?
SciPy
import numpy as np
from scipy.fft import fft

# Create a sine wave signal
fs = 100  # Sampling frequency
f = 5     # Frequency of sine wave
x = np.linspace(0, 1, fs, endpoint=False)
signal = np.sin(2 * np.pi * f * x)

# Compute Fourier Transform
fft_result = fft(signal)
magnitude = np.abs(fft_result)
print(magnitude[:10])
A[0.0, 50.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]
B[2.5e-15, 50.0, 1.2e-15, 1.1e-15, 1.0e-15, 1.0e-15, 1.1e-15, 1.2e-15, 1.3e-15, 1.4e-15]
C[2.5e-15, 0.0, 0.0, 0.0, 0.0, 50.0, 0.0, 0.0, 0.0, 0.0]
D[0.0, 25.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]
Attempts:
2 left
💡 Hint
Look for the peak magnitude at the frequency of the sine wave.
data_output
intermediate
2:00remaining
Number of Peaks Detected in a Noisy Signal
Given a noisy signal with multiple peaks, how many peaks does the scipy.signal.find_peaks function detect?
SciPy
import numpy as np
from scipy.signal import find_peaks

np.random.seed(0)
x = np.linspace(0, 6*np.pi, 1000)
signal = np.sin(x) + 0.5 * np.sin(3*x) + 0.2 * np.random.normal(size=1000)
peaks, _ = find_peaks(signal, height=0.5)
print(len(peaks))
A6
B9
C12
D15
Attempts:
2 left
💡 Hint
Consider the combined frequencies and the threshold height parameter.
visualization
advanced
3:00remaining
Visualizing the Effect of a Low-Pass Filter
Which plot correctly shows the effect of applying a low-pass Butterworth filter to a noisy signal?
SciPy
import numpy as np
import matplotlib.pyplot as plt
from scipy.signal import butter, filtfilt

fs = 500
x = np.linspace(0, 1, fs, endpoint=False)
signal = np.sin(2*np.pi*5*x) + 0.5*np.sin(2*np.pi*50*x) + 0.3*np.random.normal(size=fs)

b, a = butter(4, 10, btype='low', fs=fs)
filtered = filtfilt(b, a, signal)

plt.figure(figsize=(10, 4))
plt.plot(x, signal, label='Noisy Signal')
plt.plot(x, filtered, label='Filtered Signal', linewidth=2)
plt.legend()
plt.title('Low-Pass Filter Effect')
plt.xlabel('Time [s]')
plt.ylabel('Amplitude')
plt.show()
APlot shows noisy signal with high-frequency noise and filtered signal smooth with only low-frequency components.
BPlot shows filtered signal with amplified high-frequency noise compared to original.
CPlot shows filtered signal identical to noisy signal with no smoothing.
DPlot shows filtered signal with added random noise spikes.
Attempts:
2 left
💡 Hint
Low-pass filters remove high-frequency noise, leaving smooth low-frequency signals.
🧠 Conceptual
advanced
1:30remaining
Why Signal Processing Extracts Information
Why does signal processing help extract meaningful information from raw data?
ABecause it transforms data to highlight patterns and reduce noise, making features clearer.
BBecause it compresses data without any loss of information.
CBecause it converts data into random noise to test system robustness.
DBecause it removes all data except the largest values, making analysis simpler.
Attempts:
2 left
💡 Hint
Think about how filtering and transformations help reveal hidden patterns.
🔧 Debug
expert
2:30remaining
Identify the Error in Signal Filtering Code
What error does the following code produce when applying a Butterworth filter, and why? import numpy as np from scipy.signal import butter, filtfilt fs = 100 x = np.linspace(0, 1, fs, endpoint=False) signal = np.sin(2 * np.pi * 10 * x) b, a = butter(4, 60, btype='low', fs=fs) filtered_signal = filtfilt(b, a, signal) print(filtered_signal[:5])
SciPy
import numpy as np
from scipy.signal import butter, filtfilt

fs = 100
x = np.linspace(0, 1, fs, endpoint=False)
signal = np.sin(2 * np.pi * 10 * x)

b, a = butter(4, 60, btype='low', fs=fs)
filtered_signal = filtfilt(b, a, signal)
print(filtered_signal[:5])
ANo error, code runs and prints filtered signal values.
BTypeError: butter() got an unexpected keyword argument 'fs'.
CRuntimeWarning: Filter coefficients are unstable causing NaN values in output.
DValueError: The critical frequency must be 0 < Wn < fs/2 because 60 is above Nyquist frequency.
Attempts:
2 left
💡 Hint
Check the critical frequency relative to the sampling frequency.