๐ Scenario: Imagine you are building a simple tool to detect the pitch (frequency) of a musical note from a short audio signal. This is useful in music apps to identify notes played on an instrument.
๐ฏ Goal: You will create a small program that takes a list of audio sample values, sets a threshold for peak detection, finds the peaks in the signal, and calculates the pitch frequency based on the time between peaks.
๐ What You'll Learn
Create a list of audio samples representing a simple waveform
Set a threshold value to detect peaks in the waveform
Write a loop to find indices of peaks above the threshold
Calculate the pitch frequency from the average distance between peaks
Print the detected pitch frequency
๐ก Why This Matters
๐ Real World
Pitch detection is used in music apps, tuning instruments, and speech analysis to identify the note or tone frequency.
๐ผ Career
Understanding pitch detection algorithms is useful for audio engineers, music software developers, and data scientists working with sound data.
Progress0 / 4 steps
1
Create the audio sample data
Create a list called audio_samples with these exact values: [0, 1, 3, 7, 4, 2, 0, 1, 4, 8, 4, 3, 1, 0] representing a simple waveform.
Signal Processing
Hint
Use square brackets to create a list and type the numbers exactly as shown.
2
Set the peak detection threshold
Create a variable called threshold and set it to 5 to detect peaks above this value.
Signal Processing
Hint
Just assign the number 5 to the variable named threshold.
3
Find peaks above the threshold
Create a list called peak_indices that contains the indices of audio_samples where the value is greater than threshold. Use a for loop with i as the index variable and value as the sample value.
Signal Processing
Hint
Use enumerate(audio_samples) to get index and value, then check if value > threshold.
4
Calculate and print the pitch frequency
Calculate the average distance between consecutive peaks in peak_indices and store it in avg_distance. Then calculate the pitch frequency as sample_rate / avg_distance where sample_rate is 1000. Finally, print the pitch frequency rounded to 2 decimal places using print(f"Pitch frequency: {pitch:.2f} Hz").
Signal Processing
Hint
Calculate intervals between peaks, average them, then divide sample_rate by average distance.
Practice
(1/5)
1. What is the main goal of a pitch detection algorithm in signal processing?
easy
A. To find the main frequency or tone in a sound signal
B. To remove noise from a sound signal
C. To increase the volume of a sound signal
D. To convert sound into text
Solution
Step 1: Understand pitch detection purpose
Pitch detection algorithms analyze sound to find the fundamental frequency or main tone.
Step 2: Compare options to definition
Only To find the main frequency or tone in a sound signal describes finding the main frequency, which matches pitch detection's goal.
Final Answer:
To find the main frequency or tone in a sound signal -> Option A
Quick Check:
Pitch detection = main frequency [OK]
Hint: Pitch detection finds the main tone frequency [OK]
Common Mistakes:
Confusing pitch detection with noise removal
Thinking pitch detection changes volume
Mixing pitch detection with speech-to-text
2. Which of the following is the correct Python syntax to compute the autocorrelation of a signal array x using numpy?
easy
A. np.autocorr(x)
B. np.correlate(x, x, mode='full')
C. np.correlation(x, x)
D. np.correlate(x)
Solution
Step 1: Recall numpy autocorrelation syntax
Autocorrelation uses np.correlate with the same array twice and mode='full' for full result.
Step 2: Check options for correct function and parameters
Only np.correlate(x, x, mode='full') uses np.correlate(x, x, mode='full'), which is correct syntax.
Final Answer:
np.correlate(x, x, mode='full') -> Option B
Quick Check:
Autocorrelation = np.correlate(x, x, 'full') [OK]
Hint: Use np.correlate(x, x, mode='full') for autocorrelation [OK]
Common Mistakes:
Using non-existent function np.autocorr
Missing second argument in np.correlate
Wrong function name like np.correlation
3. Given the following Python code snippet for pitch detection using autocorrelation, what is the output of pitch_period?
Step 1: Understand autocorrelation output length and midpoint
Input length is 8, so correlation length is 15, midpoint at index 7.
Step 2: Find max correlation lag after midpoint
Correlation peaks at lag 4 (pattern repeats every 4 samples), so np.argmax(correlation[8:]) + 1 = 4.
Final Answer:
4 -> Option D
Quick Check:
Pitch period = 4 samples [OK]
Hint: Pitch period = lag with highest autocorrelation after zero lag [OK]
Common Mistakes:
Choosing zero lag as pitch period
Off-by-one error in indexing
Misunderstanding correlation midpoint
4. The following code attempts to find the pitch period but gives incorrect results. What is the main error?
import numpy as np
x = np.array([0, 1, 0, -1, 0, 1, 0, -1])
correlation = np.correlate(x, x, mode='full')
pitch_period = np.argmax(correlation) # Incorrect line
print(pitch_period)
medium
A. It should use np.min instead of np.argmax
B. It uses the wrong input array for correlation
C. It finds the max correlation over full range including negative lags
D. It misses normalizing the correlation
Solution
Step 1: Analyze np.argmax usage on full correlation
Using np.argmax on full correlation finds max at zero lag (center), not pitch period lag.
Step 2: Correct approach is to find max after midpoint
Pitch period is lag > 0 with max correlation, so search only after midpoint.
Final Answer:
It finds the max correlation over full range including negative lags -> Option C
Quick Check:
Max correlation at zero lag is not pitch period [OK]
Hint: Search max correlation only after zero lag index [OK]
Common Mistakes:
Taking max correlation at zero lag as pitch
Ignoring lag indexing after midpoint
Confusing normalization with lag selection
5. You have a recorded audio signal sampled at 8000 Hz. Using autocorrelation, you find the pitch period is 160 samples. What is the pitch frequency in Hz? How would you calculate it?
hard
A. 50 Hz, calculated as sample_rate / pitch_period
B. 160 Hz, calculated as pitch_period / sample_rate
C. 8000 Hz, the sample rate itself
D. 0.02 Hz, calculated as pitch_period * sample_rate
Solution
Step 1: Understand pitch frequency formula
Pitch frequency = sample rate divided by pitch period (in samples).
Step 2: Calculate pitch frequency
Pitch frequency = 8000 / 160 = 50 Hz.
Final Answer:
50 Hz, calculated as sample_rate / pitch_period -> Option A
Quick Check:
Frequency = 8000 / 160 = 50 Hz [OK]
Hint: Pitch frequency = sample rate รท pitch period [OK]
Common Mistakes:
Dividing pitch period by sample rate instead
Using sample rate as frequency directly
Multiplying pitch period by sample rate
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.