Sunday 1 January 2017

Exponential Moving Average Cuda

Für einen anderen Ansatz können Sie das exponentielle gleitende Durchschnittsfenster abschneiden und dann Ihr gefiltertes Signal berechnen, indem Sie eine Faltung zwischen Ihrem Signal und dem fensterartigen Exponential durchführen. Die Faltung kann mit Hilfe der kostenlosen CUDA FFT-Bibliothek (cuFFT), weil berechnet werden, wie Sie vielleicht wissen, die Faltung kann als die punktweise Multiplikation der beiden Signale in der Fourier-Domäne ausgedrückt werden (Dies ist der treffend nennen Faltungssatz, Die mit einer Komplexität von O (n log (n)) verläuft). Diese Art von Ansatz wird Ihre CUDA-Kernel-Code zu minimieren und laufen sehr sehr schnell, auch auf einer GeForce 570 Besonders, wenn Sie alle Ihre Berechnungen in Single (Float) Präzision zu tun. Ich würde vorschlagen, die oben genannten Differenz-Gleichung zu manipulieren, wie unten angegeben und dann mit CUDA Thrust primitives. Differenzengleichungs MANIPULATION - expliziter Form der Differenzengleichung Durch einfache Algebra, können Sie die folgenden finden: Dementsprechend ist die explizite Form ist die folgende: CUDA THRUST UMSETZUNG Sie können die oben explizite Form durch die folgenden Schritte implementieren: Initialisieren einer Eingangssequenz deingangs zu Alpha mit Ausnahme von dinput0 1. Definiere einen Vektor d1overbetatothen gleich 1, 1beta, 1beta2, 1beta3. Multiplizieren Sie elementweise dinput durch d1overbetatothen Führen Sie eine inclusivescan, um die Sequenz der yn betan zu erhalten Teilen Sie die obige Sequenz durch 1, 1beta, 1beta2, 1beta3. Der obige Ansatz kann für Linear Time-Varying (LTV) - Systeme empfohlen werden. Für lineare zeitinvariante (LTI) Systeme kann der von Paul erwähnte FFT-Ansatz empfohlen werden. Im ein Beispiel für diesen Ansatz die Bereitstellung von CUDA Thrust und cuFFT in meiner Antwort auf FIR-Filter in CUDA. Für ein weiterer Ansatz, können Sie den exponentiellen gleitenden Durchschnitt Fenster gestutzt und dann gefilterte Signal berechnen, indem eine Faltung zwischen dem Signal zu tun und das fenster exponentiell. Die Faltung kann mit Hilfe der kostenlosen CUDA FFT-Bibliothek (cuFFT), weil berechnet werden, wie Sie vielleicht wissen, die Faltung kann als die punktweise Multiplikation der beiden Signale in der Fourier-Domäne ausgedrückt werden (Dies ist der treffend nennen Faltungssatz, Die mit einer Komplexität von O (n log (n)) verläuft). Diese Art von Ansatz wird Ihre CUDA-Kernel-Code zu minimieren und laufen sehr sehr schnell, auch auf einer GeForce 570 Besonders, wenn Sie alle Ihre Berechnungen in Single (Float) Präzision zu tun. Ich würde vorschlagen, die oben genannten Differenz-Gleichung zu manipulieren, wie unten angegeben und dann mit CUDA Thrust primitives. Differenzengleichungs MANIPULATION - expliziter Form der Differenzengleichung Durch einfache Algebra, können Sie die folgenden finden: Dementsprechend ist die explizite Form ist die folgende: CUDA THRUST UMSETZUNG Sie können die oben explizite Form durch die folgenden Schritte implementieren: Initialisieren einer Eingangssequenz deingangs zu Alpha mit Ausnahme von dinput0 1. Definiere einen Vektor d1overbetatothen gleich 1, 1beta, 1beta2, 1beta3. Multiplizieren von element d1overbetatothen DINPUT eine inclusivescan Führen die Sequenz des yn Betan Teilen Sie die obige Sequenz von 1, 1beta, 1beta2, 1beta3 zu erhalten. Der obige Ansatz kann für Linear Time-Varying (LTV) - Systeme empfohlen werden. Für lineare zeitinvariante (LTI) Systeme kann der von Paul erwähnte FFT-Ansatz empfohlen werden. Ich bin ein Beispiel für diesen Ansatz, indem ich CUDA Thrust und cuFFT in meiner Antwort auf FIR-Filter in CUDA.


No comments:

Post a Comment