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


%发送和接收合在一块的程序 
%修改于2004/11/17 
%发送BPSK信号 
%适合于CM3和CM4信道,估计时每80ns平均一次 
%包括编码、脉冲成型、信道估计、RAKE接收、解码 
%======================发送信号部分=========================== 
 
clear; 
clf; 
 
    %=======第一部分:基本参数======== 
    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=5;            
    A=ones(1,10); 
  
    %码元同步需要的训练序列 
    %N_Syn=12; 
     
    %数据长度 
    N_Data=100; 
    Sim_Data=randint(1,N_Data);      %产生数据序列; 
     
    %%  Liu Na thinks Sim_Data= sign (randn(1,N_Data)); 
     
    %--------------------------------------------- 
     
     
     %========第二部分:生成基本波形========== 
     %产生占空比1:160的半余弦脉冲波形,脉冲波形的占空比可以通过Num_Tf调整 
    for n=0:Num_Tf-1 
        gt(n+1)=halfcos_generator(Dg,n*Ts);    
    end 
     
     
    %========第三部分:生成信道冲激响应及高斯白噪声========== 
    Th=Dg;                      %信道冲激响应间隔 
    h0=UWB_SV_channel(2,4,Th);            %信道冲激响应 
    h1=h0(:,2); 
    h=n_upsample(h1,Th,Ts); 
    %============= 
     
     
    Noise_sigma=sqrt(Eb/(1*Dg*10^(SNR_db/10)));  %S/N=(Eb/T)/(N0*B)   高斯白噪声 
     
    
 
    
    %============第四部分:信道估计过程========================== 
    %信道估计过程 
    st0=(A'*gt)'; 
    st=reshape(st0,1,[]);                %理想发送信号 
    figure(1); 
    subplot(2,1,1); 
    plot(0:Ts:(length(st)-1)*Ts,st); 
 
    rt0=conv(st,h);                       
    rt_len=length(rt0);                 %通过信道后的信号 
    %subplot(4,1,3); 
    %plot([0:Ts:(rt_len-1)*Ts],rt0); 
 
   %------------------ 
 
    rt=rt0 +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表示所需要的多径数 
%===================信道估计过程到此结束===================== 
 
 
     
    %==============第五部分:同步以及信号接收============== 
    pn_code=[1,1,1,1,1,-1,-1,1,1,-1,1,-1,1]; 
    N_symbol = length (pn_code);                          % 要改的呀,只是第一次试一试,而用了巴克码13,其实不然 
 
     
     
     
   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(coded_Data,pn_code);        %扩频并且加上训练序列(未扩频的)后的数据,[1,-1] 
   %trans_data=[syn_training,spread_Data]; 
    
   
      
    Train_st0=(spread_Data'*gt)'; 
    Train_st1=reshape(Train_st0,1,[]);                %理想发送信号 
     Train_rt=conv(Train_st1,h);   
     Train_rtlen=length(Train_rt); 
     Train_rt=Train_rt + Noise_sigma*randn(1,Train_rtlen);                            %接收信号 
      
      
%      figure(2); 
%      subplot(3,1,1); 
%      plot(Train_st1); 
%      subplot(3,1,2); 
%      plot(Train_rt); 
 
     yt=MRC_combine(Tao,Atten,Train_rt,Tf,Ts,Total_Num*N_symbol);     %多径合并过程,不进行相关积分 
      
      
%      subplot(3,1,3); 
%      plot(0:Ts:(length(yt)-1)*Ts,yt); 
%      xlabel('ns'); 
      
     %肖婕桢和刘娜的程序从此开始============= 
   %===================== 
    %===================== 
     %===================== 
      %===================== 
       %=====================  
     
% chip 级别上的判决 
% Note 一定要改 
 
 
for ii = 0:N_symbol*Total_Num-1; 
    for tt= 1:Num_pluse; 
        Data = sum (yt(ii*Num_Tf+tt).*gt(tt))*Ts; 
    end; 
    Data_Rake_Rx (ii+1) = sign(Data); 
end; 
 
 
 
 
% function PN_syn_for_AWGN_SBS(Rx,1/Ts,Dg,Dg/Tf,1) 
 
% 解扩 
 
for j = 0:Total_Num-1; 
    Rx_Dispread(j+1) = sum(Data_Rake_Rx(j*N_symbol+1:j*N_symbol+N_symbol).*pn_code) > 0; 
end; 
 
err_bit_rate=sum(abs(Rx_Dispread-coded_Data))/Total_Num; 
 
 
decoder_output=viterbi(g,k0,Rx_Dispread); 
err_decode_rate=sum(abs(decoder_output-Sim_Data))/Total_Num; 
 
 
% %画图 
% figure(3); 
% plot(gt(1:80)); 
%  
% temp=ones(1,20); 
% 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 500 -0.5 1.5 ]); 
% subplot(2,2,2); 
% plot(Train_st1(1:2000)); 
% subplot(2,2,3); 
% plot(out_data);axis([ 0 500 -0.5 1.5]); 
% subplot(2,2,4); 
% plot(Train_rt(1:2000)); 
%