matlab代码仿真qpsk信号的调制与解调(不是simulink)
Qpsk 调制
function ModSig = QpskMod(SrcBit,PhaseOffset)
SrcBitLen = length(SrcBit);
if(mod(SrcBitLen,2) ~= 0) error('The Bit length must be the 2N!');
end
Symbole = reshape(SrcBit,[2,SrcBitLen/2]);
ScatterPoint = exp(1i*(2*pi*(0:3)/4 + PhaseOffset)); ScatterPointGray =
[ScatterPoint(1),ScatterPoint(2),ScatterPoint(4),Scatte rPoint(3)];
SymboleValue = Symbole(1,:)*2 + Symbole(2,:);
ModSig = ScatterPointGray(SymboleValue+1);
end
Qpsk解调
function DemodSig = QpskDemod(ModSig,PhaseOffset)
ScatterPoint = exp(1i*(2*pi*(0:3)/4 + PhaseOffset));
% ScatterPointGray =[ScatterPoint(1),ScatterPoint(2),ScatterPoint(4),Scatte rPoint(3)];
ModSigDistance = zeros(4,length(ModSig));
for k = 1:4
ModSigDistance(k,:) = abs(ModSig - ScatterPoint(k));
end
[~, MinIdx]= min(ModSigDistance); DemodSig = zeros(1,2*length(ModSig));
for k = 1 : length(ModSig)
switch MinIdx(k)
case 1 DemodSig(2*k-1:2*k) = [0 0];
case 2 DemodSig(2*k-1:2*k) = [0 1];
case 3 DemodSig(2*k-1:2*k) = [1 1];
case 4 DemodSig(2*k-1:2*k) = [1 0];
end
end
end
主函数(matlab 脚本文件)
fs=1000; t=[0:1/fs:8];
SrcBit=[0 0 0 1 1 1 1 0];
x1=0*t;
for i=1:8
x0=rectpuls(t-i+0.5);
x1=x1+SrcBit(i)*x0;
end
PhaseOffset=pi/2; % Do the qpsk modulate;
figure(); subplot(4,1,1); plot(t,x1);
axis([-0.1 8.1 -0.1 1.1]); title('Source bit');
xlabel('Samples'); ylabel('Amplitude');
ModSig = QpskMod(SrcBit,PhaseOffset);
subplot(4,1,2);
scatter(real(ModSig),imag(ModSig)); grid; title('Transmitted QPSK data'); xlabel('Real'); ylabel('Imaginary'); % Do the qpsk demodulate;
DemodSig = QpskDemod(ModSig,PhaseOffset); fs=1000; t=[0:1/fs:8]; x1=0*t;
for i=1:8
x0=rectpuls(t-i+0.5);
x1=x1+DemodSig(i)*x0;
end
subplot(4,1,3); plot(t,x1);
axis([-0.1 8.1 -0.1 1.1]);title('Demodulated bit'); xlabel('Samples'); ylabel('Amplitude');

浙公网安备 33010602011771号