Simulation LS et LMMSE

Fermé
florent1985 - 30 oct. 2015 à 10:28
Bonjour j'ai un projet sur les algorithmes d'estimation de canal je veux faire la simulation de LS et LMMSE mais les résultats obtenus ne permettent par de faire l'analyse de la performance de ces algorithmes . Si quelque peut me debloquer je lui serai reconnaissant merci
voici mon code matlab


clc
clear all
set(gcf,'color','w');
L = 5;
cp = 32;
EsN0dB = 0:5:40;
snr = 10.^(EsN0dB/10);
nombrePaquet = 200:100:1000;
beta = 17/9;
cFFT = 128; % sequence binaire de cFFT à envoyer
NT = cFFT + cp;
hModulator = comm.BPSKModulator('PhaseOffset',pi/2);
hDemod = comm.BPSKDemodulator('PhaseOffset',pi/2);
F = dftmtx(cFFT)/sqrt(cFFT);
%tableTER_LS = zeros(M,1);
tableTER_LS1 = zeros(length(EsN0dB),1);
bitError_LS = 0;

%tableTER_LMMSE = zeros(M,1);
tableTER_LMMSE1 = zeros(length(EsN0dB),1);
bitError_LMMSE = 0;


for compteur = 1 : length(EsN0dB)

disp('EsN0dB is'); disp(EsN0dB(compteur));
tic;

tableTER_LS = zeros(nombrePaquet(compteur),1);
tableTER_LMMSE = zeros(nombrePaquet(compteur),1);
for index = 1: nombrePaquet(compteur)
% géneration de la matrice de canal
h = randn(L,1)+1i*randn(L,1);
h = h/norm(h); % Normalisation
%H = fft(h,cFFT);
channel = canal(h,NT);
H = fft(channel,cFFT);
%génération de la cFFT de 256 bits
x1 = randi([0 1],cFFT,1);
xd = step(hModulator,x1);
x = F'*xd;
xout = [x(cFFT-cp+1:cFFT);x];


y = conv2(xout,channel,'same');

nt = randn(cFFT+cp,1)+1i*randn(cFFT+cp,1);
% y = recu(1:cFFT);
No = 10^(-EsN0dB(compteur)/10);
y = y + sqrt(No/2)*nt;
y = y(cp+1:cp+cFFT);
y = F*y;



y_LS = y./xd;
% demodulation de xx estimé
y_LSb = step(hDemod,y_LS);

Rhh = H*H';
w = Rhh/(Rhh+(beta/snr(compteur))*eye(cFFT));
HhatMMSE = w*y_LS;

yEstimeDem = step(hDemod,HhatMMSE);
% Calcul des erreurs binaires lors de la transmission
hError1 = comm.ErrorRate;

%y_LSb

errorStatsLS = step(hError1,x1,y_LSb);
tableTER_LS(compteur) = errorStatsLS(1);
bitError_LS = bitError_LS + errorStatsLS(2);

hError2 = comm.ErrorRate;
errorStatsLMMSE = step(hError2,x1,yEstimeDem);
tableTER_LMMSE(compteur) = errorStatsLMMSE(1);
bitError_LMMSE = bitError_LMMSE + errorStatsLMMSE(2);


end
tableTER_LS1(compteur) = mean(tableTER_LS);
tableTER_LMMSE1(compteur) = mean(tableTER_LMMSE);
toc;
end

% Taux d'erreur bianire
disp('Algorithme LS');
disp('Bits erronées: '); disp(bitError_LS);
disp('Taux erreur binaire') ;disp(mean(tableTER_LS)*100);
semilogy(EsN0dB,tableTER_LS1,'r-s','LineWidth',2);
title('Comparaison des performances de LS et LMMSE en terme de TER');
hold on; grid on; xlabel('Es/NO (dB)'); ylabel('TER');

disp('Algorithme LMMSE');
disp('Bits erronées: '); disp(bitError_LMMSE);
disp('Taux erreur binaire') ;disp(mean(tableTER_LMMSE)*100);
semilogy(EsN0dB,tableTER_LMMSE1,'k-o','LineWidth',2);
title('Comparaison des performances de LS et LMMSE en terme de TER cFFT = 128');
legend('LS','LMMSE');%,'Theory-LS','Theory-LMMSE');