?? demodulation.m
字號:
function DemoduResult=demodulation(input,index)
% QPSK,16-QAM,64-QAM demodulation
if index==1
%QPSK
input=input*sqrt(2);
DemoduResult=zeros(1,length(input)*2);
for k=1:length(input)
DemoduResult(2*k-1)=real(input(k));
DemoduResult(2*k)=imag(input(k));
end
elseif index==2
%16-QAM
DemoduResult=zeros(1,length(input)*4);
input=input*sqrt(10);
for k=1:length(input)
if abs(real(input(k)))<=2
DemoduResult(4*k-3)=real(input(k));
elseif real(input(k))>2
DemoduResult(4*k-3)=2*(real(input(k))-1);
else
DemoduResult(4*k-3)=2*(real(input(k))+1);
end
if real(input(k))>=0
DemoduResult(4*k-2)=2-real(input(k));
else
DemoduResult(4*k-2)=2+real(input(k));
end
if abs(imag(input(k)))<=2
DemoduResult(4*k-1)=imag(input(k));
elseif imag(input(k))>2
DemoduResult(4*k-1)=2*(imag(input(k))-1);
else
DemoduResult(4*k-1)=2*(imag(input(k))+1);
end
if imag(input(k))>=0
DemoduResult(4*k)=2-imag(input(k));
else
DemoduResult(4*k)=2+imag(input(k));
end
end
else
%64-QAM
DemoduResult=zeros(1,length(input)*6);
input=input*sqrt(42);
for k=1:length(input)
% b0 & b3
if abs(real(input(k)))<=2
DemoduResult(6*k-5)=real(input(k));
elseif real(input(k))>2&real(input(k))<=4
DemoduResult(6*k-5)=2*(real(input(k))-1);
elseif real(input(k))>4&real(input(k))<=6
DemoduResult(6*k-5)=3*(real(input(k))-2);
elseif real(input(k))>6
DemoduResult(6*k-5)=4*(real(input(k))-3);
elseif real(input(k))>=-4&real(input(k))<-2
DemoduResult(6*k-5)=2*(real(input(k))+1);
elseif real(input(k))>=-6&real(input(k))<-4
DemoduResult(6*k-5)=3*(real(input(k))+2);
else
DemoduResult(6*k-5)=4*(real(input(k))+3);
end
if abs(imag(input(k)))<=2
DemoduResult(6*k-2)=imag(input(k));
elseif imag(input(k))>2&imag(input(k))<=4
DemoduResult(6*k-2)=2*(imag(input(k))-1);
elseif imag(input(k))>4&imag(input(k))<=6
DemoduResult(6*k-2)=3*(imag(input(k))-2);
elseif imag(input(k))>6
DemoduResult(6*k-2)=4*(imag(input(k))-3);
elseif imag(input(k))>=-4&imag(input(k))<-2
DemoduResult(6*k-2)=2*(imag(input(k))+1);
elseif imag(input(k))>=-6&imag(input(k))<-4
DemoduResult(6*k-2)=3*(imag(input(k))+2);
else
DemoduResult(6*k-2)=4*(imag(input(k))+3);
end
% b1 & b4
if real(input(k))>0&real(input(k))<=2
DemoduResult(6*k-4)=2*(3-real(input(k)));
elseif real(input(k))>2&real(input(k))<=6
DemoduResult(6*k-4)=4-real(input(k));
elseif real(input(k))>6
DemoduResult(6*k-4)=2*(5-real(input(k)));
elseif real(input(k))>-2&real(input(k))<=0
DemoduResult(6*k-4)=2*(3+real(input(k)));
elseif real(input(k))>-6&real(input(k))<=-2
DemoduResult(6*k-4)=4+real(input(k));
else
DemoduResult(6*k-4)=2*(5+real(input(k)));
end
if imag(input(k))>0&imag(input(k))<=2
DemoduResult(6*k-1)=2*(3-imag(input(k)));
elseif imag(input(k))>2&imag(input(k))<=6
DemoduResult(6*k-1)=4-imag(input(k));
elseif imag(input(k))>6
DemoduResult(6*k-1)=2*(5-imag(input(k)));
elseif imag(input(k))>-2&imag(input(k))<=0
DemoduResult(6*k-1)=2*(3+imag(input(k)));
elseif imag(input(k))>-6&imag(input(k))<=-2
DemoduResult(6*k-1)=4+imag(input(k));
else
DemoduResult(6*k-1)=2*(5+imag(input(k)));
end
% b2 & b5
if real(input(k))>4
DemoduResult(6*k-3)=6-real(input(k));
elseif real(input(k))<-4
DemoduResult(6*k-3)=6+real(input(k));
elseif real(input(k))>0&real(input(k))<=4
DemoduResult(6*k-3)=real(input(k))-2;
else
DemoduResult(6*k-3)=-2-real(input(k));
end
if imag(input(k))>4
DemoduResult(6*k)=6-imag(input(k));
elseif imag(input(k))<-4
DemoduResult(6*k)=6+imag(input(k));
elseif imag(input(k))>0&imag(input(k))<=4
DemoduResult(6*k)=imag(input(k))-2;
else
DemoduResult(6*k)=-2-imag(input(k));
end
end
end
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -