They go on to deduce it's an off-by-one error in the time domain.
So instead of 0-127 it's processing 0-126 samples (a classing i < 127
instead of i <= 127
in a for loop)
https://social.treehouse.systems/@marcan/111160552044972689
The train of thought was:
- The aliasing is every 375 Hz.
- 48000 / 375 = 128 so this is some fourier thing with a block size 128???
- Wait no, this could be time domain, aliasing like that is what you get when you upsample without lowpassing.
- Specifically, when you upsample with zero-sample padding (standard), that is, when one sample out of 128 has the low frequency content.
- So this is like taking the average of a 128-sample block and adding it to just one sample?
- Wait, isn't that almost equivalent to zeroing out one sample?
numpy time
fs, signal = wavfile.read("sweep.wav")
signal[::128] = 0
wavfile.write("lol.wav", fs, signal)
And the rest is history.
Edit:
Stupid less-than symbol getting html-coded