clear, clc, close all;
global id
id=sqrt(-1);
M=16;
S=Constellation(M);
nsym=1000;
nbit=nsym*log2(M);
ebn0=0:10;
EsN0=10.^(ebn0/10)*log2(M);
ber=zeros(1,length(ebn0));
ser=ber;
for ii=1:length(ebn0)
snr=EsN0(ii);
cnt=0;
cnt_sym=0;
nloop=0;
while(cnt<20 || nloop<1000)
bit_sig=rand(1,nbit)<0.5;
sym_sig=bit2sym(bit_sig,log2(M));
mod_sig=S(sym_sig+1);
spower=mod_sig*mod_sig'/nsym;
npower=spower/snr;
sigma=sqrt(npower);
noise=sigma*(randn(1,nsym)+id*(randn(1,nsym)))/sqrt(2);
channel_sig=mod_sig+noise;
rec_sym=demodulateQAM(channel_sig,S);
rec_bit=sym2bit(rec_sym,log2(M));
cnt=cnt+sum(rec_bit~=bit_sig);
cnt_sym=cnt_sym+sum(rec_sym~=sym_sig);
nloop=nloop+1;
end
ber(ii)=cnt/(nloop*nbit);
ser(ii)=cnt_sym/(nloop*nsym);
fprintf('Eb/N0=%d\tBER=%f\n',ebn0(ii),ser(ii));
end
figure,semilogy(ebn0,ber,'r*-');
xlabel('E_b/N_0(dB)'),ylabel('BER')
title([num2str(M),'-ary QAM']);
figure,semilogy(ebn0+10*log10(M),ser,'r*-');
xlabel('E_s/N_0(dB)'),ylabel('BER')
title([num2str(M),'-ary QAM']);
- 1
- 2
- 3
- 4
前往页