Pitch detection algorithm in Signal Processing - Time & Space Complexity
We want to understand how the time needed to find the pitch changes as the audio length grows.
How does the work increase when we analyze longer sound signals?
Analyze the time complexity of the following code snippet.
// Simple pitch detection using autocorrelation
function pitchDetection(signal) {
let n = signal.length;
let autocorr = new Array(n).fill(0);
for (let lag = 0; lag < n; lag++) {
for (let i = 0; i < n - lag; i++) {
autocorr[lag] += signal[i] * signal[i + lag];
}
}
return autocorr;
}
This code calculates autocorrelation for each possible lag to find repeating patterns in the signal.
- Primary operation: Nested loops calculating autocorrelation sums.
- How many times: Outer loop runs n times; inner loop runs up to n times, decreasing with lag.
As the signal length grows, the number of calculations grows roughly with the square of the length.
| Input Size (n) | Approx. Operations |
|---|---|
| 10 | ~100 |
| 100 | ~10,000 |
| 1000 | ~1,000,000 |
Pattern observation: Doubling the input length roughly quadruples the work needed.
Time Complexity: O(n²)
This means the time to find the pitch grows quickly as the signal gets longer, roughly by the square of its length.
[X] Wrong: "The time grows linearly with the signal length because we just loop once."
[OK] Correct: There are actually two loops nested inside each other, so the work multiplies, not just adds.
Understanding how nested loops affect time helps you explain and improve signal processing tasks clearly.
"What if we used a fixed maximum lag instead of looping through the entire signal length? How would the time complexity change?"
Practice
pitch detection algorithm in signal processing?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 AQuick Check:
Pitch detection = main frequency [OK]
- Confusing pitch detection with noise removal
- Thinking pitch detection changes volume
- Mixing pitch detection with speech-to-text
x using numpy?Solution
Step 1: Recall numpy autocorrelation syntax
Autocorrelation usesnp.correlatewith 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') usesnp.correlate(x, x, mode='full'), which is correct syntax.Final Answer:
np.correlate(x, x, mode='full') -> Option BQuick Check:
Autocorrelation = np.correlate(x, x, 'full') [OK]
- Using non-existent function np.autocorr
- Missing second argument in np.correlate
- Wrong function name like np.correlation
pitch_period?
import numpy as np x = np.array([0, 1, 0, -1, 0, 1, 0, -1]) correlation = np.correlate(x, x, mode='full') mid = len(correlation) // 2 pitch_period = np.argmax(correlation[mid+1:]) + 1 print(pitch_period)
Solution
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), sonp.argmax(correlation[8:]) + 1 = 4.Final Answer:
4 -> Option DQuick Check:
Pitch period = 4 samples [OK]
- Choosing zero lag as pitch period
- Off-by-one error in indexing
- Misunderstanding correlation midpoint
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)
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 CQuick Check:
Max correlation at zero lag is not pitch period [OK]
- Taking max correlation at zero lag as pitch
- Ignoring lag indexing after midpoint
- Confusing normalization with lag selection
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 AQuick Check:
Frequency = 8000 / 160 = 50 Hz [OK]
- Dividing pitch period by sample rate instead
- Using sample rate as frequency directly
- Multiplying pitch period by sample rate
Ready to prove it?
Pass the test and this pattern moves unknown
