用matlab仿真QPSK的调制

上期是二相调制,这次我们用matlab仿真四相调制,代码如下:

clear all;clc;
SNR_dB=1:1:9;
SNR=10.^(SNR_dB./10);
size=length(SNR_dB);
A=sqrt(2).*ones(1,size);
sigma=sqrt(1./(2*SNR));%A=sqrt(2)
N=200000;
s=randi([0,1],1,N);
s1=2*s-1;
s2=zeros(1,N);
N_errB=zeros(1,size);
N_errS=zeros(1,size);
for i=1:1:size
n=sigma(i).*randn(1,N);
y=s1+n;
for j=1:2:N
if y(j)>0&y(j+1)>0
s2(j:j+1)=[1 1];
elseif y(j)>0&y(j+1)<=0
s2(j:j+1)=[1 0];
elseif y(j)<=0&y(j+1)<=0
s2(j:j+1)=[0 0];
elseif y(j)<=0&y(j+1)>0
s2(j:j+1)=[0 1];
end
end
for k=1:1:N
if s2(k)~=s(k)%~=±í????????
N_errB(i)=N_errB(i)+1;
end
end
for l=1:2:N
if s2(l)~=s(l)|s2(l+1)~=s(l+1)
N_errS(i)=N_errS(i)+1;
end
end
end
BER=N_errB./N;
SER=N_errS./(N/2);
T_BER=2/2*1/2*erfc((log2(4)*10.^(SNR_dB/10)*(sin(pi/4))^2).^0.5);
T_SER =T_BER.*(2-BER);
semilogy(SNR_dB,SER,SNR_dB,BER,SNR_dB,T_SER,SNR_dB,T_BER);
legend('Simulated SER','Simulated BER','Theoretical SER','Theoretical BER');
hold on; grid on;

本人目前利用闲暇时间在钻研极化码,也就是Polar Codes,非常了不起的一种编解码方式,有兴趣的可以联系我哈,大家一起交流~

下期为大家带来一个小玩意——LINGO。

LINGO简单易上手,可以很好地解决许多线性问题,当然也有非线性问题啦。SEE YOU~

转载于:https://www.cnblogs.com/lemonCyu/p/5791142.html

你可能感兴趣的:(用matlab仿真QPSK的调制)