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

📄 test_code.m

📁 TCM的仿真 包括编码器
💻 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));
%     
       
     

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -