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

📄 gold_erro_ratio.m

📁 gold序列应用于跳频系统
💻 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 + -