J'ai quelques problèmes lorsque j'applique un filtre passe-bande à un signal en Python. J'ai essayé les choses suivantes :
- Faire la fenêtre de la boîte "à la main", c'est-à-dire faire la FFT sur le signal, appliquer le filtre à l'aide d'une boîte. filtre avec une fenêtre en boîte, puis faire l'IFFT pour revenir au domaine temporel. temporel.
- Utiliser le module scipy.signal où j'utilise firwin2 pour construire le filtre et ensuite lfilter pour le filtrage. filtre et ensuite lfilter pour faire le filtrage.
De plus, j'ai effectué le même filtrage dans le programme audio Cool Edit et j'ai comparé les résultats des deux tests ci-dessus.
Comme on peut le voir (je suis un nouvel utilisateur et je ne peux donc pas poster ma figue en png), les résultats de la FFT et de scipy.signal sont très différents. Lorsque l'on compare avec le résultat de Cool edit, la FFT est proche, mais pas identique. Le code est le suivant :
# imports
from pylab import *
import os
import scipy.signal as signal
# load data
tr=loadtxt('tr6516.txt',skiprows=1)
sr = 500 # [samples/s]
nf = sr/2.0 # Nyquist frequence
W = 512 # Window widht for filtering
N=float(8192) # Fourier settings
Ns = len(tr[:,0]) # Total number of samples
# Create inpulse responce from the filter
fv=12.25
w =0.5
r =0.5*w
Hz=[0, fv-w-r, fv-w, fv+w, fv+w+r, nf]
ff=[0, 0, 1, 1, 0, 0]
b = signal.firwin2(W,Hz,ff,nfreqs=N+1,nyq=nf)
SigFilter = signal.lfilter(b, 1, tr[:,1])
# Fourier transform
X1 = fft(tr[:,1],n=int(N))
X1 = fftshift(X1)
F1 = arange(-N/2.0,N/2.0)/N*sr
# Filter data
ff=[0,1,1,0]
fv=12.25
w =0.5
r =0.5*w
Hz=[fv-w-r,fv-w,fv+w,fv+w+r]
k1=interp(-F1,Hz,ff)+interp(F1,Hz,ff)
X1_f=X1*k1
X1_f=ifftshift(X1_f)
x1_f=ifft(X1_f,n=int(N))
Quelqu'un peut-il m'expliquer pourquoi cette différence ? Le filtrage dans Cool edit a été fait en utilisant les mêmes paramètres que dans scipy.signal (hanning window, window width 512). Ou est-ce que je me suis complètement trompé ?
Je vous prie d'agréer, Madame, Monsieur, l'expression de mes salutations distinguées, Anders
Code ci-dessus :
Par rapport à Cool Edit :