l'example d'un filtre pass-bas en utilisant FFT :
clc
mode(2)
clear
[x,fe]=wavread('ici vous ecrivez la distination du fichier wav ');
n=length(x);
X=fft(x);
xb=fftshift(X);
nc=floor(n/25);
Z=n-(2*nc+1);
Z1=round(Z/2);
Z2=floor(Z/2);
h=[zeros(1,Z1),ones(1,2*nc+1),zeros(1,Z2)];
x1f=h.*xb;
exec('ifftshift.sci');
xfb=ifftshift(x1f);
xf=ifft(xfb);
plot2d3(xf);
sound(real(xf),fe)
mode(2)
clear
[x,fe]=wavread('ici vous ecrivez la distination du fichier wav ');
n=length(x);
X=fft(x);
xb=fftshift(X);
nc=floor(n/25);
Z=n-(2*nc+1);
Z1=round(Z/2);
Z2=floor(Z/2);
h=[zeros(1,Z1),ones(1,2*nc+1),zeros(1,Z2)];
x1f=h.*xb;
exec('ifftshift.sci');
xfb=ifftshift(x1f);
xf=ifft(xfb);
plot2d3(xf);
sound(real(xf),fe)
le scriple de ifftshift
function I0=ifftshift(Ib)
[M,N]=size(Ib);// Je lis la taille de la matrice Ib
//(M est le nombre de lignes et N est le nombre de colonnes de Ib).
M2=floor(M/2);// "floor" donne la partie entière par défaut
N2=floor(N/2);
if N~=1 //c'est à dire si Ib n'est pas un vecteur colonne
/// Je traite les colonnes de la matrice Ib
if N-2*N2==0 // c'est à dire si N est pair
I0=[Ib(:,(N/2)+1:N),Ib(:,1:N/2)];
Ib=I0; //La nouvelle image
else // c'est à dire si N est impair
I0=[Ib(:,(N+1)/2:N),Ib(:,1:(N+1)/2-1)];
Ib=I0; //La nouvelle image
end
end
if M~=1 //c'est à dire si Ib n'est pas un vecteur ligne
/// Je traite les lignes de la matrice Ib
if M-2*M2==0 // c'est à dire si M est pair
I0=[Ib((M/2)+1:M,:);Ib(1:M/2,:)];
else // c'est à dire si M est impair
I0=[Ib((M+1)/2:M,:);Ib(1:(M+1)/2-1,:)];
end
end
endfunction
[M,N]=size(Ib);// Je lis la taille de la matrice Ib
//(M est le nombre de lignes et N est le nombre de colonnes de Ib).
M2=floor(M/2);// "floor" donne la partie entière par défaut
N2=floor(N/2);
if N~=1 //c'est à dire si Ib n'est pas un vecteur colonne
/// Je traite les colonnes de la matrice Ib
if N-2*N2==0 // c'est à dire si N est pair
I0=[Ib(:,(N/2)+1:N),Ib(:,1:N/2)];
Ib=I0; //La nouvelle image
else // c'est à dire si N est impair
I0=[Ib(:,(N+1)/2:N),Ib(:,1:(N+1)/2-1)];
Ib=I0; //La nouvelle image
end
end
if M~=1 //c'est à dire si Ib n'est pas un vecteur ligne
/// Je traite les lignes de la matrice Ib
if M-2*M2==0 // c'est à dire si M est pair
I0=[Ib((M/2)+1:M,:);Ib(1:M/2,:)];
else // c'est à dire si M est impair
I0=[Ib((M+1)/2:M,:);Ib(1:(M+1)/2-1,:)];
end
end
endfunction