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

📄 costas_1.m

📁 该程序包含一般数字PLL仿真maltab程序和数字COSTAS环程序
💻 M
字号:
%-------------------------------------------------------------------------- 
% The goal of this simulation is to simulate carrier tracking loop with the 
% way of costas loop.  
% Author:   Meng, xianwei, copyright of sun-create 
% Data:     2006.9.12 
%-------------------------------------------------------------------------- 
clear all; 
clc; 
%------------simulate costas loop------------- 
 
% disp(' '); 
 
fdel = 30;          %input('Enter the size of frequency step in Hertz>');% 
 
fn = 50.7143;       %input('Enter  loop filter natural frequency in Hertz>');%10 
lambda = 0.01;      %input('Enter lambda, the relative pole offset>');%0.1 
zeta = 1/sqrt(2); 
 
%------采样频率------------------ 
fs = 4000*1.023; 
tstop = 18;          %----结束时间---- 
 
npts = fs * tstop + 1; 
t = (0:(npts-1))/fs; 
 
nsettle = fix(npts/10); 
tsettle = nsettle/fs; 
 
freq = fs; 
fin  = [zeros(1, nsettle), fdel * ones(1,npts-nsettle)];    %--输入的频率 
 
phin = [zeros(1, nsettle), 2*pi*fdel*t(1:npts - nsettle)];  %--输入的相位 
 
len = length(phin); 
Acostx = zeros(1,len); 
carrier_freq = 2000; 
% nsettle = 0; 
nsettle = 64; 
randn('state',0); 
for k=1:len 
    if ( k<=nsettle ) 
        Acostx(k) = cos(2*pi*carrier_freq*t(k) + 0); 
    else 
%         if(k / 100 =0) 
             
            Acostx(k) = cos(2*pi*carrier_freq*t(k) + 0.008*randn(1)*fdel);%*(-1); 
%         end; 
    end 
end 
 
% Generate original signal xref and a noisy version x adding  
% a standard Gaussian white noise.  
% sqrt_snr = 8; init = 2055615866; 
%-----信号加入噪声--------------------------------------------- 
 
Acost = Acostx + 0.2*randn(size(t));;% 
dumptime =90;          %积分清零时间频率计数门限 
Carrier_Tracking_loop(Acost,carrier_freq,fs,t,dumptime); 
 
% % Acost(11001:19000) = Acost(11001:19000) .* ones(1,8000) * (-1); 
% % Acost(71001:79000) = Acost(71001:79000) .* ones(1,8000) * (-1); 
% % Acost(91001:99000+10000) = Acost(91001:99000+10000) .* ones(1,8000+10000) * (-1); 
% %Acost((91001+10000):99000+10000) = Acost((91001+10000):99000+10000) .* ones(1,8000+10000) * (-1); 
% %---------initialize--------- 
% w2b = 0; w2c = 0; s5 =0; phivco =0 ; 
% twopi = 2 * pi; 
% twofs = 2 * fs; 
%  
% %--define 2*fs; 
%  
% %---set loop gain-----------zeta = 1/sqrt(2); 
% G = pi*fn*(zeta + sqrt(zeta*zeta - lambda)); 
%  
% %---set filter parameter----Wn = 2*pi*fn 
% a = 2*pi*fn/(zeta + sqrt(zeta*zeta - lambda)); 
%  
% %---define constant--- 
% a1 = a*(1-lambda); a2 = a*lambda; 
%  
% %---初始化向量---- 
% % phierror = zeros(1,npts); 
% % fvco = zeros(1, npts); 
% % vco_sin = zeros(1, npts); 
% % vco_cos = zeros(1, npts); 
%  
% phivco = 0;lpw2c = 0; Qpw2c=0; 
%  
% dumptime = 90; 
% dumptime_counter = 0; 
% vertor_len = 0; 
%  
% %---------costas loop simulation--------- 
% for i =1:npts 
%     dumptime_counter = dumptime_counter + 1; 
%     if (dumptime_counter>dumptime) 
%         dumptime_counter = dumptime_counter - dumptime; 
%     end; 
%     vco_sin(i) = sin(2*pi*carrier_freq.*t(i) + phivco); 
%     vco_cos(i) = cos(2*pi*carrier_freq.*t(i) + phivco); 
%      
%     I_cos = vco_cos(i) * Acost(i); 
%     Q_sin = vco_sin(i) * Acost(i); 
%     s11 = Q_sin; 
%     Qs11= I_cos; 
%     %mul_tmp_Q(i) = Q_sin; 
%  
%     %------低通滤波器-------Integrate and dump------- 
%     Qps6  = Qs11;             %--V输入 
%     Qpw1c = Qps6 + Qpw2c;   %-积分步骤1 
%     Qpw2c = Qps6 + Qpw1c;   %--积分步骤2 
%     Qs11 = Qpw1c;%/twofs;      %--V输出 
%  
%     %------低通滤波器------------------------------- 
%     lps6  = s11;             %--V输入 
%     lpw1c = lps6 + lpw2c;   %-积分步骤1 
%     lpw2c = lps6 + lpw1c;   %--积分步骤2 
%     s11 = lpw1c;%/twofs;      %--V输出 
%      
%     %------积分清零,信号抽取---------------------- 
%     if (dumptime_counter == dumptime) 
%         vertor_len = vertor_len + 1;  
%         s11 = s11/dumptime; 
%         Qs11= Qs11/dumptime; 
%         Qft_tmp(vertor_len) = Qs11; 
%         ft_tmp(vertor_len) = s11;     
%         %------------------------------------------ 
%    %---------------鉴相器--------------------------------- 
%         s2 = ft_tmp(vertor_len) * Qft_tmp(vertor_len); 
%         s3 = G*s2;              %--滤波器增益乘信号 
%         s4 = a1*s3; 
%      
%         s4a = s4 - a2*s5;       %--环路滤波器积分输出 
%         w1b = s4a + w2b;        %--滤波器积分步骤1 
%         w2b = s4a + w1b;        %--滤波器积分步骤2 
%         s5  = w1b/twofs;        %--产生滤波器输出 
%    %----------VCO----------------------------------------  
%         s6  = s3 + s5;          %--VCO积分输入 
%         w1c = s6 + w2c;         %--VCO积分步骤1 
%         w2c = s6 + w1c;         %--VCO积分步骤2 
%         phivco = w1c/twofs;     %--VCO积分输出 
%      
%         phierror(i) = s11;       %--相位差矩阵 
%         fvco(vertor_len) = s6/twofs;     %--VCO输入矩阵 
%          
%         %-------积分清零----------------------- 
%         Qs11 = 0; 
%         s11  = 0; 
%         Qpw2c =0; 
%         lpw2c = 0; 
%     end; 
%   
%      
% end; 
%  
% % freqerror = fin - fvco;     %--频差矩阵/fs 
%  
% plot([1:vertor_len]*dumptime./fs, Qft_tmp); 
% hold on; 
% plot([1:vertor_len]*dumptime./fs, ft_tmp,'r') 
% grid on; 
% xlabel('时间(t)'); 
% ylabel('I和Q路幅值'); 
% title('载波跟踪环(costas loop)模拟'); 
% set(gcf, 'Color', [1 1 1]) 
 
 
 
 
% %-----------------------Global variable defination------------------------- 
%  
%        PRN_Fs = 1023000; 
%        NavData_Fs = 50; 
%        sampleTimes = 18; 
%        Carrier_Frequency = 3000000; 
%        Carrier_doppleFre_Shift = 0;             %4000; 
%        Phase_Diff = pi/9; 
%        Pha_pos = 1023;                          % C/A Code Phase 
%        len = 120;                               %Signal plot length 
% %--------------------------- Create signal.-------------------------------- 
%  
%        PRN_num = 1023; 
%         
%        PRN_temp = double(0: (1/(sampleTimes*PRN_Fs)) :PRN_num*(1/(PRN_Fs))); 
%        PRN_t = PRN_temp(1:(length(PRN_temp)-1)); 
%        %--------------------------GPS PRN signal--------------------------- 
%   
%         
%        %------------------------carrier signal----------------------------- 
%        %Fs = 4000;   t = 0:1/Fs:1; 
%        Carrier_sample_time = PRN_t; 
%        Carrier = cos(2 * pi * (Carrier_Frequency + Carrier_doppleFre_Shift)... 
%                         * Carrier_sample_time + Phase_Diff);  
%        %-----plot-- 
%        figure; 
%        an=[1:21]; 
%        stem(an.*(1/(sampleTimes*PRN_Fs)),Carrier(1:21)); 
%        hold on;  
%        plot(an.*(1/(sampleTimes*PRN_Fs)),Carrier(1:21),'r'); 
%        grid on; 
%        if (sampleTimes*1000000/Carrier_Frequency>2) 
%             title('Carrier Signal Over Sampling Rate'); 
%        else 
%            title('Carrier Signal UnderSampling Rate'); 
%        end; 
       

⌨️ 快捷键说明

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