• towerful@programming.dev
    link
    fedilink
    arrow-up
    11
    ·
    edit-2
    1 year ago

    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