Carrier_Trace.m
上传用户:shencti
上传日期:2016-08-16
资源大小:16k
文件大小:5k
源码类别:

邮电通讯系统

开发平台:

Matlab

  1. % 本程序用于实现扩频系统中,信号捕获之后的跟踪过程。
  2. % 输入信号为,捕获阶段得到的多普勒频率和码相位
  3. % 程序将进一步找到更精确的频率和相位,实现载波的跟踪
  4. % 目前实际多普勒频率1000,相位86
  5. function Carrier_Trace(fd_estimate, Correl_Peak_location_real)
  6. % 获取系统参数
  7. [code_cycle,SNR,Ts,T,T_interp,fi,M,N,fd,f0,delay_time,fd_estimate_init,sigma_n,fs,Bandwidth,dot_insert,coef,coef_mod,B,A1]=set_parameter;
  8. %%%%产生接受中频信号伪码,抽头为1,8
  9. code_phase=[1,8];
  10. [inputcode]=code_gen(code_phase);   % 1023大小的GOLD伪码
  11. %%%%本地伪码
  12. native_code=inputcode;
  13. inputcode_2=[native_code,native_code];
  14. EmulateIndex = 0;
  15. k = 0;
  16. half_dot_insert = dot_insert/2;
  17. while (1)
  18.     % 模拟输入的中频信号
  19.     EmulateIndex = EmulateIndex + 1;
  20.     [signal,signal_noise]=SignalGenerator(EmulateIndex,inputcode,fs,Ts,fi,delay_time,fd,SNR,Bandwidth,code_cycle,sigma_n,f0,N);
  21.     IF_signal(1:N)=signal(1:N);
  22.     IF_signal_noise(1:N)=signal_noise(1:N);
  23. %     % 绘制信号及噪声
  24. %     figure(1);
  25. %     plot(IF_signal, 'b');  % 绘制生成的信号(含噪声)
  26. %     hold on;
  27. %     plot(IF_signal_noise, 'r');  % 信号的噪声
  28. %     hold off;
  29.     % 当前的载波NCO ××× fd_estimate在不断调整
  30.     [NCO_I_Quanti,NCO_Q_Quanti]=Nco_gen(Ts,fi,fd_estimate,N);
  31.     
  32.     % 下变频
  33. Rece_Signal_Quan_down_I = IF_signal(1:N).* NCO_I_Quanti;
  34. Rece_Signal_Quan_down_Q = IF_signal(1:N).* NCO_Q_Quanti;
  35. Rece_Signal_Quan_down_I_noise=IF_signal_noise.*NCO_I_Quanti;
  36. Rece_Signal_Quan_down_Q_noise=IF_signal_noise.*NCO_Q_Quanti;
  37.     %%%%经过低通滤波器,截止频率为1.023MHz
  38.     [signal_I,signal_Q,signal_I_noise,signal_Q_noise]=LP_filter(N,N+1,code_cycle,fs,Rece_Signal_Quan_down_I,Rece_Signal_Quan_down_Q,Rece_Signal_Quan_down_I_noise,Rece_Signal_Quan_down_Q_noise,EmulateIndex);       %进过低通滤波器
  39.     
  40. %     % 绘制比较,低通滤波器的作用
  41. %     figure(2);
  42. %     plot(Rece_Signal_Quan_down_I, 'b'); % 原始
  43. %     hold on
  44. %     plot(signal_I, 'r');    % 
  45. %     hold off
  46.     
  47.     %%%%采用线性内插
  48. for index_new=1:dot_insert
  49.         index_previous=floor((index_new-1)*T_interp/Ts)+1;                                                 %产生内插抽取所需的原序列索引值
  50.         Rece_Signal_down_I_1(index_new)=signal_I(index_previous)+round(((signal_I(index_previous+1)-signal_I(index_previous)))*mod(((index_new-1)*coef),coef_mod)/coef_mod);
  51.         Rece_Signal_down_Q_1(index_new)=signal_Q(index_previous)+round(((signal_Q(index_previous+1)-signal_Q(index_previous)))*mod(((index_new-1)*coef),coef_mod)/coef_mod);
  52. end%%内插完成     
  53.     % 下变频之后的两路信号,保存到Rece_Signal_down_I_1,和Rece_Signal_down_Q_1中,4096点
  54.     
  55.     % 获取本地即时码,此处依然是连续的两对GOLD码,
  56.     Code_native = code_native(inputcode_2,fd_estimate,T_interp,T,f0,dot_insert);
  57.     k = k+1;
  58.     Ips(k) = sum(Code_native(Correl_Peak_location_real:(Correl_Peak_location_real+half_dot_insert-1)).*Rece_Signal_down_I_1(1:half_dot_insert));
  59.     Qps(k) = sum(Code_native(Correl_Peak_location_real:(Correl_Peak_location_real+half_dot_insert-1)).*Rece_Signal_down_Q_1(1:half_dot_insert));
  60.     
  61. FdQueue(k) = fd_estimate;
  62. PhaseQueue(k) = Correl_Peak_location_real;
  63.     
  64.     if(k==1)
  65.         continue;
  66.     end
  67.     % 载波环锁定判决
  68.     E(k) = (Ips(k)*Ips(k-1) + Qps(k)*Qps(k-1))/(Ips(k)*Ips(k) + Qps(k)*Qps(k));
  69.     % 低通滤波-平滑E(k)
  70.     y = 0.9*E(k-1) + 0.1*E(k);
  71.     E(k) = y;
  72.     
  73.     if(E(k) > 0.95)
  74.         % 已经锁定载波
  75.         % 进入码相位跟踪
  76.         if(PN_Phase_Trace(fd_estimate, Correl_Peak_location_real) ~= 0)
  77.             break;
  78.         end;
  79.     end;
  80.     
  81.     Tid = T;   % 积分清除的周期为1023个GOLD码占的时间
  82.     % 频率判决
  83.     % 生成结果如:0   52.2740  -42.6017  -52.2780  144.9547   -7.2020
  84.     Delta(k) = (Ips(k-1)*Qps(k)-Ips(k)*Qps(k-1))/(2*pi*Tid*(Ips(k)*Ips(k)+Qps(k)*Qps(k)));    % 公式1
  85.     %Delta(k) = (atan(Qps(k)/Ips(k))-atan(Qps(k-1)/Ips(k-1)))/(2*pi*Tid);    % 公式2
  86.     
  87.     if(abs(Delta(k)) > 10)
  88.         % 频率牵引---四相鉴频器矫正
  89.         if(abs(Ips(k)) >= abs(Qps(k)))
  90.             Beta(k) = sign0(Ips(k))*(Qps(k)-Qps(k-1))/sqrt(Ips(k)*Ips(k)+Qps(k)*Qps(k));
  91.         else
  92.             Beta(k) = (-1)*sign0(Qps(k))*(Ips(k)-Ips(k-1))/sqrt(Ips(k)*Ips(k)+Qps(k)*Qps(k));
  93.         end;
  94.         fd_estimate = fd_estimate + Beta(k);
  95.     else
  96.         % 相位判决
  97.         if(abs(Qps(k)/Ips(k)) > 0.176)
  98.             % FLL 鉴频器,频率跟踪
  99.             Efk = atan((Ips(k-1)*Qps(k)-Ips(k)*Qps(k-1))/(2*pi*Tid*(Ips(k)*Ips(k)+Qps(k)*Qps(k))));
  100.             fd_estimate = fd_estimate + Efk;
  101.         else
  102.             % PLL
  103.             Epk = atan2(Qps(k), Ips(k));
  104.             fd_estimate = fd_estimate + Epk;
  105.             %Correl_Peak_location_real = Correl_Peak_location_real + int32(Epk);
  106.         end;
  107.     end;
  108.     if(mod(length(Delta),1000)==1)
  109.         % 绘制多普勒频率跟踪的结果
  110.         figure(81);
  111.         plot(FdQueue);
  112.         % 绘制跟踪过程中的频率判决
  113.         figure(82);
  114.         plot(E);
  115.     end;
  116.     
  117. end