📄 s_quxian.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 + -