⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 m_fh_simulatin_err_ratio.m

📁 利用m序列生成跳频序列并用于跳频通信
💻 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 + -