problem in code for 16 qam

8 views (last 30 days)
jordi10
jordi10 on 29 Jan 2011
Commented: Nouman Khan Safi on 31 Aug 2022
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
Vieniava
Vieniava on 29 Jan 2011
secondly, your a vector is too short.
Look: when i=16 yout try to acces to (i+3)=19th element of a.
Vieniava
Vieniava on 29 Jan 2011
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
that was helpfull thanks!!!!
  1 Comment
Vieniava
Vieniava on 4 Feb 2011
the best "thanks" for hint-giver here is to single click on "Accept Answer"

Sign in to comment.


jordi10
jordi10 on 5 Feb 2011
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
Nouman Khan Safi
Nouman Khan Safi on 31 Aug 2022
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.


Walter Roberson
Walter Roberson on 5 Feb 2011
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
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!