📄 gold_erro_ratio.m
字号:
clc
clear all
SNR_arry=0:3:18;
user_num=4;
sig_num=61;
samp_num=120;
erro_arry1=zeros(1,length(SNR_arry));
for i2=1:8
t(i2,:)=[0:(2*i2*pi)/119:2*i2*pi];
c(i2,:)=cos(t(i2,:));
s(i2,:)=sin(t(i2,:));
end
for times=1:10
erro_arry=ones(1,length(SNR_arry));
number1=1;
for SNR=SNR_arry
for i1=1:1:user_num
sig_org(i1,:)=round(rand(1,sig_num));%产生四个用户的随机信号序列
Temp_signal=[];
for k1=1:1:sig_num
if sig_org(i1,k1)==0
Temp_sig=-ones(1,samp_num);
else
Temp_sig=ones(1,samp_num);
end
Temp_signal=[Temp_signal,Temp_sig];
end
signal(i1,:)=Temp_signal;%初始调相信号
%产生跳频图案
goldseq=gold_seq(103,147);
help_adr=goldseq(i1+1,:);
adr(i1,:)=[help_adr,help_adr(1),help_adr(2)];
Temp_HopSeq=[];
for k2=1:sig_num
seq_value=adr(i1,k2)*2^2+adr(i1,k2+1)*2+adr(i1,k2+2);
Temp_HopSeq=[Temp_HopSeq,seq_value];
end
fh_seq(i1,:)=Temp_HopSeq;
Temp_Spread=[];
Temp_HelpSpread=[];
for k3=1:sig_num
Dot=fh_seq(i1,k3);
switch(Dot)
case(1)
Temp_Spread=[Temp_Spread,c(1,:)];
Temp_HelpSpread=[Temp_HelpSpread,s(1,:)];
case(2)
Temp_Spread=[Temp_Spread,c(2,:)];
Temp_HelpSpread=[Temp_HelpSpread,s(2,:)];
case(3)
Temp_Spread=[Temp_Spread,c(3,:)];
Temp_HelpSpread=[Temp_HelpSpread,s(3,:)];
case(4)
Temp_Spread=[Temp_Spread,c(4,:)];
Temp_HelpSpread=[Temp_HelpSpread,s(4,:)];
case(5)
Temp_Spread=[Temp_Spread,c(5,:)];
Temp_HelpSpread=[Temp_HelpSpread,s(5,:)];
case(6)
Temp_Spread=[Temp_Spread,c(6,:)];
Temp_HelpSpread=[Temp_HelpSpread,s(6,:)];
case(7)
Temp_Spread=[Temp_Spread,c(7,:)];
Temp_HelpSpread=[Temp_HelpSpread,s(7,:)];
case(0)
Temp_Spread=[Temp_Spread,c(8,:)];
Temp_HelpSpread=[Temp_HelpSpread,s(8,:)];
end
end
spread_signal(i1,:)=Temp_Spread;
help_despread_signal(i1,:)=Temp_HelpSpread;
freq_hopped_sig(i1,:)=signal(i1,:).*spread_signal(i1,:);
end
%进入信道,加上多用户干扰
A_all_dis_signal(1,:)=zeros(1,7320);
mix_sig(1,:)=freq_hopped_sig(1,:);
for j1=1:1:user_num-1
flag(j1,:)=fh_seq(1,:)-fh_seq(j1+1,:);
Temp_dis_sig=[];
for j2=1:1:sig_num
sig=[];
if flag(j1,j2)==0;
sig=ones(1,samp_num);
else
sig=zeros(1,samp_num);
end
Temp_dis_sig=[Temp_dis_sig,sig];
end
dis_sig(j1,:)=Temp_dis_sig;
dis_signal(j1,:)=dis_sig(j1,:).*freq_hopped_sig(j1+1,:);
A_dis_signal(j1,:)=dis_sig(j1,:).*signal(j1+1,:);
A_all_dis_signal(1,:)=A_all_dis_signal(1,:)+A_dis_signal(j1,:);
mix_sig(1,:)=mix_sig(1,:)+dis_signal(j1,:);
end
awgn_signal=awgn(mix_sig,SNR,1/2);
%解调
de_spread_signal=spread_signal(1,:);
receive_signal=awgn_signal.*de_spread_signal;
A_high_fs=A_all_dis_signal+signal(1);
A_high_fs=A_all_dis_signal+signal(1,:);
hf_signal=1/2*A_high_fs.*(spread_signal(1,:).^2-help_despread_signal(1,:).^2);
signal_out=receive_signal-hf_signal; %最终输出的低频信号,
sentenced_signal=ones(1,61);
for n=1:61
m=120*n-60; %取每个符号的中间样点值为采样值
if signal_out(m)<0
sentenced_signal(n)=0;
end
end
[Num,Ratio]=biterr(sentenced_signal,sig_org(1,:)); %计算比特误差数和比特误差率
erro_arry(number1)=Ratio;
number1=number1+1;
end
erro_arry1=erro_arry1+erro_arry;
end
erro_arry1=erro_arry1/10;
figure,plot(SNR_arry,erro_arry1);
title('\bf\it Bitter Erro Ratio');
xlabel('SNR'),ylabel('Pe');
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -