Prelab 5 - Resampling

Summary

When Cher's song "Believe" hit shelves on October 22, 1998, music changed forever. Cher's single sold 11 million copies worldwide, earned her a Grammy Award, and topped the charts in 23 countries. Auto-Tune is the algorithm behind the success of "Believe". It was created by an ECE Illinois PhD alum, Dr. Andy Hildebrand. He came up with the idea of using autocorrelation to do pitch correction while working as an oil engineer at Exxon. We will explore a variant of Auto-Tune in more detail in the lab.

In this prelab, we will try a naive pitch-shifting method: lowering the pitch by a factor of 3 and increasing the pitch by a factor of 2 using resampling.

Downloads

Submission Instruction

Refer to the Submission Instruction page for more information.

Part 1 - Upsample by 3x

Upsampling a signal by a factor of 3 means inserting 2 zeros between each sample. For example, we insert zeros in this 20-sample frame:

and get a 60-sample signal:

Assignment 1

Load the given test audio and upsample by 3x. Plot the FFT of the original signal and the zero-inserted signal.

Note

The test audio is stereo, meaning it has two channels. You can conver it to monotone with data = data[:, 0].

Question

  • What is the relationship between the original signal's FFT and the upsampled signal's FFT?
  • How do we preserve the original information without introducing aliasing?

Part 2 - Downsample by 2x

Downsampling a signal by a factor of 2 means removing every other sample. When played back at the same sampling rate, this results in a signal that sounds higher-pitched

Assignment 2

Load the given test audio and downsample by 2x. Plot the FFT of the original signal and the downsampled signal.

Question

  • What is the relationship between the original signal's FFT and the downsampled signal's FFT?
  • How do we preserve the original information without introducing aliasing?

Part 3 - Playback

Parts 1 and 2 (along with a couple other components) can be chained together to implement a resampler of any ratio . To get some intuition for the output of a resampled signal, we will use SciPy's resampling function scipy.signal.resample_poly. This can be called with the following code:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
from scipy import signal
from scipy.io.wavfile import read
from IPython.display import Audio

Fs, data = read('test_audio.wav')
data = data[:, 0]

up_ratio = ??
down_ratio = ??

output = signal.resample_poly(data, up_ratio, down_ratio)

Audio(output, rate=Fs)

Assignment 3

Try a few resampling ratios, including at least .

Question

What does the resulting audio sound like? Be specific in your response. How do the vocal characteristics of the singer change?

Part 4 - Preview

In lab 5, we will be implementing a cool autotune app using the method called TD-PSOLA. Please watch this ~5 minutes video on doing TD-PSOLA by hand which is very helpful for getting an intuitive understanding of TD-PSOLA.

Grading

Prelab 5 will be graded as follows:

  • Assignment 1 [0.75 point]

    Plots of FFT of the original and upsampled signal [0.5 point]

    Short answer question [0.25 point]

  • Assignment 2 [0.75 point]

    Plots of FFT of the original and downsampled signal [0.5 point]

    Short answer question [0.25 point]

  • Assignment 3 [0.5 point]

    Playback different resampling ratios [0.25 point]

    Short answer question [0.25 point]