Bird
Raised Fist0
Signal Processingdata~5 mins

Pitch detection algorithm in Signal Processing - Time & Space Complexity

Choose your learning style10 modes available
Time Complexity: Pitch detection algorithm
O(n²)
Understanding Time 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?

Scenario Under Consideration

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.

Identify Repeating Operations
  • 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.
How Execution Grows With Input

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.

Final Time Complexity

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.

Common Mistake

[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.

Interview Connect

Understanding how nested loops affect time helps you explain and improve signal processing tasks clearly.

Self-Check

"What if we used a fixed maximum lag instead of looping through the entire signal length? How would the time complexity change?"

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

  1. Step 1: Understand pitch detection purpose

    Pitch detection algorithms analyze sound to find the fundamental frequency or main tone.
  2. 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.
  3. Final Answer:

    To find the main frequency or tone in a sound signal -> Option A
  4. 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

  1. Step 1: Recall numpy autocorrelation syntax

    Autocorrelation uses np.correlate with the same array twice and mode='full' for full result.
  2. 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.
  3. Final Answer:

    np.correlate(x, x, mode='full') -> Option B
  4. 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?
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)
medium
A. 2
B. 3
C. 1
D. 4

Solution

  1. Step 1: Understand autocorrelation output length and midpoint

    Input length is 8, so correlation length is 15, midpoint at index 7.
  2. 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.
  3. Final Answer:

    4 -> Option D
  4. 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

  1. 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.
  2. Step 2: Correct approach is to find max after midpoint

    Pitch period is lag > 0 with max correlation, so search only after midpoint.
  3. Final Answer:

    It finds the max correlation over full range including negative lags -> Option C
  4. 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

  1. Step 1: Understand pitch frequency formula

    Pitch frequency = sample rate divided by pitch period (in samples).
  2. Step 2: Calculate pitch frequency

    Pitch frequency = 8000 / 160 = 50 Hz.
  3. Final Answer:

    50 Hz, calculated as sample_rate / pitch_period -> Option A
  4. 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 unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard