Bird
Raised Fist0
Signal Processingdata~10 mins

Echo and reverb effects in Signal Processing - Interactive Code Practice

Choose your learning style10 modes available
Practice - 5 Tasks
Answer the questions below
1fill in blank
easy

Complete the code to create a delayed echo by adding the original signal to a delayed version.

Signal Processing
echo_signal = original_signal + [1]
Drag options to blanks, or click blank then click option'
Anp.zeros_like(original_signal)
Boriginal_signal * delay_samples
Coriginal_signal - delay_samples
Dnp.roll(original_signal, delay_samples)
Attempts:
3 left
💡 Hint
Common Mistakes
Multiplying the signal by delay_samples instead of shifting it.
Subtracting delay_samples from the signal, which is invalid.
Using zeros instead of a delayed signal.
2fill in blank
medium

Complete the code to apply a decay factor to the delayed echo signal.

Signal Processing
echo_signal = original_signal + [1] * np.roll(original_signal, delay_samples)
Drag options to blanks, or click blank then click option'
A1.5
Bdecay
Cdelay_samples
Doriginal_signal
Attempts:
3 left
💡 Hint
Common Mistakes
Using the delay_samples as decay, which is incorrect.
Using a value greater than 1, which amplifies instead of decays.
Multiplying by the original signal again instead of decay.
3fill in blank
hard

Fix the error in the code to correctly create a reverb effect by summing multiple delayed signals with decay.

Signal Processing
reverb_signal = original_signal
for i in range(1, num_echoes):
    reverb_signal += [1] * np.roll(original_signal, i * delay_samples)
Drag options to blanks, or click blank then click option'
Adecay ** i
Bdecay * i
Ci ** decay
Ddecay + i
Attempts:
3 left
💡 Hint
Common Mistakes
Multiplying decay by i instead of using exponential decay.
Adding decay and i, which does not reduce amplitude properly.
Raising i to the power of decay, which reverses the intended effect.
4fill in blank
hard

Fill both blanks to create a dictionary comprehension that maps each echo number to its delayed and decayed signal.

Signal Processing
echoes = {i: [1] * np.roll(original_signal, i * [2]) for i in range(1, num_echoes)}
Drag options to blanks, or click blank then click option'
Adecay ** i
Bdelay_samples
Cdecay * i
Dnum_echoes
Attempts:
3 left
💡 Hint
Common Mistakes
Using linear decay instead of exponential decay.
Using num_echoes as delay, which is incorrect.
Mixing up decay and delay variables.
5fill in blank
hard

Fill all three blanks to combine all echoes into a single reverb signal using sum and dictionary comprehension.

Signal Processing
reverb_signal = original_signal + sum([1]: [2] * np.roll(original_signal, [3] * delay_samples) for [1] in range(1, num_echoes)})
Drag options to blanks, or click blank then click option'
Ai
Bdecay ** i
Dnum_echoes
Attempts:
3 left
💡 Hint
Common Mistakes
Using different variable names inconsistently.
Not raising decay to the power of i.
Using num_echoes as the delay multiplier.

Practice

(1/5)
1. What is the main difference between echo and reverb effects in audio processing?
easy
A. Echo is a single delayed repeat; reverb is many quick repeats.
B. Echo is louder than the original sound; reverb is quieter.
C. Echo removes the original sound; reverb enhances it.
D. Echo happens instantly; reverb has a long delay.

Solution

  1. Step 1: Understand echo effect

    Echo is created by adding a single delayed repeat of the original sound.
  2. Step 2: Understand reverb effect

    Reverb is created by adding many quick, overlapping repeats that simulate space.
  3. Final Answer:

    Echo is a single delayed repeat; reverb is many quick repeats. -> Option A
  4. Quick Check:

    Echo vs Reverb difference = single vs many repeats [OK]
Hint: Echo = one delay; reverb = many quick delays [OK]
Common Mistakes:
  • Confusing echo with reverb as the same effect
  • Thinking echo is louder than original
  • Believing reverb removes original sound
2. Which of the following Python code snippets correctly applies a simple echo effect to an audio signal array signal with delay d and decay factor alpha?
easy
A. echoed = signal * alpha + np.roll(signal, d)
B. echoed = signal + alpha * np.roll(signal, d)
C. echoed = np.roll(signal, d) + alpha
D. echoed = signal + np.roll(signal, alpha)

Solution

  1. Step 1: Understand echo formula

    Echo effect adds the original signal plus a delayed, scaled copy: signal + alpha * delayed_signal.
  2. Step 2: Check code correctness

    echoed = signal + alpha * np.roll(signal, d) uses np.roll(signal, d) to delay and multiplies by alpha, then adds to original signal correctly.
  3. Final Answer:

    echoed = signal + alpha * np.roll(signal, d) -> Option B
  4. Quick Check:

    Correct echo formula = original + alpha * delayed [OK]
Hint: Echo = original + alpha * delayed signal [OK]
Common Mistakes:
  • Multiplying original signal by alpha instead of delayed
  • Using alpha as delay index
  • Adding alpha as a scalar instead of scaling delayed signal
3. Given the following Python code applying a simple echo effect, what will be the value of output[3]?
import numpy as np
signal = np.array([1, 2, 3, 4, 5])
delay = 2
alpha = 0.5
output = signal + alpha * np.roll(signal, delay)
medium
A. 5.0
B. 4.5
C. 3.5
D. 2.5

Solution

  1. Step 1: Calculate delayed signal at index 3

    np.roll(signal, 2) shifts signal by 2: [4, 5, 1, 2, 3]. At index 3, delayed value is 2.
  2. Step 2: Calculate output at index 3

    output[3] = signal[3] + alpha * delayed[3] = 4 + 0.5 * 2 = 4 + 1 = 5.0
  3. Final Answer:

    5.0 -> Option A
  4. Quick Check:

    4 + 0.5*2 = 5.0 [OK]
Hint: Add original + alpha * delayed at index [OK]
Common Mistakes:
  • Mixing up indices after roll
  • Forgetting to multiply delayed by alpha
  • Using wrong delay value
4. The following code attempts to create a reverb effect by mixing multiple delayed signals, but it produces unrealistic results. What is the main issue?
import numpy as np
signal = np.array([1, 2, 3, 4, 5])
delays = [1, 2, 3]
alpha = 0.5
output = signal
for d in delays:
    output += alpha * np.roll(signal, d)
medium
A. The variable output is not initialized as a float array, causing type errors.
B. The += operator cannot be used with numpy arrays.
C. The loop should multiply alpha by d, not signal.
D. Using np.roll shifts the signal incorrectly for reverb.

Solution

  1. Step 1: Identify the issue with np.roll

    np.roll(signal, d) performs a circular shift, wrapping the end of the signal to the start, which creates unrealistic artifacts in reverb simulation.
  2. Step 2: Proper approach for reverb delays

    To simulate true delays, pad the signal with zeros instead of using circular roll to avoid wrap-around.
  3. Final Answer:

    Using np.roll shifts the signal incorrectly for reverb. -> Option D
  4. Quick Check:

    np.roll = circular shift [unsuitable for reverb] [OK]
Hint: np.roll wraps around; use zero-padding for delays [OK]
Common Mistakes:
  • Using circular np.roll for linear delays
  • Ignoring wrap-around artifacts in reverb
  • Thinking data types cause issues
5. You want to create a reverb effect by mixing the original audio signal with 3 delayed copies at delays 1, 2, and 3 samples, each with decreasing decay factors 0.6, 0.3, and 0.1 respectively. Which Python code correctly implements this?
hard
A. output = signal + 0.1*np.roll(signal,1) + 0.3*np.roll(signal,2) + 0.6*np.roll(signal,3)
B. output = signal * (0.6 + 0.3 + 0.1) + np.roll(signal,1) + np.roll(signal,2) + np.roll(signal,3)
C. output = signal + 0.6*np.roll(signal,1) + 0.3*np.roll(signal,2) + 0.1*np.roll(signal,3)
D. output = signal + np.roll(signal,1)*0.1 + np.roll(signal,2)*0.3 + np.roll(signal,3)*0.6

Solution

  1. Step 1: Understand reverb mixing

    Reverb mixes original plus delayed signals scaled by decay factors in order of delay.
  2. Step 2: Match decay factors to delays

    Decay 0.6 for delay 1, 0.3 for delay 2, 0.1 for delay 3 matches output = signal + 0.6*np.roll(signal,1) + 0.3*np.roll(signal,2) + 0.1*np.roll(signal,3).
  3. Step 3: Check code correctness

    output = signal + 0.6*np.roll(signal,1) + 0.3*np.roll(signal,2) + 0.1*np.roll(signal,3) adds original signal plus each delayed signal multiplied by correct decay factor.
  4. Final Answer:

    output = signal + 0.6*np.roll(signal,1) + 0.3*np.roll(signal,2) + 0.1*np.roll(signal,3) -> Option C
  5. Quick Check:

    Decay factors match delays in order [OK]
Hint: Match decay factors to delays in order when adding [OK]
Common Mistakes:
  • Mixing decay factors with wrong delays
  • Multiplying original signal by sum of decays
  • Reversing decay order
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