Ci provo ... eheheh 
Appena ci azzecco, sicuro che non me lo dimentico più come si scrive il codice sul forum di HTML... ahahaha
Sto facendo una macelloooo..... ahahaha 
codice:
clear all
close all
nc = 100; % numero di realizzazioni di canale
ns = 100; % numero di simboli che trasmetto (Scegliere pari)
snr_max = 30;
delta_snr = 1;
snr_db = [0:delta_snr:snr_max];
snr = 10 .^ (snr_db / 10);
dim_asc = size(snr);
a = [1+sqrt(-1), -1+sqrt(-1), -1-sqrt(-1), 1-sqrt(-1)] / sqrt(2);
x = zeros(2,1);
nbt = 2 * ns * nc;
y = zeros(dim_asc);
y_zf = zeros(dim_asc);
ber_zf = zeros(dim_asc);
for i=1:1:nc
H = (randn(2,2) + (sqrt(-1) * randn (2,2))) / sqrt(2);
Cherm = pinv(H);
for j=1:1:dim_asc
nezf = 0;
for k=1:1:ns/2
x = [a(ceil(rand*4)); a(ceil(rand*4))];
n = (randn(2,1) + sqrt(-1) * randn(2,1)) / sqrt(2);
y = sqrt(snr(j) / 2) * H * x + n;
y_zf = Cherm * y;
if real(y_zf(1)) > 0 && imag(y_zf(1)) > 0
szf(1) = a(1);
else if real(y_zf(1)) < 0 && imag(y_zf(1)) > 0
szf(1) = a(2);
else if real(y_zf(1)) < 0 && imag(y_zf(1)) < 0
szf(1) = a(3);
else
szf(1) = a(4);
end
if real(y_zf(2)) > 0 && imag(y_zf(2)) > 0
szf(2) = a(1);
else if real(y_zf(2)) < 0 && imag(y_zf(2)) > 0
szf(2) = a(2);
else if real(y_zf(2)) < 0 && imag(y_zf(2)) < 0
szf(2) = a(3);
else
szf(2) = a(4);
end
if szf(1) ~= x(1)
if real(szf(1)) ~= real(x(1)) && imag(szf(1)) ~= imag(x(1))
nezf = nezf + 2;
else
nezf = nezf +1;
end
end
if szf(2) ~= x(2)
if real(szf(2)) ~= real(x(2)) && imag(szf(2)) ~= imag(x(2))
nezf = nezf + 2;
else
nezf = nezf +1;
end
end
end % ns (simboli)
end % dim_asc (snr)
ber_zf(j) = ber_zf(j) + nezf;
i
end % nc (canali)
ber_zf = ber_zf / nbt;
end % fa più cicli anche se io non gliel'ho detto. Mah.....
end
end
end
plot(snr_db, ber_zf, 'b'),
title('Prestazioni'),
xlabel('snr [dB]'),
ylabel('BER'),
legend('ZF'),
grid on;