上期是二相調制,這次我們用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~
