Qam Modulator / Demodulator
N = 1000;
rnd = 2.1;
mlevel = 4;
% signal
x = round((mlevel-1)*rand(1,N));
% modulation
bitPerSymbol = sqrt(mlevel);
b = -2.*mod(x,(bitPerSymbol))+bitPerSymbol-1;
a = 2.*floor(x./(bitPerSymbol))-bitPerSymbol+1;
xmod = a + i.*b;
noise = (rnd*(rand(1,N)-0.5) + rnd*(rand(1,N)-0.5)*i);
%adding noise to the modulated signal
xmod_no = xmod + noise;
%demodulation
x_qam_ideal = 0:(mlevel-1);
b = -2.*mod(x_qam_ideal,(bitPerSymbol))+bitPerSymbol-1;
a = 2.*floor(x_qam_ideal./(bitPerSymbol))-bitPerSymbol+1;
qam_ideal_constellation = a + i.*b;
qam_ideal_constellation = reshape( qam_ideal_constellation, 1, mlevel);
n = 0;
z = zeros(size(xmod_no));
for k = 1:numel(xmod_no)
[n z(k)] = min(abs(xmod_no(k) - qam_ideal_constellation));
end
z = z-1;
xdemod_no = z;
err_bit_location = sign(abs(x-xdemod_no));
t = 1:length(x);
subplot(2,2,1); plot(real(xmod),imag(xmod),'bo'); axis([-mlevel/2 mlevel/2 -mlevel/2 mlevel/2]);
subplot(2,2,2); plot(real(xmod_no),imag(xmod_no),'ro'); axis([-mlevel/2 mlevel/2 -mlevel/2 mlevel/2]);
subplot(2,2,[3 4]);plot(t,x,'bo',t,xdemod_no,'ro');axis([0 length(x) 0 mlevel]);
N = 1000;
rnd = 0.2;
mlevel = 4;
% signal
x = round((mlevel-1)*rand(1,N));
% modulation
bitPerSymbol = sqrt(mlevel);
b = -2.*mod(x,(bitPerSymbol))+bitPerSymbol-1;
a = 2.*floor(x./(bitPerSymbol))-bitPerSymbol+1;
xmod = a + i.*b;
% generating a noise
noise = rnd*randn(1,length(xmod)) + rnd*randn(1,length(xmod))*j;
%adding noise to the modulated signal
xmod_no = xmod + noise;
%demodulation
x_qam_ideal = 0:(mlevel-1);
b = -2.*mod(x_qam_ideal,(bitPerSymbol))+bitPerSymbol-1;
a = 2.*floor(x_qam_ideal./(bitPerSymbol))-bitPerSymbol+1;
qam_ideal_constellation = a + i.*b;
qam_ideal_constellation = reshape( qam_ideal_constellation, 1, mlevel);
n = 0;
z = zeros(size(xmod_no));
for k = 1:numel(xmod_no)
[n z(k)] = min(abs(xmod_no(k) - qam_ideal_constellation));
end
z = z-1;
xdemod_no = z;
err_bit_location = sign(abs(x-xdemod_no));
t = 1:length(x);
subplot(2,2,1); plot(real(xmod),imag(xmod),'bo'); axis([-mlevel/2 mlevel/2 -mlevel/2 mlevel/2]);
subplot(2,2,2); plot(real(xmod_no),imag(xmod_no),'ro'); axis([-mlevel/2 mlevel/2 -mlevel/2 mlevel/2]);
subplot(2,2,[3 4]);plot(t,x,'bo',t,xdemod_no,'ro');axis([0 length(x) 0 mlevel]);
N = 1000;
np_dBm = 20.0; % noise power in dBm
mlevel = 4;
% signal
x = round((mlevel-1)*rand(1,N));
% modulation
bitPerSymbol = sqrt(mlevel);
b = -2.*mod(x,(bitPerSymbol))+bitPerSymbol-1;
a = 2.*floor(x./(bitPerSymbol))-bitPerSymbol+1;
xmod = a + i.*b;
%generating noise
np = 10 ^((np_dBm - 30)/10);
rnd = sqrt(np/2);
noise = rnd*randn(1,length(xmod)) + rnd*randn(1,length(xmod))*j;
%adding noise to the modulated signal
xmod_no = xmod + noise;
%demodulation
x_qam_ideal = 0:(mlevel-1);
b = -2.*mod(x_qam_ideal,(bitPerSymbol))+bitPerSymbol-1;
a = 2.*floor(x_qam_ideal./(bitPerSymbol))-bitPerSymbol+1;
qam_ideal_constellation = a + i.*b;
qam_ideal_constellation = reshape( qam_ideal_constellation, 1, mlevel);
n = 0;
z = zeros(size(xmod_no));
for k = 1:numel(xmod_no)
[n z(k)] = min(abs(xmod_no(k) - qam_ideal_constellation));
end
z = z-1;
xdemod_no = z;
err_bit_location = sign(abs(x-xdemod_no));
t = 1:length(x);
subplot(2,2,1); plot(real(xmod),imag(xmod),'bo'); axis([-mlevel/2 mlevel/2 -mlevel/2 mlevel/2]);
subplot(2,2,2); plot(real(xmod_no),imag(xmod_no),'ro'); axis([-mlevel/2 mlevel/2 -mlevel/2 mlevel/2]);
subplot(2,2,[3 4]);plot(t,x,'bo',t,xdemod_no,'ro');axis([0 length(x) 0 mlevel]);
N = 1000;
np_dBm = 20.0; % noise power in dBm
mlevel = 4;
% signal
x = round((mlevel-1)*rand(1,N));
% modulation
bitPerSymbol = sqrt(mlevel);
b = -2.*mod(x,(bitPerSymbol))+bitPerSymbol-1;
a = 2.*floor(x./(bitPerSymbol))-bitPerSymbol+1;
xmod = a + i.*b;
%generating noise
np = 10 ^((np_dBm - 30)/10);
rnd = sqrt(np/2);
noise = rnd*randn(1,length(xmod)) + rnd*randn(1,length(xmod))*j;
phase_shift = exp(0.1*pi*j);
%adding noise to the modulated signal
xmod_no = (xmod + noise).*phase_shift;
%demodulation
x_qam_ideal = 0:(mlevel-1);
b = -2.*mod(x_qam_ideal,(bitPerSymbol))+bitPerSymbol-1;
a = 2.*floor(x_qam_ideal./(bitPerSymbol))-bitPerSymbol+1;
qam_ideal_constellation = a + i.*b;
qam_ideal_constellation = reshape( qam_ideal_constellation, 1, mlevel);
n = 0;
z = zeros(size(xmod_no));
for k = 1:numel(xmod_no)
[n z(k)] = min(abs(xmod_no(k) - qam_ideal_constellation));
end
z = z-1;
xdemod_no = z;
err_bit_location = sign(abs(x-xdemod_no));
t = 1:length(x);
subplot(2,2,1); plot(real(xmod),imag(xmod),'bo'); axis([-mlevel/2 mlevel/2 -mlevel/2 mlevel/2]);
subplot(2,2,2); plot(real(xmod_no),imag(xmod_no),'ro'); axis([-mlevel/2 mlevel/2 -mlevel/2 mlevel/2]);
subplot(2,2,[3 4]);plot(t,x,'bo',t,xdemod_no,'ro');axis([0 length(x) 0 mlevel]);
N = 1000;
np_dBm = -100.0; % noise power in dBm
mlevel = 4;
% signal
x = round((mlevel-1)*rand(1,N));
% modulation
bitPerSymbol = sqrt(mlevel);
b = -2.*mod(x,(bitPerSymbol))+bitPerSymbol-1;
a = 2.*floor(x./(bitPerSymbol))-bitPerSymbol+1;
xmod = a + i.*b;
%generating noise
np = 10 ^((np_dBm - 30)/10);
rnd = sqrt(np/2);
rnd_phase = 0.05;
noise = rnd*randn(1,length(xmod)) + rnd*randn(1,length(xmod))*j;
phase_noise = rnd_phase*randn(1,length(xmod)) + rnd_phase*randn(1,length(xmod))*j;
phase_shift = exp(phase_noise.*pi*j);
%adding noise to the modulated signal
xmod_no = (xmod + noise).*phase_shift;
%demodulation
x_qam_ideal = 0:(mlevel-1);
b = -2.*mod(x_qam_ideal,(bitPerSymbol))+bitPerSymbol-1;
a = 2.*floor(x_qam_ideal./(bitPerSymbol))-bitPerSymbol+1;
qam_ideal_constellation = a + i.*b;
qam_ideal_constellation = reshape( qam_ideal_constellation, 1, mlevel);
n = 0;
z = zeros(size(xmod_no));
for k = 1:numel(xmod_no)
[n z(k)] = min(abs(xmod_no(k) - qam_ideal_constellation));
end
z = z-1;
xdemod_no = z;
err_bit_location = sign(abs(x-xdemod_no));
t = 1:length(x);
subplot(2,2,1); plot(real(xmod),imag(xmod),'bo'); axis([-mlevel/2 mlevel/2 -mlevel/2 mlevel/2]);
subplot(2,2,2); plot(real(xmod_no),imag(xmod_no),'ro'); axis([-mlevel/2 mlevel/2 -mlevel/2 mlevel/2]);
subplot(2,2,[3 4]);plot(t,x,'bo',t,xdemod_no,'ro');axis([0 length(x) 0 mlevel]);
N = 1000;
np_dBm = -100.0; % noise power in dBm
mlevel = 4;
% signal
x = round((mlevel-1)*rand(1,N));
% modulation
bitPerSymbol = sqrt(mlevel);
b = -2.*mod(x,(bitPerSymbol))+bitPerSymbol-1;
a = 2.*floor(x./(bitPerSymbol))-bitPerSymbol+1;
xmod = a + i.*b;
%generating noise
np = 10 ^((np_dBm - 30)/10);
rnd = sqrt(np/2);
rnd_phase = 0.01;
noise = rnd*randn(1,length(xmod)) + rnd*randn(1,length(xmod))*j;
phase_noise = rnd_phase*randn(1,length(xmod)) + rnd_phase*randn(1,length(xmod))*j;
phase_shift = exp(phase_noise.*pi*j);
%adding noise to the modulated signal
xmod_no = (xmod + noise).*phase_shift;
xmod_no_2layer = reshape(xmod_no,2,[]);
cb_01 = 1/sqrt(2).*[1;1];
cb_11 = 1/sqrt(2).*[1;-1];
cb_21 = 1/sqrt(2).*[1;j];
cb_31 = 1/sqrt(2).*[1;-j];
cb_02 = 1/sqrt(2).*[1 0;0 1];
cb_12 = 1/2.*[1 1;1 -1];
cb_22 = 1/2.*[1 1;j -j];
xmod_no_2layer_cb_02 = cb_02 * xmod_no_2layer;
xmod_no_2layer_cb_02 = reshape(xmod_no_2layer_cb_02,1,[]);
figure;
subplot(2,2,1); plot(real(xmod),imag(xmod),'bo'); axis([-mlevel/2 mlevel/2 -mlevel/2 mlevel/2]);title('A');
subplot(2,2,2); plot(real(xmod_no),imag(xmod_no),'ro'); axis([-mlevel/2 mlevel/2 -mlevel/2 mlevel/2]);title('B');
subplot(2,2,3); plot(real(xmod_no_2layer_cb_02),imag(xmod_no_2layer_cb_02),'bo'); axis([-mlevel/2 mlevel/2 -mlevel/2 mlevel/2]);title('C');
subplot(2,2,4); plot(real(xmod_no),imag(xmod_no),'ro', real(xmod_no_2layer_cb_02),imag(xmod_no_2layer_cb_02),'bo'); axis([-mlevel/2 mlevel/2 -mlevel/2 mlevel/2]);title('D');
xmod_no_2layer_cb_12 = cb_12 * xmod_no_2layer;
xmod_no_2layer_cb_12 = reshape(xmod_no_2layer_cb_12,1,[]);
figure;
subplot(2,2,1); plot(real(xmod),imag(xmod),'bo'); axis([-mlevel/2 mlevel/2 -mlevel/2 mlevel/2]);title('A');
subplot(2,2,2); plot(real(xmod_no),imag(xmod_no),'ro'); axis([-mlevel/2 mlevel/2 -mlevel/2 mlevel/2]);title('B');
subplot(2,2,3); plot(real(xmod_no_2layer_cb_12),imag(xmod_no_2layer_cb_12),'bo'); axis([-mlevel/2 mlevel/2 -mlevel/2 mlevel/2]);title('C');
subplot(2,2,4); plot(real(xmod_no),imag(xmod_no),'ro', real(xmod_no_2layer_cb_12),imag(xmod_no_2layer_cb_12),'bo'); axis([-mlevel/2 mlevel/2 -mlevel/2 mlevel/2]);title('D');
xmod_no_2layer_cb_22 = cb_22 * xmod_no_2layer;
xmod_no_2layer_cb_22 = reshape(xmod_no_2layer_cb_22,1,[]);
figure;
subplot(2,2,1); plot(real(xmod),imag(xmod),'bo'); axis([-mlevel/2 mlevel/2 -mlevel/2 mlevel/2]);title('A');
subplot(2,2,2); plot(real(xmod_no),imag(xmod_no),'ro'); axis([-mlevel/2 mlevel/2 -mlevel/2 mlevel/2]);title('B');
subplot(2,2,3); plot(real(xmod_no_2layer_cb_22),imag(xmod_no_2layer_cb_22),'bo'); axis([-mlevel/2 mlevel/2 -mlevel/2 mlevel/2]);title('C');
subplot(2,2,4); plot(real(xmod_no),imag(xmod_no),'ro', real(xmod_no_2layer_cb_22),imag(xmod_no_2layer_cb_22),'bo'); axis([-mlevel/2 mlevel/2 -mlevel/2 mlevel/2]);title('D');