I'm working on a program where I have to quantize a sine wave in MATLAB with 16 quantization levels
I have developed a for loop that should quantize the values properly, and it does for the positive values of the sine wave, but then displays all zeros for the negative values of the signal
Here is the code I have developed:
sig1 = [0 0.6428 0.9848 0.8660 0.3420 -0.3420 -0.8660 -0.9848 -0.6428 -0.0000]
b = 4;
N = 10;
yMax = 1.4088;
yMin = -1.3660;
for i = 1:N
value = ((yMax - yMin)/(2^b));
halfstep = value / 2;
%Calculating quantization levels
value0 = value * 0;
value1 = value * 1;
value2 = value * 2;
value3 = value * 3;
value4 = value * 4;
value5 = value * 5;
value6 = value * 6;
value7 = value * 7;
value8 = value * -1;
value9 = value * -2;
value10 = value * -3;
value11 = value * -4;
value12 = value * -5;
value13 = value * -6;
value14 = value * -7;
value15 = value * -8;
%Quantizing signal1
if value15 < sig1(i) < value14
if sig1(i) < value15 + halfstep
qsig1(i) = -8;
else
qsig1(i) = -7;
end
elseif value14 < sig1(i) < value13
if sig1(i) < value14 + halfstep
qsig1(i) = -7;
else
qsig1(i) = -6;
end
elseif value13 < sig1(i) < value12
if sig1(i) < value13 + halfstep
qsig1(i) = -6;
else
qsig1(i) = -5;
end
elseif value12 < sig1(i) < value11
if sig1(i) < value12 + halfstep
qsig1(i) = -5;
else
qsig1(i) = -4;
end
elseif value11 < sig1(i) < value10
if sig1(i) < value11 + halfstep
qsig1(i) = -4;
else
qsig1(i) = -3;
end
elseif value10 < sig1(i) < value9
if sig1(i) < value10 + halfstep
qsig1(i) = -3;
else
qsig1(i) = -2;
end
elseif value9 < sig1(i) < value8
if sig1(i) < value9 + halfstep
qsig1(i) = -2;
else
qsig1(i) = -1;
end
elseif value8 < sig1(i) < value0
if sig1(i) < value8 + halfstep
qsig1(i) = -1;
else
qsig1(i) = 0;
end
elseif value0 < sig1(i) < value1
if sig1(i) < value0 + halfstep
qsig1(i) = 0;
else
qsig1(i) = 1;
end
elseif value1 < sig1(i) < value2
if sig1(i) < value1 + halfstep
qsig1(i) = 1;
else
qsig1(i) = 2;
end
elseif value2 < sig1(i) < value3
if sig1(i) < value2 + halfstep
qsig1(i) = 2;
else
qsig1(i) = 3;
end
elseif value3 < sig1(i) < value4
if sig1(i) < value3 + halfstep
qsig1(i) = 3;
else
qsig1(i) = 4;
end
elseif value4 < sig1(i) < value5
if sig1(i) < value4 + halfstep
qsig1(i) = 4;
else
qsig1(i) = 5;
end
elseif value5 < sig1(i) < value6
if sig1(i) < value5 + halfstep
qsig1(i) = 5;
else
qsig1(i) = 6;
end
elseif value6 < sig1(i) < value7
if sig1(i) < value6 + halfstep
qsig1(i) = 6;
else
qsig1(i) = 7;
end
elseif sig1(i) < value15
qsig1(i) = 0;
end
end
sig1
qsig1
If anyone can help me figure out why the negative values of sig1 are being made all zeros in qsig1 I would appreciate it!
Thank you!