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

 采纳的回答

add spaces in binary vectors:
a(i:i+3)=[0 0 0 0]
...
a(i:i+3)=[1 1 1 1]

2 个评论

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])

请先登录,再进行评论。

更多回答(4 个)

jordi10
jordi10 2011-2-3

0 个投票

that was helpfull thanks!!!!

1 个评论

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

请先登录,再进行评论。

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 个评论

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)

请先登录,再进行评论。

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 2011-2-18

0 个投票

do you know modem.qammod function? Check it out

标签

Community Treasure Hunt

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

Start Hunting!

Translated by