📄 eightpskcomplex.m
字号:
% Filename: eightpskcomplex.m
% Descirption: This program is the subprogram to get the bit error
% probability for coherent 8PSK using complex envelope simulation method.
function [ratio]=eightpskcomplex(snr_in_dB)
%%
%******************** Preparation part **********************
bitrate = 64000; %Bit rate
nb =1000;% Number of symbols every loop
m=3;
symbolrate=bitrate/m; %Bit rate
nsample=16;
fs = nsample*symbolrate ; % Sampling frequency
qm=sqrt(-1);
%t=0:1/fs:nb/symbolrate-1/fs;
%%
%******************** Data generation **********************
inputoriginal=randint(1,nb*m); %Generate the random input sequence
%%
%******************** Gray coding***************************
%Convert the random binary input sequence to symbol input sequence
inputsymbol= bi2de(reshape(inputoriginal,m,nb)','right-msb');
%Mapping the input symbol sequence to Gray code
inputgray=graycoding(inputsymbol);
%%
%******************** Ideal Sampling ********************************
inputsampling=zeros(1,nb*nsample);%sampling the input sequence after Gray coding
for i=1:nsample:nb*nsample-1,
for j=1:nsample,
inputsampling(i+j-1)=inputgray(fix(i*symbolrate/fs)+1);
end
end
%%
%******************** Modulation **********************
xd=cos(inputsampling*pi/4);% Real component
xi=sin(inputsampling*pi/4);% Imaginary component
mod=xd+qm.*xi;
%%
%******************** Attenuation calculation **********
snr=10^(snr_in_dB/10);
psymbol=sum(abs(mod).^2)/(length(mod)*bitrate);
np=(psymbol/snr)*fs;
attn=sqrt(0.5*np);
%******************** Add White Gaussian Noise ******
inoise=attn*randn(1,length(mod))+qm*attn*randn(1,length(mod));
modawgn=mod+inoise;
%%
%******************** Demodulation **********************
demod_real=real(modawgn);
demod_imag=imag(modawgn);
%%
%******************** Decision *******************
outputinphase=zeros(1,nb);
outputquadrature=zeros(1,nb);
output=zeros(1,nb*m);
output1inphase=zeros(1,nsample);
output1quadrature=zeros(1,nsample);
for i=1:nb
for j=1:nsample
output1inphase(j)=demod_real(j+(i-1)*nsample);
output1quadrature(j)=demod_imag(j+(i-1)*nsample);
end
outputinphase(i)=sum(output1inphase)/fs;
outputquadrature(i)=sum(output1quadrature)/fs;
end
for i=1:nb
r1=outputinphase(i)*1+outputquadrature(i)*0;
r2=outputinphase(i)*(sqrt(2)/2)+outputquadrature(i)*(sqrt(2)/2);
r3=outputinphase(i)*0+outputquadrature(i)*1;
r4=outputinphase(i)*(-sqrt(2)/2)+outputquadrature(i)*(sqrt(2)/2);
r5=outputinphase(i)*(-1)+outputquadrature(i)*0;
r6=outputinphase(i)*(-sqrt(2)/2)+outputquadrature(i)*(-sqrt(2)/2);
r7=outputinphase(i)*0+outputquadrature(i)*(-1);
r8=outputinphase(i)*(sqrt(2)/2)+outputquadrature(i)*(-sqrt(2)/2);
max_r=max([r1,r2,r3,r4,r5,r6,r7,r8]);
if (r1==max_r)
output(3*i)=0;
output(3*i-1)=0;
output(3*i-2)=0;
elseif(r2==max_r)
output(3*i)=0;
output(3*i-1)=0;
output(3*i-2)=1;
elseif(r3==max_r)
output(3*i)=0;
output(3*i-1)=1;
output(3*i-2)=1;
elseif(r4==max_r)
output(3*i)=0;
output(3*i-1)=1;
output(3*i-2)=0;
elseif(r5==max_r)
output(3*i)=1;
output(3*i-1)=1;
output(3*i-2)=0;
elseif(r6==max_r)
output(3*i)=1;
output(3*i-1)=1;
output(3*i-2)=1;
elseif(r7==max_r)
output(3*i)=1;
output(3*i-1)=0;
output(3*i-2)=1;
elseif(r8==max_r)
output(3*i)=1;
output(3*i-1)=0;
output(3*i-2)=0;
end
end
%%
%******************** Bit Error Rate **********************
[number, ratio]=biterr(inputoriginal, output);
%******************** End of file **********************
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -