📄 bperuncode8psk.m
字号:
function [pb,ps]=bperuncode8psk(snr_in_dB,N)
E=1; %energy per symbol
snr=10^(snr_in_dB/10);
numan=1; %the number of transmit antennas
M=8;
L=log(M)/log(2);
sgman=sqrt(E*numan/(2*snr)); %noise variance
sgmaa=sqrt(0.5);
for k=1:N,
temp=rand;
dsource(k)=1+floor(M*temp); % a integer number between 1 and M, uniform
end;
mappingbits=[0 0 0;
0 0 1;
0 1 0;
0 1 1;
1 0 0;
1 0 1;
1 1 0;
1 1 1];
mapping=[cos(pi/8)+sin(pi/8).*i;
cos(3*pi/8)+sin(3*pi/8).*i;
cos(7*pi/8)+sin(7*pi/8).*i;
cos(5*pi/8)+sin(5*pi/8).*i;
cos(15*pi/8)+sin(15*pi/8).*i;
cos(13*pi/8)+sin(13*pi/8).*i;
cos(9*pi/8)+sin(9*pi/8).*i;
cos(11*pi/8)+sin(11*pi/8).*i]; %8PSK
for k=1:N,
epsk_sig(k)=mapping(dsource(k));
dsourcebits(k,:)=mappingbits(dsource(k),:);
end;
for k=1:N, %received signal
[a(1) a(2)]=gngauss(sgmaa); %path gain
[n(1) n(2)]=gngauss(sgman); %noise
r(k)=epsk_sig(k).*(a(1)+a(2).*i)+(n(1)+n(2).*i);
for j=1:M,
s(k,j)=mapping(j).*(a(1)+a(2).*i);
end;
end;
numofsymbolerror=0;
numofbiterror=0;
for k=1:N,
for j=1:M,
metrics(j)=abs(r(k)-s(k,j));
end;
[min_metric decis]=min(metrics);
decisbits(k,:)=mappingbits(decis,:);
for l=1:L,
if (decisbits(k,l)~=dsourcebits(k,l)),
numofbiterror=numofbiterror+1;
end;
end;
if (decis~=dsource(k)),
numofsymbolerror=numofsymbolerror+1;
end;
end;
ps=numofsymbolerror/N;
pb=numofbiterror/(L*N);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -