[PYTHON] FFT-Verarbeitung mit numpy und scipy bis Tiefpassfilter

Ich werde die Methode mit numpy und scipy in der FFT-Verarbeitung zusammenfassen. Diese Seite vergleicht die Bearbeitungszeiten.

Ich habe auf die folgende Seite verwiesen. ■ Python NumPy SciPy: Wellenformformung durch FFT-Verarbeitung (glatter) https://org-technology.com/posts/smoother.html

Erstellen Sie zunächst zu verarbeitende Beispieldaten.

import numpy as np
from scipy import fftpack
import matplotlib.pyplot as plt

#Beispieldatenerstellung
n = 512                         #Die Anzahl der Daten
dt = 0.01                       #Abtastintervall
f = 1                           #Frequenz
t = np.linspace(1, n, n)*dt-dt
y = np.sin(2*np.pi*f*t)+0.5*np.random.randn(t.size)

#FFT-Verarbeitung und Erstellung der Frequenzachse
yf = fftpack.fft(y)/(n/2)
freq = fftpack.fftfreq(n, dt)

① Verwendung von scipy fftpack (fft, ifft)

yf = fftpack.fft(y)/(n/2)
freq = fftpack.fftfreq(n, dt)

fs = 2
yf2 = np.copy(yf)
yf2[(freq > fs)] = 0
yf2[(freq < 0)] = 0

y2 = np.real(fftpack.ifft(yf2)*n)

Berechnungszeit: 48,2 µs ± 869 ns pro Schleife (Mittelwert ± Standardabweichung von 7 Läufen, jeweils 10000 Schleifen)

② Verwendung von scipy fftpack (rfft, irfft)

yf = fftpack.rfft(y)/(n/2)
freq = fftpack.fftfreq(n, dt)

fs = 2
yf2 = np.copy(yf)
yf2[(freq > fs)] = 0
yf2[(freq < 0)] = 0

y2 = np.real(fftpack.irfft(yf2)*(n/2))

Berechnungszeit: 38,7 µs ± 723 ns pro Schleife (Mittelwert ± Standardabweichung von 7 Läufen, jeweils 10000 Schleifen)

③ Verwendung von numpy fft

yf = np.fft.fft(y)/(n/2)
freq = np.fft.fftfreq(n, d=dt)

fs = 2
yf2 = np.copy(yf)
yf2[(freq > fs)] = 0
yf2[(freq < 0)] = 0

y2 = np.real(np.fft.ifft(yf2)*n)

Berechnungszeit: 41,3 µs ± 2,3 µs pro Schleife (Mittelwert ± Standardabweichung von 7 Läufen, jeweils 10000 Schleifen)

Ergebnis ist

  1. Platz 38.7us ② Verwendung von scipy fftpack (rfft, irfft)
  2. Platz 41.3us ③ Wie benutzt man numpy fft?
  3. Platz 48.2us ① Verwendung von fftpack scipy (fft, ifft)

das ist alles.

Recommended Posts

FFT-Verarbeitung mit numpy und scipy bis Tiefpassfilter
Erstellen Sie einen Filter mit scipy
Verwenden Sie OpenBLAS mit numpy, scipy
Sehen Sie, wie schnell Sie mit NumPy / SciPy beschleunigen können
Pfadverarbeitung mit takewhile und dropwhile
Bildverarbeitung mit Python 100 Knock # 10 Medianfilter
Lesen und Schreiben von CSV-Dateien mit Numpy
Zeichnen Sie Dreiecksfunktionen mit Numpy und Matplotlib
Bildverarbeitung mit Python 100 Knock # 9 Gauß-Filter
Ich habe den gleitenden Durchschnitt des IIR-Filtertyps mit Pandas und Scipy verglichen
Ich möchte mkl mit numpy und scipy unter pyenv + Poesie verwenden
Verwenden von Intel MKL mit NumPy / SciPy (Version November 2019)
Übergeben Sie ein Array von PHP an PYTHON und führen Sie eine Numpy-Verarbeitung durch, um das Ergebnis zu erhalten