1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55
| clear
%filtrage dans le domaine fréquentiel
%load 'Bx'; % mon signal (une matrice 10000 lignes et 1 colonne)
fe=83333; %fréquence d'échantillonnage
Te=1/fe; %temps d'échantillonnage
%N=length(Bx); %longueur du vecteur champ
%N=10000;
%t=0:Te:(N-1)*Te; %vecteur temps
t=(0:fe)/fe;
N=length(t);
N=2*floor(N/2)
NFFT=N;
t=t(1:N);
Bx=sin(2*pi*1000*t)+0.1*randn(size(t));
figure(1)
plot(t,Bx)
grid
axis([0 0.01 -1 1])
t=t'; %transposé du vecteur temps
fc=1500; %fréquence de coupure de filtre
wc=2*pi*fc;
wc1=3*wc;
Blh=100;
k=1/sqrt(2)/Blh;%le gain du filtre
F=tf(k*[1/wc 0],conv([1/wc 1],[1/wc1^2 2*0.707/wc1 1]));%création du filtre
yf1=lsim(F,Bx*1e3,t);%filtrer la matrice
figure(2)
plot(t,yf1)
grid
axis([0 0.01 -5 5])
%la fft%
%NFFT = 2^(nextpow2(N));
%NFFT=2*floor(N/2);
Y = fft(Bx,NFFT);
f = fe/2*linspace(0,1,floor(NFFT/2));
w=(0:NFFT-1)/NFFT*fe;
figure(3)
step(F)
grid
figure(4)
plot(f,2*abs(Y(1:NFFT/2)))
grid
axis([0 2e3 0 5e4])
figure(5)
bode(F,2*pi*f);
grid
%IFFT%
[Mf,Pf]=bode(F,2*pi*f); %calcul du module et la phase du filtre
for ii=1:NFFT/2
W(ii) =abs(Y(ii))* Mf(ii);%multiplication du filtre par la fft de la matrice
end
W1=ifft(Y,NFFT); % IFFT
figure(6)
plot(t,real(W1))
axis([0 0.01 -1 1]) |
Partager