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 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83
| clear all;
close all;
[ y, fs, nbits ] = wavread( 'Blue20s.wav' );
hist(y(:,2),1000);
title('gaussienne distribution');
Ts = 1/fs
t=0:Ts:0.5;
left = y(:,1)';
right = y(:,2)';
figure;
subplot(2,1,1);
plot( t, left(1:length(t)) );
title( 'left ear' );
subplot(2,1,2);
plot( t, right(1:length(t)) );
title( 'right ear' );
%La s´eparation de sources seffectue dans le domaine frequentiel. On represente les
%signaux par leur TFCT dont le calcul peut se decomposer en 3 etapes:
%decoupage avec un recouvrement de 1024 points soit 50% des points de la FFT
fs = 1/Ts;
N=2048; % nombre de points pris pour les fonctions à étuder
t=[1:N]/fs;
%parametre fct
NFFT = 2048; %nombre de points pris pour la FFT
fe = 8000; %frequence d'echantillonnage du signal
NBR = 1024; % nombre de points de recouvrement
fenetre = hamming(NFFT); % fenetre de recouvrement
s =[left' right']; %signal a etudie
t=1:length(s);
figure;
subplot(211);
plot(t, s);
title('concatenation de left et right');
subplot(212);
plot(fenetre);
figure;
i = 1;
IndInf = 1;
IndSup = NFFT;
while IndSup<length(s)
ss = s(IndInf : IndSup);
ss = ss.*fenetre'; %multiplication des T trames par une fenetre de ponderation
X(i,:) = abs( fft(ss) ); %calcul de la Transformee de Fourier Discrete (TFD) sur N points de chacune
%delles
IndInf = IndInf + NFFT - NBR;
IndSup = IndSup + NFFT - NBR;
i=i+1;
end
%surf(X(:, 1: NFFT/2));
[L, c] = size(X);
mesh( [1:L], [1:NFFT/2]*fe/NFFT, X(:, 1:NFFT/2)');
title('representation de la TFCT ');
wiener(y,4,'carre',0.01,0.5);
while IndSup<length(s)
ss = y(IndInf : IndSup);
ss = ss.*fenetre'; %multiplication des T trames par une fenetre de ponderation
X(i,:) = abs( ifft(ss) ); %calcul de la Transformee de Fourier Discrete (TFD) sur N points de chacune
%delles
IndInf = IndInf + NFFT - NBR;
IndSup = IndSup + NFFT - NBR;
i=i+1;
end
wavwrite(X,'Blue20s.wav' ); |
Partager