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 84 85 86 87 88 89 90 91
|
clear all;close all;
% Constantes et parametres
Fech = 1e9; %Frequence d'echantillonage
NFFT = 1000; %Nombre de point FFT
N=100; %Nombre de FFT a realiser
Nech=NFFT*N; %Nombre d'echantillons temporel
t=((1:Nech)/Fech); %vecteur temps
Freq=100e6; %Frequence signal
affichage=1; %1 affichage figure; 0 pas d'affichage
ponderation=1; %1 ponderation hanning; 0 pas de ponderation
NIFFT=16; %Nombre de points IFFT partielle
cref=101; %canal de reference reconstruction partielle
%Creation du signal I/Q
xr=cos(2*pi*Freq*t);
xi=sin(2*pi*Freq*t);
x=xr+1j*xi;
%Mise a zero d'une portion du signal
x(1:Nech/5)=0;
x(4*Nech/5:length(x))=0;
if affichage
figure
plot(abs(x));
title('Signal origine');
end
%Fenetre de ponderation
if ponderation
pond=0.1+(1.-0.1)*hann(NFFT);
else
pond=ones(NFFT,1);
end
%FFT overlapees de 50% (NFFT/2 points)
Y=zeros(NFFT,2*N-1);
for i=1:2*N-1
Y(:,i)=fft(x((i-1)*NFFT/2+1:(i+1)*NFFT/2).*pond');
end
%Reconstruction complete
Xcomp=zeros(size(x));
for i=1:size(Y,2)
temp=ifft(Y(:,i))./pond;
Xcomp((i-1)*NFFT/2+1:(i+1)*NFFT/2)=Xcomp((i-1)*NFFT/2+1:(i+1)*NFFT/2)+transpose(temp/2);
end
%Affichage spectrogramme
if affichage
figure
subplot(2,1,1);
imagesc(20*log(abs(Y)));
title('Spectrogramme complet');
subplot(2,1,2);
plot(abs(Xcomp));
title('Signal reconstruction complete');
end
%Reconstruction partielle
clear temp;
if ponderation
pond=0.1+(1.-0.1)*hann(NIFFT); %Ponderation
else
pond=ones(NIFFT,1);
end
Ypart=Y(cref-NIFFT/2+1:cref+NIFFT/2,:);
Xpart=zeros((size(Ypart,2)+1)*NIFFT/2);
for i=1:size(Ypart,2)
temp=ifft(Ypart(:,i))./pond;
if mod(i,2)==0 %Correction de phase une ifft sur deux
temp=-temp;
end
Xpart((i-1)*NIFFT/2+1:(i+1)*NIFFT/2)=Xpart((i-1)*NIFFT/2+1:(i+1)*NIFFT/2)+transpose(temp/2);
end
if affichage
figure
subplot(2,1,1);
imagesc(20*log(abs(Ypart)));
title('spectrogramme partiel');
subplot(2,1,2);
plot(abs(Xpart));
title('Signal reconstruction partielle');
end |
Partager