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


%发送和接收合在一块的程序 
%修改于2004/11/10 
 
%==========output parameters============= 
%peak_h     估计的多径分量的幅度 
%t_h        多径分量对应的延时值——相对值,以接收到的信号的起始点为零点 
 
 
%==========input parameters============== 
%rt         接收到的信号,由训练序列和噪声以及多经组成,训练序列全是1 
%Ts         采样周期,和发送信号采样周期相同 
%N_monocycle    训练序列的符号个数 
%gt         本地相关信号,采样周期为Ts,单周期脉冲(一个周期内的波形),脉冲形状可以自由选择,和发射信号脉冲波形相同 
%Tf         脉冲周期=脉冲持续时间+空闲时间 
%Dg         脉冲持续时间 
%----------------------------------------------- 
function [peak_h,t_h]=ch_est(rt,Ts,N_monocycle,gt,Tf,Dg,h) 
 
 
     
%================接收端估计过程======================   
    Num_Tf=Tf/Ts; 
    rt_len=length(rt); 
    nrt=[1:rt_len]; 
    Eb=Eb_halfcos(Ts,Dg); 
%    figure(10); 
%     subplot(3,1,1);                            %接收信号波形 
%     plot([0:Ts:(rt_len-1)*Ts],rt); 
    ngt=[1:length(gt)]; 
     
    
   [gt1,ngt1]=sigfold(gt,ngt); 
     
    [ft0,nft]=conv_m(rt,nrt,gt1,ngt1); 
    ft=ft0*Ts;                                 %卷积相当于能量积分,因此乘以抽样间隔 
%     subplot(3,1,2); 
%     plot(nft*Ts,ft/Eb);                        %和参考波形卷积的波形 
       
    nft_len=length(nft); 
    K0=find(nft==0); 
    ft_len=nft(nft_len);                 %ft正系数部分的实际长度 
     
   
   %============= 
        
    for j=1:N_monocycle              %考虑信道存在码间干扰,故每80ns截取并叠加一次 
        
       for n=0:Num_Tf-1                      
          TL=n*Ts; 
          N0=((j-1)*Tf+TL)/Ts; 
          N=round(N0); 
          if ((j==1)&(N<0))|((j==N_monocycle)&(N>=ft_len)) 
              Zj(n+1)=0; 
          else 
             Zj(n+1)=ft(N+K0);  %由于ft的序号从负数开始,所以要找到序号为1所对应的实际序号K0 
          end 
      end 
        Zk(j,:)=Zj;   %在tao处抽样的结果,得到N-1个向量 
    end 
    Zk0=sum(Zk)/(Eb*N_monocycle);  % Zk(tao,ak) 
%================================================== 
 
    n=[0:(length(Zk0)-1)]; 
    t=n*Ts; 
     
%     subplot(3,1,3); 
%     plot(t,Zk0); 
    %eval_h=[zeros(1,20/Ts-1),Zk0(20/Ts:1:length(Zk0))];  %CM3和CM4信道条件使用这些语句,目的是消除前20ns内的伪峰值 
     
    [peak_h,index_h]=findpeak(Zk0); 
    t_h=(index_h-1)*Ts; 
    %[peak_h,t_h]=searchpeak(eval_h,Th,Ts); 
 
    figure(11); 
    t=[0:Ts:Tf-Ts]; 
    plot(t,Zk0,'r'); 
 
    hold on; 
    h_comp=h(1:Tf/Ts);    %CM3和CM4截取信道冲激响应前80ns内的值画图 
    stem(t,h_comp,'*');grid; 
    legend('Estimated paths','Actual paths'); 
    hold off; 
    title('信道估计结果和实际信道冲激响应'); 
    xlabel('time(ns)');ylabel('amplitude');