Bird
Raised Fist0
Signal Processingdata~5 mins

Sample rate conversion basics in Signal Processing

Choose your learning style10 modes available
Introduction

Sample rate conversion changes how often a signal is measured. This helps match different devices or improve signal quality.

When you want to play audio recorded at one speed on a device that uses a different speed.
When combining signals from different sources that have different sample rates.
When reducing file size by lowering the sample rate without losing too much quality.
When preparing data for analysis that requires a specific sample rate.
When improving signal quality by increasing the sample rate before processing.
Syntax
Signal Processing
num = int(len(x) * p / q)
y = resample(x, num)

# x: input signal array
# p: upsampling factor (integer)
# q: downsampling factor (integer)
# y: output signal with new sample rate

Upsampling means increasing the sample rate by inserting new samples.

Downsampling means reducing the sample rate by removing samples.

Examples
This doubles the sample rate by upsampling by 2 and no downsampling.
Signal Processing
y = resample(x, int(len(x) * 2 / 1))
This halves the sample rate by downsampling by 2 and no upsampling.
Signal Processing
y = resample(x, int(len(x) * 1 / 2))
This changes the sample rate by 1.5 times (upsample by 3, downsample by 2).
Signal Processing
y = resample(x, int(len(x) * 3 / 2))
Sample Program

This code creates a sine wave sampled at 50 Hz. Then it upsamples it to 100 Hz by doubling the number of samples using resample. It prints the number of samples before and after, and shows the first 5 samples of each signal.

Signal Processing
import numpy as np
from scipy.signal import resample

# Create a simple signal: 5 Hz sine wave sampled at 50 Hz
fs_original = 50
t = np.linspace(0, 1, fs_original, endpoint=False)
x = np.sin(2 * np.pi * 5 * t)

# Change sample rate from 50 Hz to 100 Hz (upsample by 2)
p = 2
q = 1
num_samples_new = int(len(x) * p / q)
y = resample(x, num_samples_new)

print(f"Original samples: {len(x)}")
print(f"New samples after resampling: {len(y)}")
print(f"First 5 samples of original signal: {x[:5]}")
print(f"First 5 samples of resampled signal: {y[:5]}")
OutputSuccess
Important Notes

Resampling can introduce small changes in the signal shape due to interpolation.

Always check the new sample rate matches your target device or analysis needs.

Summary

Sample rate conversion changes how often a signal is measured.

Upsampling adds samples; downsampling removes samples.

Use resampling to match devices or improve signal processing.

Practice

(1/5)
1. What does sample rate conversion do in signal processing?
easy
A. Changes how often a signal is measured
B. Changes the signal's amplitude
C. Changes the signal's frequency content
D. Changes the signal's phase

Solution

  1. Step 1: Understand sample rate meaning

    Sample rate is how many times per second a signal is measured or sampled.
  2. Step 2: Define sample rate conversion

    Sample rate conversion changes this measurement rate, either increasing or decreasing it.
  3. Final Answer:

    Changes how often a signal is measured -> Option A
  4. Quick Check:

    Sample rate conversion = Changes measurement rate [OK]
Hint: Sample rate conversion changes measurement frequency [OK]
Common Mistakes:
  • Confusing sample rate with signal amplitude
  • Thinking it changes signal frequency content
  • Mixing phase changes with sample rate changes
2. Which of the following is the correct Python syntax to upsample a signal by a factor of 2 using scipy.signal.resample_poly?
easy
A. resample_poly(signal, up=1, down=2)
B. resample_poly(signal, up=2, down=1)
C. resample_poly(signal, rate=2)
D. resample_poly(signal, down=2)

Solution

  1. Step 1: Recall resample_poly parameters

    The function uses 'up' to increase sample rate and 'down' to decrease it.
  2. Step 2: Identify upsampling by 2

    To upsample by 2, set up=2 and down=1 to keep original rate multiplied by 2.
  3. Final Answer:

    resample_poly(signal, up=2, down=1) -> Option B
  4. Quick Check:

    Upsample factor = up=2, down=1 [OK]
Hint: Upsample means up>down, so up=2, down=1 [OK]
Common Mistakes:
  • Swapping up and down values
  • Omitting required parameters
  • Using only up or down without the other
3. Given a signal sampled at 1000 Hz, what will be the new sample rate after applying resample_poly(signal, up=3, down=2)?
medium
A. 1500 Hz
B. 2000 Hz
C. 500 Hz
D. 3000 Hz

Solution

  1. Step 1: Understand resample_poly rate change

    The new sample rate = original rate * (up / down).
  2. Step 2: Calculate new sample rate

    1000 Hz * (3 / 2) = 1500 Hz.
  3. Final Answer:

    1500 Hz -> Option A
  4. Quick Check:

    1000 * 3/2 = 1500 Hz [OK]
Hint: Multiply original rate by up/down ratio [OK]
Common Mistakes:
  • Multiplying by down/up instead of up/down
  • Forgetting to multiply by original rate
  • Confusing sample rate with signal length
4. What is wrong with this code snippet for downsampling a signal by 4?
from scipy.signal import resample_poly
new_signal = resample_poly(signal, up=1, down=4)
medium
A. It will cause a syntax error due to missing import
B. The up parameter should be 4, not 1
C. It may cause aliasing without proper filtering
D. The down parameter should be 1, not 4

Solution

  1. Step 1: Check code correctness

    The code syntax is correct and imports resample_poly properly.
  2. Step 2: Understand downsampling risks

    Downsampling by 4 reduces sample rate, which can cause aliasing if signal is not filtered.
  3. Final Answer:

    It may cause aliasing without proper filtering -> Option C
  4. Quick Check:

    Downsampling needs filtering to avoid aliasing [OK]
Hint: Downsampling needs filtering to prevent aliasing [OK]
Common Mistakes:
  • Assuming code syntax error
  • Confusing up and down parameters
  • Ignoring aliasing effects
5. You have a 44100 Hz audio signal and want to convert it to 16000 Hz for a speech recognition system. Which combination of up and down factors correctly resamples the signal using resample_poly?
hard
A. up=1600, down=441
B. up=44100, down=16000
C. up=160, down=4410
D. up=160, down=441

Solution

  1. Step 1: Calculate ratio for resampling

    The ratio is new_rate / old_rate = 16000 / 44100 ≈ 0.3628.
  2. Step 2: Find integer up/down factors

    Scaling both by 1000 gives up=160, down=441, which approximates the ratio well.
  3. Final Answer:

    up=160, down=441 -> Option D
  4. Quick Check:

    160/441 ≈ 0.3628 matches 16000/44100 [OK]
Hint: Simplify ratio new_rate/old_rate to small integers [OK]
Common Mistakes:
  • Using raw sample rates as up/down without simplification
  • Swapping up and down values
  • Choosing factors that don't approximate ratio
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