Filtre numérique

Liste des GroupesRevenir à fcl python 
Sujet : Filtre numérique
De : nospam_roth.alexandre74 (at) *nospam* gmail.com.invalid (alexandre74)
Groupes : fr.comp.lang.python
Date : 05. Mar 2022, 20:44:54
Autres entêtes
Organisation : !No_Organization!
Message-ID : <aLmdncg1tcs7Mr7_nZ2dnUU7_8zNnZ2d@giganews.com>
Bonjour,
Je suis en 2ème année de prépa et j'ai besoin d'un code python pour réaliser un
filtre numérique dans le cadre d'un tipe sur les dva. J'obtient mon signal
filtré mais son amplitude décroit au cours du temps dans la réponse temporelle
et je ne sais pas d'où ça vient, si jamais quelqu'un sait comment réaliser un
filtrage numérique via python d'une autre manière ou sait comment fixer ce
problème ce serait cool !!

Voici le code:

import numpy as np
import matplotlib.pyplot as plt
import numpy.fft
import math as ma
import scipy as sc
from scipy.signal import savgol_filter
from scipy import signal

## Signal

f=457000 # fréquence DVA
T=1/f # période
t=np.linspace(0,10*T,1000) # temps
ui=np.sin(2*np.pi*f*t) # signal incident
b=np.random.random(1000)*1 # bruits électroniques
u=ui+b # signal reçu par le DVA

plt.plot(t,u)
plt.xlabel("e;t (s)"e;)
plt.ylabel("e;u (V)"e;)
plt.grid()
plt.show()


## Analyse spectrale

Ne = len(u)
Te = t[1]-t[0]
fe=1/Te
spectre = np.absolute(numpy.fft.fft(u))/Ne # calcul de la fft
frequences = numpy.arange(Ne,)/(T*Ne) # fréquence ajustée à la résolution
fréquentielle
plt.plot(frequences,spectre)
plt.xlabel("e;f (Hz)"e;)
plt.ylabel("e;A"e;)
plt.grid()
plt.show()

## Filtrage

# paramètres
fc1, fc2 = f-80, f+80 # fréquence de coupure
fnyq=fe/2 # fréquence de nyquist
order = 2

#application du filtre
b,a = sc.signal.butter(order, (fc1,fc2), btype='bandpass', analog=False,
output='ba', fs=fe) # N=ordre du filtre, Wn liste de fréquence, btype=type de
filtre (lowpass, bandpass, highpass, bandstop), analog retourne un filtre
analogique ou numérique, retourne [b,a] b numérauteur, a le dénominateur es
coefficient du filtre

w, h = signal.freqs(b, a, np.logspace(-2, 2,80))
plt.semilogx(w*2*np.pi, 20*np.log10(abs(h)))
plt.xlabel('Frequences(rad/s)')
plt.ylabel('Amplitude(dB)')
plt.grid(which='both', axis='both')
plt.show()

##Application du filtre

s=signal.filtfilt(b,a,u)
plt.plot(t,s)
plt.xlabel("e;t (s)"e;)
plt.ylabel("e;s (V)"e;)
plt.grid()
plt.show()


## Lissage

uliss= savgol_filter(s, 51, 3) # window size 51, orde du polyome
d'interpolation: 3
plt.plot(t,u_lis)
plt.show()

## Résultat temporel

plt.plot(t,uliss)
plt.plot(t,u)
plt.show()

## Résultat spectral

spectre = np.absolute(numpy.fft.fft(u_lis))/Ne ## calcul de la fft
frequences = numpy.arange(Ne,)/(T*Ne) ## fréquence ajustée à la résolution
fréquentielle
plt.plot(frequences,spectre)
plt.xlabel("e;f (Hz)"e;)
plt.ylabel("e;A"e;)
plt.grid()
plt.show()

Date Sujet#  Auteur
5 Mar 22 * Filtre numérique2alexandre74
6 Mar 22 `- Re: Filtre numérique1pehache

Haut de la page

Les messages affichés proviennent d'usenet.

NewsPortal