On Fri, Aug 28, 2015 at 11:02 AM, Joseph Codadeen <jdmc80@hotmail.com> wrote:

I am a numpy newbie.

I have two wav files, one that numpy takes a long time to process the FFT. They was created within audacity using white noise and silence for gaps.

  1. my_1_minute_noise_with_gaps.wav
  2. my_1_minute_noise_with_gaps_truncated.wav

The files are very similar in the following way;

  • 1. is white noise with silence gaps on every 15 second interval.
  • 2. is 1. but slightly shorter, i.e. I trimmed some ms off the end but it still has the last gap at 60s.

The code I am using processes the file like this;

    framerate, data = scipy.io.wavfile.read(filepath)
    right = data[:, 0]
    # Align it to be efficient.
    if len(right) % 2 != 0:
        right = right[range(len(right) - 1)]
    noframes = len(right)
    fftout = np.fft.fft(right) / noframes    # <<< I am timing this cmd

Using timeit...

  • my_1_minute_noise_with_gaps_truncated took 30.75620985s to process.
  • my_1_minute_noise_with_gaps took 22307.13917s to process.

Could someone tell me why this behaviour is happening please?

Sorry I can't attach the files as this email gets bounced but you could easily create the files yourself.
E.g my last gap width is 59.9995 - 1:00.0005, I repeat this every 15 seconds.
My truncated file is 1:00.0015s long, non-truncated is 1:00.0833s long

It is almost certainly caused by the number of samples in your signals, i.e. look at what noframes is in one case and the other.

You will get best performance when noframes is a power of two, or has a factorization that includes many small integers (2, 3, 5, perhaps also 7), and the worst if the size is a prime number.


( O.o)
( > <) Este es Conejo. Copia a Conejo en tu firma y ayúdale en sus planes de dominación mundial.