eavn0dB=0:12; %assegna i rapporti segnale rumore in dB eavn0=10.^(eavn0dB/10); %calcola i valori in lineare peBA=1/2*erfc((eavn0.^.5)); %probabilità d'errore teorica modulazione binaria antipodale L=1e6; %lunghezza simulazione in bit sigma=1./(2*eavn0).^0.5; %varianza del rumore ipotizzando segnale a energia unitaria for i=1:length(eavn0), noise=randn(1,L)*sigma(i); % generazione del rumore errori=sum(1+noise<0); %ipotizzando di trasmettere tutti '1', i valori con segno negativo sono errori peBAs(i)=errori/L; %tasso d'errore simulato end semilogy(eavn0dB,peBA,'k-'); %grafico probabilità teorica xlabel('E_b/N_0'); ylabel('B.E.R.'); hold on semilogy(eavn0dB,peBAs,'k*'); %grafico simulazione %ON-OFF Keying peOOK=1/2*erfc((eavn0/2).^.5); %probabilità d'errore teorica OOK for i=1:length(eavn0), noise=randn(1,L)*sigma(i); % generazione del rumore errori=sum(noise>1/2^.5); %ipotizzando di trasmettere tutti '0', e di usare energia 2 per gli '1' %la soglia di decisione è a 1/2^.5 peOOKs(i)=errori/L; %tasso d'errore simulato end semilogy(eavn0dB,peOOK,'r-'); %grafico probabilità teorica hold on semilogy(eavn0dB,peOOKs,'r*'); %grafico simulazione %Modulazione di posizione (la probabilità teorica coincide con quella OOK for i=1:length(eavn0), noise=randn(2,L)*sigma(i); % generazione del nelle due dimensioni errori=sum(noise(2,:)>1+noise(1,:)); %ipotizzando di trasmettere tutti '1', r1=1+noise(1,:), r2=noise(2,:) %decido '0' errando quando r2>r1; peMPs(i)=errori/L; %tasso d'errore simulato end semilogy(eavn0dB,peMPs,'ro'); %grafico simulazione