Bird
Raised Fist0
Signal Processingdata~20 mins

Real-time DSP processing pipeline in Signal Processing - Practice Problems & Coding Challenges

Choose your learning style10 modes available
Challenge - 5 Problems
🎖️
Real-time DSP Master
Get all challenges correct to earn this badge!
Test your skills under time pressure!
❓ Predict Output
intermediate
2:00remaining
Output of a simple real-time filter code
What is the output array after applying this simple moving average filter on the input signal?
Signal Processing
import numpy as np

def moving_average(signal, window_size=3):
    filtered = []
    for i in range(len(signal)):
        window = signal[max(0, i - window_size + 1):i + 1]
        filtered.append(sum(window) / len(window))
    return np.array(filtered)

input_signal = np.array([1, 2, 3, 4, 5])
output_signal = moving_average(input_signal)
print(output_signal)
A[1.0, 1.5, 2.0, 2.5, 3.0]
B[1.0, 1.5, 2.0, 3.0, 4.0]
C[1.0, 2.0, 3.0, 4.0, 5.0]
D[2.0, 3.0, 4.0, 5.0, 6.0]
Attempts:
2 left
💡 Hint
Think about how the moving average window grows at the start of the signal.
❓ data_output
intermediate
1:30remaining
Number of samples after downsampling
Given a signal with 1000 samples, what is the length of the signal after downsampling by a factor of 4?
A1000
B4000
C996
D250
Attempts:
2 left
💡 Hint
Downsampling by 4 means keeping every 4th sample.
❓ visualization
advanced
2:30remaining
Identify the correct frequency spectrum plot
Which plot correctly shows the frequency spectrum of a 5 Hz sine wave sampled at 50 Hz?
Signal Processing
import numpy as np
import matplotlib.pyplot as plt

fs = 50  # Sampling frequency
f = 5    # Signal frequency

t = np.arange(0, 1, 1/fs)
signal = np.sin(2 * np.pi * f * t)

fft_vals = np.fft.fft(signal)
fft_freq = np.fft.fftfreq(len(signal), 1/fs)

plt.plot(fft_freq[:len(signal)//2], np.abs(fft_vals)[:len(signal)//2])
plt.xlabel('Frequency (Hz)')
plt.ylabel('Magnitude')
plt.title('Frequency Spectrum')
plt.show()
AMultiple peaks at 0 Hz and 50 Hz
BNo peaks, flat spectrum
CA single peak at 5 Hz
DA peak at 25 Hz
Attempts:
2 left
💡 Hint
The sine wave frequency should appear as a peak in the spectrum.
🔧 Debug
advanced
2:00remaining
Identify the error in this real-time filter code snippet
What error will this code raise when run?
Signal Processing
def real_time_filter(signal):
    filtered = []
    for i in range(len(signal)):
        filtered[i] = signal[i] * 0.5
    return filtered

print(real_time_filter([1, 2, 3]))
AIndexError: list assignment index out of range
BTypeError: unsupported operand type(s) for *: 'list' and 'float'
CNameError: name 'filtered' is not defined
DNo error, outputs [0.5, 1.0, 1.5]
Attempts:
2 left
💡 Hint
Look at how the list 'filtered' is used before any elements are added.
🚀 Application
expert
3:00remaining
Choosing the best approach for real-time DSP latency reduction
Which approach best reduces latency in a real-time DSP pipeline processing audio signals?
AUse smaller buffer sizes and optimize filter algorithms
BIncrease buffer sizes to process more samples at once
CAdd more complex filters to improve signal quality
DUse batch processing after recording all audio
Attempts:
2 left
💡 Hint
Lower latency means processing data faster with less delay.

Practice

(1/5)
1. What is the main purpose of a real-time DSP processing pipeline?
easy
A. To process signals step-by-step as data arrives
B. To store large amounts of data for later analysis
C. To generate random signals for testing
D. To visualize signals after processing is complete

Solution

  1. Step 1: Understand real-time processing

    Real-time DSP means processing data immediately as it comes in, not storing for later.
  2. Step 2: Identify pipeline purpose

    The pipeline processes signals step-by-step to analyze or clean them on the fly.
  3. Final Answer:

    To process signals step-by-step as data arrives -> Option A
  4. Quick Check:

    Real-time DSP = step-by-step processing [OK]
Hint: Real-time means processing data immediately as it arrives [OK]
Common Mistakes:
  • Confusing real-time with batch processing
  • Thinking pipeline stores data only
  • Assuming visualization is the main goal
2. Which of the following is the correct syntax to apply a moving average filter on a signal array data in Python using a window size of 3?
easy
A. filtered = [sum(data[i:i+3])*3 for i in range(len(data)-2)]
B. filtered = [sum(data[i:i+3])/3 for i in range(len(data)-2)]
C. filtered = [sum(data[i:i+3])/3 for i in range(len(data)+2)]
D. filtered = sum(data[i:i+3])/3 for i in range(len(data)-2)

Solution

  1. Step 1: Understand moving average filter

    It averages each group of 3 consecutive elements in the data.
  2. Step 2: Check syntax correctness

    filtered = [sum(data[i:i+3])/3 for i in range(len(data)-2)] correctly uses list comprehension with range(len(data)-2) and divides sum by 3.
  3. Final Answer:

    filtered = [sum(data[i:i+3])/3 for i in range(len(data)-2)] -> Option B
  4. Quick Check:

    Correct list comprehension with proper range and division [OK]
Hint: Use range(len(data)-window+1) for correct slicing [OK]
Common Mistakes:
  • Missing brackets for list comprehension
  • Using wrong range length causing index errors
  • Multiplying instead of dividing for average
3. Given the Python code below for a simple real-time DSP pipeline, what is the output of print(filtered_signal)?
signal = [1, 3, 5, 7, 9]
window_size = 2
filtered_signal = [ (signal[i] + signal[i+1]) / 2 for i in range(len(signal)-1) ]
print(filtered_signal)
medium
A. [1.0, 4.0, 6.0, 8.0]
B. [1.0, 3.0, 5.0, 7.0, 9.0]
C. [2.0, 4.0, 6.0, 8.0]
D. [3.0, 5.0, 7.0, 9.0]

Solution

  1. Step 1: Understand the list comprehension

    It averages each pair of consecutive elements: (signal[i] + signal[i+1]) / 2.
  2. Step 2: Calculate each average

    Pairs: (1+3)/2=2.0, (3+5)/2=4.0, (5+7)/2=6.0, (7+9)/2=8.0.
  3. Final Answer:

    [2.0, 4.0, 6.0, 8.0] -> Option C
  4. Quick Check:

    Pairwise averages = [2.0, 4.0, 6.0, 8.0] [OK]
Hint: Calculate pair averages step-by-step [OK]
Common Mistakes:
  • Including last element without pair
  • Confusing sum with average
  • Wrong range causing index error
4. The following code attempts to implement a moving average filter but raises an error. What is the error and how to fix it?
data = [2, 4, 6, 8]
window = 3
filtered = []
for i in range(len(data)):
    avg = (data[i] + data[i+1] + data[i+2]) / window
    filtered.append(avg)
print(filtered)
medium
A. IndexError because indexing goes beyond list end; fix by using range(len(data)-window+1)
B. ZeroDivisionError because window is zero; fix by setting window to 1
C. TypeError because sum cannot add list slices; fix by converting slice to list
D. No error; code runs correctly

Solution

  1. Step 1: Identify the error cause

    Loop runs till len(data), but indexing data[i+2] exceeds list length at end.
  2. Step 2: Fix the loop range

    Change loop to range(len(data)-window+1) to avoid out-of-range indexing.
  3. Final Answer:

    IndexError because indexing goes beyond list end; fix by using range(len(data)-window+1) -> Option A
  4. Quick Check:

    Loop range must prevent out-of-bound indexing [OK]
Hint: Loop till len(data)-window+1 for safe indexing [OK]
Common Mistakes:
  • Ignoring index bounds causing IndexError
  • Changing window size incorrectly
  • Assuming no error occurs
5. You want to build a real-time DSP pipeline that filters noise from a sensor signal using a moving average filter of window size 4, but the sensor sometimes sends fewer than 4 samples at once. How should you adapt your pipeline to handle this situation correctly?
hard
A. Use a fixed window size of 1 to avoid buffering
B. Apply the filter on whatever samples arrive, even if fewer than 4, without buffering
C. Discard any samples fewer than 4 and wait for a full batch
D. Process only when at least 4 samples are available; buffer incoming data until then

Solution

  1. Step 1: Understand window size requirement

    Moving average with window 4 needs 4 samples to compute an average.
  2. Step 2: Handle fewer samples in real-time

    Buffer incoming samples until at least 4 are collected, then apply filter.
  3. Step 3: Avoid incorrect averages

    Processing fewer samples without buffering gives wrong results; discarding loses data.
  4. Final Answer:

    Process only when at least 4 samples are available; buffer incoming data until then -> Option D
  5. Quick Check:

    Buffering ensures correct window size for filtering [OK]
Hint: Buffer data until window size reached before filtering [OK]
Common Mistakes:
  • Filtering with incomplete windows causing errors
  • Discarding useful data
  • Using window size 1 losing noise reduction benefits
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