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'); 

posted @ 2023-03-01 20:06  中原狼  阅读(163)  评论(1)    收藏  举报