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

 Risposta accettata

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

2 Commenti

Vieniava
Vieniava il 29 Gen 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 il 29 Gen 2011
next, after "if" you should use isequal(a(i:i+3), [0 0 0 0])

Accedi per commentare.

Più risposte (4)

jordi10
jordi10 il 3 Feb 2011

0 voti

that was helpfull thanks!!!!

1 Commento

Vieniava
Vieniava il 4 Feb 2011
the best "thanks" for hint-giver here is to single click on "Accept Answer"

Accedi per commentare.

jordi10
jordi10 il 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 Commento

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)

Accedi per commentare.

Walter Roberson
Walter Roberson il 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 il 18 Feb 2011

0 voti

do you know modem.qammod function? Check it out

Tag

Community Treasure Hunt

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

Start Hunting!

Translated by