A constelação 8-QAM pode ser gerada pela sobreposição de duas modulações 4-PSK com energias diferentes e com uma rotação de 45 graus entre elas. Na figura acima, as modulações 8-PSK e 8-QAM possuem a mesma energia média. Usando o código Scilab abaixo, é mostrado que a modulação 8-QAM possui melhor desempenho que a modulação 8-PSK. Desempenho em termos de taxa de erro de símbolo em função da relação sinal-ruído:
Código:
clc; close(winsid()); function dd=decide(cc, pk); nf = max(size(pk)); dd = 0*pk; for k=1:nf dist = abs(cc-pk(k)); [aa,bb] = min(dist); dd(k) = cc(bb); end //disp([aa,bb,dist]); endfunction //// 8-PSK k=0:7; cpsk = exp(%i*k*%pi/4); subplot(2,2,1); title('8-PSK'); plot(1.01*real(cpsk),1.01*imag(cpsk),'*'); N = 4*8*1000; s = sign(rand(1,N,'n')) + 2*sign(rand(1,N,'n')); s = s + 4*sign(rand(1,N,'n')); s = (s + 7)/2; spsk = exp(%i*s*%pi/4); subplot(2,2,2); plot(1.01*real(spsk),1.01*imag(spsk),'*'); nn = rand(1,N,'n') + %i*rand(1,N,'n'); nn = nn - mean(nn); nn = nn/sqrt(variance(nn)); ruido = 0.1*nn; spskr = spsk + ruido; subplot(2,2,3); plot(1.01*real(spskr),1.01*imag(spskr),'*'); plot(1.01*real(spsk),1.01*imag(spsk),'oy'); //// 8-QAM: a = 0.6501152; b = sqrt(2-a*a); disp([a,b]); raio = a; f = 0; sqam = 0*spsk; k=0:3; cqam = [a*exp(%i*k*%pi/2), b*exp(%i*((k)*%pi/2 + %pi/4))]; for k=1:N if s(k)<4 then raio = a; f = 0; end; if s(k)>3 then raio = b; f = %pi/4; end; tt = sign(rand(1,1,'n')) + 2*sign(rand(1,1,'n')); tt = tt + 3; tt = tt/2; sqam(k) = raio*exp(%i*(tt*%pi/2 + f)); end sqamr = sqam + ruido; subplot(2,2,4); plot(real(sqamr),imag(sqamr),'*'); plot(real(cqam),imag(cqam),'oy'); a=0.4:0.01:0.85; b=sqrt(2-a.*a); da = a*sqrt(2); dx = sqrt(b.*b + a.*a - sqrt(2)*a.*b); figure; plot(a,da,a,dx,'m'); xgrid; legend('da','dx'); //////////////// figure; txq = []; txp = []; snrdb = []; for snr = 0:16 snrdb = [snrdb, snr]; A = sqrt(10^(-snr/10)); ruido = A*nn; Pn = variance(ruido); disp([snr, Pn]); sqamr = sqam + ruido; spskr = spsk + ruido; if abs(snr-13)<0.1 then subplot(2,2,1); plot(real(sqamr),imag(sqamr),'*'); subplot(2,2,2); plot(real(spskr),imag(spskr),'*'); subplot(2,2,4); plot(errosp); title('Erros 8-PSK'); subplot(2,2,3); plot(errosq); title('Erros 8-QAM'); end; spskd = decide(cpsk,spskr); sqamd = decide(cqam,sqamr); errosp = sign(abs(spsk - spskd)); errosq = sign(abs(sqam - sqamd)); txq = [txq, sum(errosq)/N]; txp = [txp, sum(errosp)/N]; end figure; plot(snrdb,txq,'-o',snrdb,txp,'-*'); legend('8-QAM','8-PSK');
Nenhum comentário:
Postar um comentário