This code creates a simple pulse sound and adds an echo 0.3 seconds later with 60% volume. The plot shows the original pulse and the echo effect.
Signal Processing
import numpy as np
import matplotlib.pyplot as plt
# Create a simple sound: a short pulse
fs = 1000# sample rate 1000 Hz
length = 1# 1 second
pulse = np.zeros(fs * length)
pulse[100] = 1# impulse at 0.1 seconds# Echo parameters
delay_time = 0.3# seconds
delay_samples = int(fs * delay_time)
decay = 0.6# Create echo signal
echo_signal = np.copy(pulse)
echo_signal[delay_samples:] += decay * pulse[:-delay_samples]
# Plot original and echo
plt.figure(figsize=(8, 3))
plt.plot(pulse, label='Original Pulse')
plt.plot(echo_signal, label='Pulse with Echo')
plt.legend()
plt.title('Echo Effect on a Pulse Signal')
plt.xlabel('Sample Number')
plt.ylabel('Amplitude')
plt.tight_layout()
plt.show()
OutputSuccess
Important Notes
Echo is a single or few delayed repeats of the sound.
Reverb is many quick echoes that blend together to create a sense of space.
Decay factor controls how loud the echo or reverb is compared to the original sound.
Summary
Echo and reverb add depth and space to audio.
Echo is a delayed repeat; reverb is many quick repeats.
They are created by mixing the original sound with delayed, quieter copies.
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
Step 1: Understand echo effect
Echo is created by adding a single delayed repeat of the original sound.
Step 2: Understand reverb effect
Reverb is created by adding many quick, overlapping repeats that simulate space.
Final Answer:
Echo is a single delayed repeat; reverb is many quick repeats. -> Option A
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
Step 1: Understand echo formula
Echo effect adds the original signal plus a delayed, scaled copy: signal + alpha * delayed_signal.
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.
Final Answer:
echoed = signal + alpha * np.roll(signal, d) -> Option B
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
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.
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
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.
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.
Final Answer:
Using np.roll shifts the signal incorrectly for reverb. -> Option D
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
Step 1: Understand reverb mixing
Reverb mixes original plus delayed signals scaled by decay factors in order of delay.
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).
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.
Final Answer:
output = signal + 0.6*np.roll(signal,1) + 0.3*np.roll(signal,2) + 0.1*np.roll(signal,3) -> Option C
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 unknownstrongwhile earning +1 Grip toward your certificate.