Python SciPy convolve vs fftconvolve

8

Ich weiß allgemein, FFT and multiplication ist normalerweise schneller als direkte convolve Operation, wenn das Array relativ groß ist. Allerdings falte ich ein sehr langes Signal (sagen wir 10 Millionen Punkte) mit einer sehr kurzen Antwort (sagen wir 1 tausend Punkte). In diesem Fall scheint fftconvolve wenig sinnvoll zu sein, da es eine FFT des zweiten Arrays auf die gleiche Größe wie das erste Array zwingt. Ist es in diesem Fall schneller, direkt zu falten?

    
LWZ 22.02.2013, 06:54
quelle

3 Antworten

6

Sieh dir den Vergleich an, den ich hier gemacht habe:

Ссылка

Ihr Fall könnte sich in der Nähe des Übergangs zwischen der Verwendung einer einfachen Faltung und der Verwendung der FFT-basierten Faltung befinden. Daher ist Ihre beste Wette (wie von @Dougal in einem Kommentar vorgeschlagen), die Zeit selbst zu bestimmen.

(Beachten Sie, dass ich in diesem Vergleich keine Überlappungsaddition oder Überlappungsspeicherung durchgeführt habe.)

    
Warren Weckesser 22.02.2013 17:06
quelle
3

danke für deine Hilfe. Jetzt habe ich den Test selbst gemacht, ich habe Faltung mit 2 Arrays, Größe 2 ^ 20 und 2 ^ 4, und das ist das Ergebnis:

%Vor%

So haben wir einen Gewinner, numpy Convolve ist viel schneller als die anderen. Ich weiß immer noch nicht warum.

Jetzt habe ich 2 längere Arrays, Größe von 2 ^ 22 und 2 ^ 10 versucht. Das Ergebnis ist:

%Vor%

Der Unterschied wird nur größer.

    
LWZ 05.03.2013 06:36
quelle
2

Eine schnelle FFT-Faltung über die Überlappungsadditions- oder Überlappungssicherungsalgorithmen kann in einem begrenzten Speicher durchgeführt werden, indem eine FFT verwendet wird, die nur ein kleines Vielfaches (wie etwa 2X) größer als die Impulsantwort ist. Es bricht die lange FFT in richtig überlagerte kürzere, aber null-gepolsterte FFTs auf.

Sogar mit dem Überlappungs-Overhead wird O (NlogN) die M * N-Effizienz für genügend große N und M übertreffen.

    
hotpaw2 22.02.2013 08:46
quelle

Tags und Links