📄 m_fh_simulatin_err_ratio.m
字号:
% YangAnkun
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Frequency Hopping Spread Spectrum
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
clc
close all
clear
SNR_arry=0:3:18; %1到20dB信噪比,步长为0.2dB
erro_arry1=zeros(1,7);
for times=1:10 %误码率取20次测量的平均值
erro_arry=ones(1,7);
number1=1;
for SNR=0:3:18 %全部循环
% Generation of bit pattern
sig1=round(rand(1,63)); % 用户一,随机生成63个比特码元
sig2=round(rand(1,63));% 用户二
sig3=round(rand(1,63));
sig4=round(rand(1,63));
signal1=[];
signal2=[];
signal3=[];
signal4=[];
for k=1:63 %离散点化
if sig1(1,k)==0
sig=-ones(1,120); % bit 0设置120个样点
else
sig=ones(1,120); % bit 1设置120个样点
end
signal1=[signal1 sig]; % 生成调相初始信号
end
for k=1:63
if sig2(1,k)==0
sig=-ones(1,120); % bit 0设置120个样点
else
sig=ones(1,120); % bit 1设置120个样点
end
signal2=[signal2 sig]; % 生成调相初始信号
end
for k=1:63
if sig3(1,k)==0
sig=-ones(1,120); % bit 0设置120个样点
else
sig=ones(1,120); % bit 1设置120个样点
end
signal3=[signal3 sig]; % 生成调相初始信号
end
for k=1:63
if sig4(1,k)==0
sig=-ones(1,120); % bit 0设置120个样点
else
sig=ones(1,120); % bit 1设置120个样点
end
signal4=[signal4 sig]; % 生成调相初始信号
end
% Preparation of 8 new carrier frequencies
t1=[0:2*pi/119:2*pi]; %载波1,2个周期
t2=[0:4*pi/119:4*pi]; %载波2,4个周期
t3=[0:6*pi/119:6*pi]; %载波3,6个周期
t4=[0:8*pi/119:8*pi]; %载波4,8个周期
t5=[0:10*pi/119:10*pi];
t6=[0:12*pi/119:12*pi]; %120个样点
t7=[0:14*pi/119:14*pi];
t8=[0:16*pi/119:16*pi];
c1=cos(t1); %载波1
s1=sin(t1); %辅助载波1,解调时用
c2=cos(t2);
s2=sin(t2);
c3=cos(t3); %载波3
s3=sin(t3); %辅助载波3,解调时用
c4=cos(t4);
s4=sin(t4);
c5=cos(t5);
s5=sin(t5);
c6=cos(t6);
s6=sin(t6);
c7=cos(t7);
s7=sin(t7);
c8=cos(t8);
s8=sin(t8);
adr1=m_seq(103);
adr1=[adr1,adr1(1),adr1(2)];%用户1地址为初始m序列
fh_seq1= [];
fh_seq2=[];
fh_seq3=[];
fh_seq4=[];
for k=1:63
seq_1=adr1(k)*2^2+adr1(k+1)*2+adr1(k+2);
fh_seq1=[fh_seq1 seq_1]; %生成用户1载波序列
seq_2=xor(adr1(k),0)*2^2+xor(adr1(k+1),0)*2+xor(adr1(k+2),1);
fh_seq2=[fh_seq2 seq_2];%生成用户2载波序列,模001
seq_3=xor(adr1(k),0)*2^2+xor(adr1(k+1),1)*2+xor(adr1(k+2),0);
fh_seq3=[fh_seq3 seq_3];%生成用户3载波序列,模010
seq_4=xor(adr1(k),0)*2^2+xor(adr1(k+1),1)*2+xor(adr1(k+2),1);
fh_seq4=[fh_seq4 seq_4];%生成用户4载波序列,模011
end
spread_signal1=[];%用户一载波
spread_signal2=[];%用户二载波
spread_signal3=[];%用户三载波
spread_signal4=[];%用户四载波
help_despread_signal1=[];%辅助信号,解调时用
help_despread_signal2=[];
help_despread_signal3=[];
help_despread_signal4=[];
for k=1:63
c=fh_seq1(k);
switch(c)
case(1)
spread_signal1=[spread_signal1 c1]; %形成随机载频序列
help_despread_signal1=[help_despread_signal1 s1]; %形成随机辅助载频序列(解调时用)
case(2)
spread_signal1=[spread_signal1 c2];
help_despread_signal1=[help_despread_signal1 s2];
case(3)
spread_signal1=[spread_signal1 c3];
help_despread_signal1=[help_despread_signal1 s3];
case(4)
spread_signal1=[spread_signal1 c4];
help_despread_signal1=[help_despread_signal1 s4];
case(5)
spread_signal1=[spread_signal1 c5];
help_despread_signal1=[help_despread_signal1 s5];
case(6)
spread_signal1=[spread_signal1 c6];
help_despread_signal1=[help_despread_signal1 s6];
case(7)
spread_signal1=[spread_signal1 c7];
help_despread_signal1=[help_despread_signal1 s7];
case(0)
spread_signal1=[spread_signal1 c8];
help_despread_signal1=[help_despread_signal1 s8];
end
end
for k=1:63
c=fh_seq2(k);
switch(c)
case(1)
spread_signal2=[spread_signal2 c1]; %形成随即载频序列
help_despread_signal2=[help_despread_signal2 s1]; %形成随即辅助载频序列(解调时用)
case(2)
spread_signal2=[spread_signal2 c2];
help_despread_signal2=[help_despread_signal2 s2];
case(3)
spread_signal2=[spread_signal2 c3];
help_despread_signal2=[help_despread_signal2 s3];
case(4)
spread_signal2=[spread_signal2 c4];
help_despread_signal2=[help_despread_signal2 s4];
case(5)
spread_signal2=[spread_signal2 c5];
help_despread_signal2=[help_despread_signal2 s5];
case(6)
spread_signal2=[spread_signal2 c6];
help_despread_signal2=[help_despread_signal2 s6];
case(7)
spread_signal2=[spread_signal2 c7];
help_despread_signal2=[help_despread_signal2 s7];
case(0)
spread_signal2=[spread_signal2 c8];
help_despread_signal2=[help_despread_signal2 s8];
end
end
for k=1:63
c=fh_seq3(k);
switch(c)
case(1)
spread_signal3=[spread_signal3 c1]; %形成随即载频序列
help_despread_signal3=[help_despread_signal3 s1]; %形成随即辅助载频序列(解调时用)
case(2)
spread_signal3=[spread_signal3 c2];
help_despread_signal3=[help_despread_signal3 s2];
case(3)
spread_signal3=[spread_signal3 c3];
help_despread_signal3=[help_despread_signal3 s3];
case(4)
spread_signal3=[spread_signal3 c4];
help_despread_signal3=[help_despread_signal3 s4];
case(5)
spread_signal3=[spread_signal3 c5];
help_despread_signal3=[help_despread_signal3 s5];
case(6)
spread_signal3=[spread_signal3 c6];
help_despread_signal3=[help_despread_signal3 s6];
case(7)
spread_signal3=[spread_signal3 c7];
help_despread_signal3=[help_despread_signal3 s7];
case(0)
spread_signal3=[spread_signal3 c8];
help_despread_signal3=[help_despread_signal3 s8];
end
end
for k=1:63
c=fh_seq4(k);
switch(c)
case(1)
spread_signal4=[spread_signal4 c1]; %形成随即载频序列
help_despread_signal4=[help_despread_signal4 s1]; %形成随即辅助载频序列(解调时用)
case(2)
spread_signal4=[spread_signal4 c2];
help_despread_signal4=[help_despread_signal4 s2];
case(3)
spread_signal4=[spread_signal4 c3];
help_despread_signal4=[help_despread_signal4 s3];
case(4)
spread_signal4=[spread_signal4 c4];
help_despread_signal4=[help_despread_signal4 s4];
case(5)
spread_signal4=[spread_signal4 c5];
help_despread_signal4=[help_despread_signal4 s5];
case(6)
spread_signal4=[spread_signal4 c6];
help_despread_signal4=[help_despread_signal4 s6];
case(7)
spread_signal4=[spread_signal4 c7];
help_despread_signal4=[help_despread_signal4 s7];
case(0)
spread_signal4=[spread_signal4 c8];
help_despread_signal4=[help_despread_signal4 s8];
end
end
% Spreading BPSK Signal into wider band with total of 8 frequencies
freq_hopped_sig1=signal1.*spread_signal1; %扩频调制,信号1
freq_hopped_sig2=signal2.*spread_signal2; %扩频调制,信号2
freq_hopped_sig3=signal3.*spread_signal3; %扩频调制,信号3
freq_hopped_sig4=signal4.*spread_signal4; %扩频调制,信号4
%%%%%%%%%%%%%%%%%%%%%%%
%进入信道 加上多用户干扰
%%%%%%%%%%%%%%%%%%%%%%%
flag2=fh_seq1-fh_seq2;%标志位,信号2对信号1的干扰,为0时说此时明载波相同
flag3=fh_seq1-fh_seq3;%标志位,信号3对信号1的干扰,为0时说此时明载波相同
flag4=fh_seq1-fh_seq4;%标志位,信号4对信号1的干扰,为0时说此时明载波相同
dis_sig2=[];%信号2对信号1的干扰部分
dis_sig3=[];%信号3对信号1的干扰部分
dis_sig4=[];%信号4对信号1的干扰部分
for k=1:63
if flag2(k)==0
flag2(k)=1;
else
flag2(k)=0;
end
end
for k=1:63
if flag3(k)==0
flag3(k)=1;
else
flag3(k)=0;
end
end
for k=1:63
if flag4(k)==0
flag4(k)=1;
else
flag4(k)=0;
end
end
%%%%%%%%%%%%%%%%%%%%%
%对干扰信号分散点化
%%%%%%%%%%%%%%%%%%%%%
for k=1:63
if flag2(1,k)==0
sig=zeros(1,120);
else
sig=ones(1,120);
end
dis_sig2=[dis_sig2 sig];
end
for k=1:63
if flag3(1,k)==0
sig=zeros(1,120);
else
sig=ones(1,120);
end
dis_sig3=[dis_sig3 sig];
end
for k=1:63
if flag4(1,k)==0
sig=zeros(1,120);
else
sig=ones(1,120);
end
dis_sig4=[dis_sig4 sig];
end
dis_signal2=dis_sig2.*freq_hopped_sig2;
dis_signal3=dis_sig3.*freq_hopped_sig3;
dis_signal4=dis_sig4.*freq_hopped_sig4;
A_dis_signal2=dis_sig2.*signal2;%信号2对信号1干扰部分的振幅
A_dis_signal3=dis_sig3.*signal3;%信号3对信号1干扰部分的振幅
A_dis_signal4=dis_sig4.*signal3;%信号4对信号1干扰部分的振幅
A_all_dis_signal=A_dis_signal2+A_dis_signal3+A_dis_signal4;%所有干扰信号振幅之和,解调时用
%%%%%%%%%%%%%%%%%%%%%%%
%接收到带有多有多用户干扰和高斯噪声的的信号
%%%%%%%%%%%%%%%%%%%%%%%
mix_sig=freq_hopped_sig1+dis_signal2+dis_signal3+dis_signal3;%接收到的带有干扰成分的信号1
%%%%%%%%%%%%%%%%%%%%%%%%%%%
%加高斯白噪声
%%%%%%%%%%%%%%%%%%%%%%%%%%%
awgn_signal=awgn(mix_sig,SNR,1/2);%信号1加高斯白噪声
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%解调,相干解调(一般用非相干解调)
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
de_spread_signal=spread_signal1; %解调时用的载波为调制时用的载波,忽略相差的中频
receive_signal=awgn_signal.*de_spread_signal;%接收的信号即为带有高斯白噪声的信号1
A_high_fs=A_all_dis_signal+signal1; %要减去的高频分量的幅值。Sout=1/2A(t)+1/2cos2t+n(t)cost
hf_signal=1/2*A_high_fs.*(spread_signal1.^2-help_despread_signal1.^2); %要去掉的高频分量。
signal_out=receive_signal-hf_signal; %最终输出的低频信号,
%-------------------------
%Sample sentence %抽样判决
%-------------------------
sentenced_signal=ones(1,63); %判决后的信息序列
for n=1:63
m=120*n-60; %取每个符号的中间样点值为采样值
if signal_out(m)<0
sentenced_signal(n)=0;
end
end
sentenced_signal_wave=[]; %输出采样序列波形这里是+1,-1方波
for k=1:63
if sentenced_signal(1,k)==0
sig=-ones(1,120); % 120 minus ones for bit 0
else
sig=ones(1,120); % 120 ones for bit 1
end
sentenced_signal_wave=[sentenced_signal_wave sig];
end
[Num,Ratio]=biterr(sentenced_signal,sig1); %输出的信噪比和误码率
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(63 bit)');
xlabel('SNR'),ylabel('Pe');
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -