Matlab script to simulate a 16QAM modulation and demodulation, adding channel fading (path loss) and white Gaussian noise.
%---------------------------------------------------------------% % % % 16-QAM Modulation/Demodulation Script % % ------------------------------------- % % % % Guillermo Moraleda (guille.moraleda@gmail.com) % % Xavier González % % % % % % 2010. Universidad Pompeu Fabra. DIT % % % %---------------------------------------------------------------% clear close all N=160000; %Number of bits to send. Must be multiple of 4 b=rand(1,N)>0.5; %Vector of N-random bits %-----------------------% % MODULATION % %-----------------------% b1=reshape(b,4,N/4); %To decimal numbers b2=8*b1(1,:)+4*b1(2,:)+2*b1(3,:)+b1(4,:)+1; %Mapping of the constellation A=[-1+3i,-1-3i,1+3i,1-3i,-1+1i,-1-1i,1+1i,1-1i,-3+3i,-3-3i,3+3i,3-3i,-3+1i,-3-1i,3+1i,3-1i]; x=A(b2); %-----------------------% % PATHLOSS % %-----------------------% L=0.02*((1/200)^4); %-----------------------% % NOISE % %-----------------------% K= 1.38e-23; %Cte Bolzman T= 300; %Temp in Kelvin F= 10; %Noise figure in dB or W BW = 1.25e6; %Bandwidth in Hz Ptx = 10; %Power transmitted N0_teor = K*T*F; %N0 Analytic SNR_teor = Ptx / (N0_teor*BW); %SNR Analytic ES = 4/16*(norm(A(3))^2+ norm(A(11))^2+ norm(A(7))^2+norm(A(15))^2) %Symbol Energy of 16QAM using 1st Q N0 = ES/SNR_teor %Noise power n = randn(1,N/4)*sqrt(N0) + i*(randn(1,N/4)*sqrt(N0)); %Noise vector variance = var(n) %Variance of noise vector y = x*sqrt(L)+n; %Adding noise and path loss to the signal %-----------------------% % DEMODULATION % %-----------------------% bit1=abs(real(y))>2; bit2=abs(imag(y))<2; bit3=real(y)>0; bit4=imag(y)<0; z=reshape([bit1;bit2;bit3;bit4],1,N); z1=reshape(z,4,N/4); z2=8*z1(1,:)+4*z1(2,:)+2*z1(3,:)+z1(4,:)+1; z3=A(z2); %-----------------------% % BER % %-----------------------% SNR=10*log(SNR_teor) Error=abs(b-z); BitError=sum(Error); BER=(3/4)*erfc(sqrt((SNR_teor/5)/2))+ (1/2)*erfc(3*sqrt((SNR_teor/5)/2))- (1/4)*erfc(sqrt((SNR_teor*5)/2)) %-----------------------% % PLOT % %-----------------------% figure(1) hold on plot(x,'b*') plot(z3,'r+') axis([-5 5 -5 5]) legend('Modulated Signal','Demodulated Signal'); title('Modulated/Demodulated Signal');
Note: Take care of break lines
¿Como lo burlas con el matlab, no? (o "qué control" que diría Pijowski)
alfonsofavela
13 de mayo de 2010, 20:40bah... un alemán pro que tenemos de tutor. Habla raro pero te programa windows 7 con el matlab en un plis.
por si a alguien le es útil...
gmoraleda
13 de mayo de 2010, 20:53