www.pudn.com > tryGUI.rar > sim_main.m


%发送和接收合在一块的程序 
%修改于2004/11/29 
%评注:信噪比较低时会出现误码率,加上扩频码(barker码13)低占空比情况下也具有较好的性能 
%发送BPSK信号 
%适合于CM3和CM4信道,估计时每80ns平均一次 
%======================发送信号部分=========================== 
 
clear; 
 
 
    %=======第一部分:基本参数======== 
    %SNR_db=5;                   %输入信噪比 
    Dg=0.5;                     %高斯脉冲宽度 
    Ts=0.05;                     %信号采样间隔 
 
    Tf=80;                      %Tf=80,duty_cycle=1:160 
    Num_Tf=Tf/Ts;               %每个符号持续时间内采样点个数 
    Num_pluse= Dg/Ts; 
 
    Eb=Eb_halfcos(Ts,Dg);       %一个脉冲周期内的码元能量 
     
     %信道估计需要的训练序列长度 
    N_monocycle=10;            
    A=ones(1,N_monocycle); 
     
    %数据长度 
     N_Data=100; 
      
      %========第二部分:生成基本波形========== 
     %产生占空比1:160的半余弦脉冲波形,脉冲波形的占空比可以通过Tf调整 
    gt=waveshape(Dg,Ts,Tf); 
    gt_len=length(gt); 
     
    %========第三部分:生成信道冲激响应及高斯白噪声========== 
    Th=Dg;                      %信道冲激响应间隔 
    h0=UWB_SV_channel(2,4,Th);            %信道冲激响应 
    h1=h0(:,2); 
    h=n_upsample(h1,Th,Ts); 
     
    clear h0 h1 Th; 
    %============= 
     
    pn_code=[1,1,1,1,1,-1,-1,1,1,-1,1,-1,1]; 
    %pn_code=1; 
    N_symbol = length (pn_code);                          % PN码长度 
     
    gt1=waveshape(Dg,Ts,5);                               %实际的数据波形,占空比为1:Tf1 
     
snrstep=0.5; 
SNR_db=[0:snrstep:8]; 
snr_len=length(SNR_db); 
sim_times=2; 
for p=1:sim_times        %第p次仿真,每次仿真中都计算snr_len种SNR_db情况下的误码率 
  for k=1:snr_len     
     
    
    Sim_Data=randn(1,N_Data)>0;      %产生数据序列; 
   
    %--------------------------------------------- 
     
    Noise_sigma=sqrt(Eb/(1*Dg*10^(SNR_db(k)/10)));  %S/N=(Eb/T)/(N0*B)   高斯白噪声 
     
    
 
    
    %============第四部分:信道估计过程========================== 
    %信道估计过程 
    st=gt'*A; 
    st=reshape(st,1,[]);                %理想发送信号 
%     figure(1); 
%     subplot(2,1,1); 
%     plot(0:Ts:(length(st)-1)*Ts,st); 
 
    rt=conv(st,h);                       
    rt_len=length(rt);                 %通过信道后的信号 
    %subplot(4,1,3); 
    %plot([0:Ts:(rt_len-1)*Ts],rt0); 
 
   %------------------ 
 
    rt=rt +Noise_sigma*randn(1,rt_len);                            %接收信号 
%     subplot(2,1,2); 
%     plot([0:Ts:(rt_len-1)*Ts],rt); 
     
    [peak_h,t_h]=ch_est(rt,Ts,N_monocycle,gt,Tf,Dg,h); 
     
    N_path=4; 
     
    [Tao,Atten]=selectpath(peak_h,t_h,N_path);     %选择比较大的多径分量;N_path表示所需要的多径数 
     
    clear st rt rt_len peak_h t_h; 
%===================信道估计过程到此结束===================== 
 
 
     
    %==============第五部分:同步以及信号接收============== 
     
     
     
   %g=[1 0 0 0 0 1 0 1 1 0 1 0 1 0 1 1];    %卷积编码生成矩阵 
   %k0=1;                                   %编码器一次输入个数 
 
   %coded_Data=cnv_encd(g,k0,Sim_Data);    %卷积编码后的数据 
   %Total_Num=length(coded_Data); 
    
   %syn_training=spreadgren(randn(1,12),pn_code);     %同步训练序列 
   spread_Data=spreadgren(Sim_Data,pn_code);        %扩频并且加上训练序列(未扩频的)后的数据,[1,-1] 
   %trans_data=[syn_training,spread_Data]; 
    
%     Total_symbol=N_Data*N_symbol; 
%     for i=1:Total_symbol 
%         tempa=spread_Data(i); 
%         for j=1:gt_len 
%             tempb=gt(j); 
%             k=(i-1)*gt_len+j; 
%             Train_st1(k)=tempa*tempb; 
%         end 
%     end 
    Train_st0=gt1'*spread_Data; 
    Train_st1=reshape(Train_st0,1,[]);                %理想发送信号 
     Train_rt=conv(Train_st1,h);   
      
     clear Train_st0 Train_st1 spread_Data; 
      
     Train_rtlen=length(Train_rt); 
     Train_rt=Train_rt + Noise_sigma*randn(1,Train_rtlen);                            %接收信号 
      
      
      
%      figure(2); 
%      subplot(3,1,1); 
%      plot(0:Ts:(length(Train_st1)-1)*Ts,Train_st1); 
%      title('理想发射信号'); 
%      gtext('time(ns)');ylabel('amplitude'); 
%      subplot(3,1,2); 
%      plot(0:Ts:(length(Train_rt)-1)*Ts,Train_rt); 
%      title('接收机输入信号(CM4,信道冲激响应间隔0.5ns,SNR=5dB)'); 
%      gtext('time(ns)');ylabel('amplitude'); 
     %ref_st=reshape((pn_code'*gt)',1,[]); 
     %yt=MRC_combine(Tao,Atten,Train_rt,Tf,Ts,N_Data*N_symbol);     %多径合并过程,不进行相关积分 
     yn=MRC_Rake(Tao,Atten,Train_rt,Dg,10,Ts,N_Data,pn_code,gt1); 
      
      
%      subplot(3,1,3); 
%      plot(0:Ts:(length(yt)-1)*Ts,yt); 
%      title('RAKE多径合并结果(CM4,信道冲激响应间隔0.5ns,SNR=5dB)'); 
%      xlabel('time(ns)');ylabel('amplitude'); 
      
     %肖婕桢和刘娜的程序从此开始============= 
   %===================== 
    %===================== 
     %===================== 
      %===================== 
       %=====================  
     
 
 
 
 
    err_bit_rate(p,k)=sum(abs(yn-Sim_Data))/N_Data; 
    clear yn Sim_Data; 
    clear Tao Atten Train_rt Noise_sigma; 
  end 
end 
ave_err=sum(err_bit_rate)/sim_times; 
%[decoder_output,survivor_state,cumulated_metric]=viterbi(g,k0,Rx_Dispread); 
 
 
% %画图 
% figure(3); 
% plot(0:Ts:79*Ts,gt(1:80)); 
% title('半余弦脉冲波形'); 
% xlabel('time(ns)');ylabel('amplitude'); 
%  
% temp=ones(1,100); 
% source_data=reshape((Sim_Data'*temp)',1,[]); 
% out_data=reshape((Rx_Dispread'*temp)',1,[]); 
% figure(4); 
% subplot(2,2,1); 
% plot(source_data);axis([0 1000 -0.5 1.5 ]); 
% title('发射数据'); 
%      
% subplot(2,2,2); 
% plot(4500*Ts:Ts:14500*Ts,Train_st1(4500:14500));axis([4500*Ts 14500*Ts -1 1]); 
% title('理想发射波形'); 
% xlabel('time(ns)');ylabel('amplitude'); 
% subplot(2,2,3); 
% plot(out_data);axis([ 0 1000 -0.5 1.5]); 
% title('判决结果'); 
% subplot(2,2,4); 
% plot(4500*Ts:Ts:14500*Ts,Train_rt(4500:14500));axis([4500*Ts 14500*Ts -0.5 0.5]); 
% %plot(Train_rt(4500:14500));axis([0 10000 -0.5 0.5 ]); 
% title('接收机输入信号'); 
% xlabel('time(ns)');ylabel('amplitude');