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

📄 s_quxian.m

📁 主要是关于GPS卫星C/A码信号的产生、捕获以及跟踪的S曲线图
💻 M
字号:
function s_quxian()
%产生接收信号
receive = modulate(421,2000);
doppler = 2000;
%产生本地载波
fc =10.23e+6;
fs = 40.92e+6;
t=0:1/fs:(0.001-1/fs);
T = sin((fc+doppler)*2*pi*t);
%先对接收信号去载波
divid_carrierwave = receive .* T;
%b = fir1(60,1/(10.23e+6),boxcar(61));      %用矩形窗设计的滤波器
% b = fir1(32,1/(10.23e+6));         %用汉明窗设计的滤波器
% signal_filer = 2*fftfilt(b,divid_carrierwave);

% % % % % % % % % adding
tmmp = zeros(1,15);   % 17与滤波器的阶数有关
data2_1 = [divid_carrierwave tmmp];
b=fir1(32,1/(10.23e+6));   %fir1(32,[1 20e6]/(2*(frequency)),'bandpass'); %带通滤波器
dddd=fftfilt(b,data2_1);
signal_filer = dddd(16:length(divid_carrierwave)+15); 

for i = 1:length(signal_filer)
    if signal_filer(i) >0
        ffff(i)=1;
    else
        ffff(i)=-1;
    end
end
signal_filer = -ffff;
% % % % % % % % % % end add



% [b,a]=butter(33,1/(10.23e+6));
% signal_filer=filter(b,a,divid_carrierwave);
% %对滤波后的信号进行判决
% for k=1:40920
%     if signal_filer(k)<0
%         signal_filer(k)=-1;
%     else
%         signal_filer(k)=1;
%     end
% end
%产生本地码并采样
n = 1023;
[code,ca] = generate(n);
m = 421;
cacode_A = ca(1:m);
cacode_B = ca(m+1:n);
cacode = [cacode_B,cacode_A];
for j = 1:n
    local_ca((j-1)*40 + 1:j*40) = repmat(cacode(j),1,40);
end
corr_value0 =local_ca*(local_ca');
%%%%%%% 对本地码进行偏移产生两路码信号进行相关运算,绘出S曲线 %%%%%%%
%t的时间间隔大约为24ns,也就是说码片每两个采样点之间的间隔为24ns
%设超前滞后本地码的间隔interval 为半个码片,则移动码片为20个采样点
%x = -60:2:60;
x = -1.5:0.05:1.5;
y1 = zeros(1,61);
corr_value1 = zeros(1,61);  corr_value2 = zeros(1,61);   

local_ca1 = [local_ca(20+1:end),local_ca(1:20)];                   %向左偏移半个码片,即超前半个码片
local_ca2 = [local_ca(end-20:end),local_ca(1:end-20-1)];           %向右偏移半个码片,即滞后半个码片
for i=-30:1:30
    if i<0                                         % i<0在这里认为是滞后
    %j= round(abs(i)*2);
    j = abs(i*2);
    local_ca1_early = [local_ca1(end-j:end),local_ca1(1:end-j-1)];
    local_ca2_late = [local_ca2(end-j:end),local_ca2(1:end-j-1)];
    corr_value1(i+31) =local_ca1_early*(signal_filer');
    corr_value2(i+31) =local_ca2_late*(signal_filer');
    y1(i+31) = (corr_value2(i+31)-corr_value1(i+31))/corr_value0;
    end
    if i>0                                      % i>0在这里认为是超前 
    %j= round(abs(i)*2);
    j= i*2;
    local_ca1_early = [local_ca1(j+1:end),local_ca1(1:j)];
    local_ca2_late = [local_ca2(j+1:end),local_ca2(1:j)];
    corr_value1(i+31) =local_ca1_early*(signal_filer');
    corr_value2(i+31) =local_ca2_late*(signal_filer');
    y1(i+31) = (corr_value2(i+31)-corr_value1(i+31))/corr_value0;
    end
    if i==0                                     % i=0就认为是不超前也不滞后
    corr_value1(i+31) =local_ca1*(signal_filer');
    corr_value2(i+31) =local_ca2*(signal_filer');
    y1(i+31) = (corr_value2(i+31)-corr_value1(i+31))/corr_value0;
    end
end
corr_value1 = corr_value1/corr_value0;                 %超前相关器的相关值R1
corr_value2 = corr_value2/corr_value0;                 %滞后相关器的相关值R2
figure(2);
plot(x,y1,'-r>');
grid on;
hold on;
plot(x,corr_value1,':bo');
plot(x,corr_value2,':go');
legend('e(t)','R1','R2');
title('S曲线图');
xlabel('跟踪误差 x'),ylabel('校正量 S');


⌨️ 快捷键说明

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