[PYTHON] Traitement FFT avec filtre numpy et scipy vers passe-bas

Je vais résumer la méthode en utilisant numpy et scipy dans le traitement FFT. Cette page compare les temps de traitement.

Je me suis référé à la page suivante. ■ Python NumPy SciPy: mise en forme de forme d'onde par traitement FFT (plus fluide) https://org-technology.com/posts/smoother.html

Commencez par créer des exemples de données à traiter.

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

#Exemple de création de données
n = 512                         #Le nombre de données
dt = 0.01                       #Intervalle d'échantillonnage
f = 1                           #la fréquence
t = np.linspace(1, n, n)*dt-dt
y = np.sin(2*np.pi*f*t)+0.5*np.random.randn(t.size)

#Traitement FFT et création d'axe de fréquence
yf = fftpack.fft(y)/(n/2)
freq = fftpack.fftfreq(n, dt)

① Comment utiliser 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)

Temps de calcul: 48,2 µs ± 869 ns par boucle (moyenne ± écart type de 7 analyses, 10000 boucles chacune)

② Comment utiliser 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))

Temps de calcul: 38,7 µs ± 723 ns par boucle (moyenne ± écart type de 7 analyses, 10000 boucles chacune)

③ Comment utiliser 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)

Temps de calcul: 41,3 µs ± 2,3 µs par boucle (moyenne ± écart type de 7 analyses, 10000 boucles chacune)

Le résultat est 1ère place 38.7us ② Comment utiliser scipy fftpack (rfft, irfft) 2e place 41,3us ③ Comment utiliser numpy fft 3ème place 48.2us ① Comment utiliser fftpack de scipy (fft, ifft)

c'est tout.

Recommended Posts

Traitement FFT avec filtre numpy et scipy vers passe-bas
Créer un filtre avec scipy
Utilisez OpenBLAS avec numpy, scipy
Découvrez la puissance de l'accélération avec NumPy / SciPy
Traitement de chemin avec take while et drop while
Traitement d'image par Python 100 knock # 10 filtre médian
Lire et écrire des fichiers csv avec numpy
Graphiques de fonctions triangulaires avec numpy et matplotlib
Traitement d'image par Python 100 knock # 9 Filtre Gaussien
J'ai comparé la moyenne mobile du type de filtre IIR avec les pandas et scipy
Je veux utiliser mkl avec numpy et scipy sous l'environnement pyenv + poetry
Utilisation d'Intel MKL avec NumPy / SciPy (version de novembre 2019)
Passez un tableau de PHP à PYTHON et effectuez un traitement numpy pour obtenir le résultat