problem in code for 16 qam

Hi i wrote a code to seperate a binary signal to groups of 4 bits and maping them to a complex number,but didnt work and i cant find why. Please help!
clear all
close all
clc
a = [1 1 1 1 0 0 0 0 1 1 1 1]
k=1
for i=1:4:16
if a(i:i+3)=[0000]
b(k)=1-3j
else a(i:i+3)=[1111]
b(k)=3+3j
end
k=k+1
end

 Accepted Answer

Vieniava
Vieniava on 29 Jan 2011
add spaces in binary vectors:
a(i:i+3)=[0 0 0 0]
...
a(i:i+3)=[1 1 1 1]

2 Comments

secondly, your a vector is too short.
Look: when i=16 yout try to acces to (i+3)=19th element of a.
next, after "if" you should use isequal(a(i:i+3), [0 0 0 0])

Sign in to comment.

More Answers (4)

jordi10
jordi10 on 3 Feb 2011

0 votes

that was helpfull thanks!!!!

1 Comment

the best "thanks" for hint-giver here is to single click on "Accept Answer"

Sign in to comment.

can you please help me with the demodulation? here is my code,the problem is with the equality of matrix elements
clear all
close all
clc
a=[1 1 1 1 0 0 0 0 1 1 1 1]
%------ 16QAM MODULATION ------%
k=1
for i=1:4:length(a)
if a(i:i+3)==[0 0 0 0]
b(k)= -3-3j
elseif a(i:i+3)==[0 0 0 1]
b(k)= -3-1j
elseif a(i:i+3)==[0 0 1 0]
b(k) = -3+3j
elseif a(i:i+3)==[0 0 1 1]
b(k) = -3+1j
elseif a(i:i+3)==[0 1 0 0]
b(k) = -1-3j
elseif a(i:i+3)==[0 1 0 1]
b(k) = -1-1j
elseif a(i:i+3)==[0 1 1 0]
b(k) = -1+3j
elseif a(i:i+3)==[0 1 1 1]
b(k) = -1+1j
elseif a(i:i+3)==[1 0 0 0]
b(k) = 3-3j
elseif a(i:i+3)==[1 0 0 1]
b(k) = 3-1j
elseif a(i:i+3)==[1 0 1 0]
b(k) = 3+3j
elseif a(i:i+3)==[1 0 1 1]
b(k) = 3+1j
elseif a(i:i+3)==[1 1 0 0]
b(k) = 1-3j
elseif a(i:i+3)==[1 1 0 1]
b(k) = 1-1j
elseif a(i:i+3)==[1 1 1 0]
b(k) = 1+3j
elseif a(i:i+3)==[1 1 1 1]
b(k) = 1+1j
end
k = k+1
end
%------ 16QAM DEMODULATION ------%
v = 1
k = 1
for z=1:1:length(b)
if b(k) == [-3-3j]
x(v) = [0 0 0 0]
elseif b(k) == [-3-1j]
x(v) = [0 0 0 1]
elseif b(k) == [-3+3j]
x(v) = [0 0 1 0]
elseif b(k) == [-3+1j]
x(v) = [0 0 1 1]
elseif b(k) == [-1-3j]
x(v) = [0 1 0 0]
elseif b(k) == [-1-1j]
x(v) = [0 1 0 1]
elseif b(k) == [-1+3j]
x(v) = [0 1 1 0]
elseif b(k) == [-1+1j]
x(v) = [0 1 1 1]
elseif b(k) == [3-3j]
x(v) = [1 0 0 0]
elseif b(k) == [3-1j]
x(v) = [1 0 0 1]
elseif b(k) == [3+3j]
x(v) = [1 0 1 0]
elseif b(k) == [3+1j]
x(v) = [1 0 1 1]
elseif b(k) == [1-3j]
x(v) = [1 1 0 0]
elseif b(k) == [1-1j]
x(v) = [1 1 0 1]
elseif b(k) == [1+3j]
x(v) = [1 1 1 0]
elseif b(k) == [1+1j]
x(v) = [1 1 1 1]
end
k = k + 1
v = v + 1
end

1 Comment

if resolved this issue you can check it out
clear all
close all
clc
a=[1 1 1 1 0 0 0 0 0 0 1 0];
fprintf('Message Signal:\n')
disp(a)
%------ 16QAM MODULATION ------%
k=1;
for i=1:4:length(a)
if a(i:i+3)==[0 0 0 0]
b(k)= -3-3j;
elseif a(i:i+3)==[0 0 0 1]
b(k)= -3-1j;
elseif a(i:i+3)==[0 0 1 0]
b(k) = -3+3j;
elseif a(i:i+3)==[0 0 1 1]
b(k) = -3+1j;
elseif a(i:i+3)==[0 1 0 0]
b(k) = -1-3j;
elseif a(i:i+3)==[0 1 0 1]
b(k) = -1-1j;
elseif a(i:i+3)==[0 1 1 0]
b(k) = -1+3j;
elseif a(i:i+3)==[0 1 1 1]
b(k) = -1+1j;
elseif a(i:i+3)==[1 0 0 0]
b(k) = 3-3j;
elseif a(i:i+3)==[1 0 0 1]
b(k) = 3-1j;
elseif a(i:i+3)==[1 0 1 0]
b(k) = 3+3j;
elseif a(i:i+3)==[1 0 1 1]
b(k) = 3+1j;
elseif a(i:i+3)==[1 1 0 0]
b(k) = 1-3j;
elseif a(i:i+3)==[1 1 0 1]
b(k) = 1-1j;
elseif a(i:i+3)==[1 1 1 0]
b(k) = 1+3j;
elseif a(i:i+3)==[1 1 1 1]
b(k) = 1+1j;
end
k = k+1;
end
fprintf('Modulated Signal \n')
disp(b)
%------ 16QAM DEMODULATION ------%
v = 1;
k = 1;
r = [];
for z=1:1:length(b)
if b(k) == [-3-3j]
r(length(r)+1:length(r)+4) = [0 0 0 0 ];
elseif b(k) == [-3-1j]
r(length(r)+1:length(r)+4) = [0 0 0 1 ];
elseif b(k) == [-3+3j]
r(length(r)+1:length(r)+4) = [0 0 1 0 ];
elseif b(k) == [-3+1j]
%x(v) = [0 0 1 1]
r(length(r)+1:length(r)+4) = [0 0 1 1 ];
elseif b(k) == [-1-3j]
r(length(r)+1:length(r)+4) = [0 1 0 0 ];
elseif b(k) == [-1-1j]
r(length(r)+1:length(r)+4) = [0 1 0 1 ];
elseif b(k) == [-1+3j]
r(length(r)+1:length(r)+4) = [0 1 1 0 ];
elseif b(k) == [-1+1j]
r(length(r)+1:length(r)+4) = [0 1 1 1 ];
elseif b(k) == [3-3j]
r(length(r)+1:length(r)+4) = [1 0 0 0 ];
elseif b(k) == [3-1j]
r(length(r)+1:length(r)+4) = [1 0 0 1 ];
elseif b(k) == [3+3j]
r(length(r)+1:length(r)+4) = [1 0 1 0 ];
elseif b(k) == [3+1j]
r(length(r)+1:length(r)+4) = [1 0 1 1 ];
elseif b(k) == [1-3j]
r(length(r)+1:length(r)+4) = [1 1 0 0 ];
elseif b(k) == [1-1j]
r(length(r)+1:length(r)+4) = [1 1 0 1 ];
elseif b(k) == [1+3j]
r(length(r)+1:length(r)+4) = [1 1 1 0 ];
elseif b(k) == [1+1j]
r(length(r)+1:length(r)+4) = [1 1 1 1];
end
k = k + 1;
v = v + 1;
end
fprintf('Demodulated Singal:\n')
disp(r)

Sign in to comment.

Encoding, everything at once:
LuT = [-3 -1 +3 +1];
A = reshape(A, 4, []);
b = LuT(A(1,:)*2+A(2,:)) + j*LuT(A(3,:)*2+A(4,:));
Decoding, everything at once:
RLut = [0 0; nan nan; 0 1; nan nan; 1 1; nan nan; 1 0].';
x = reshape(RLut(:,[real(b);imag(b)] + 4),4,[]).';
Hrasek
Hrasek on 18 Feb 2011

0 votes

do you know modem.qammod function? Check it out

Tags

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!