北斗卫星导航信号串行捕获算法MATLAB仿真报告(附MATLAB程序)

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

北斗卫星导航信号串行捕获算法MATLAB仿真报告

一、原理

卫星导航信号的串行捕获算法如图1所示。

图1 卫星导航信号的串行捕获算法

接收机始终在本地不停地产生对应某特定卫星的本地伪码,并且接收机知道产生的伪码的相位,这个伪码按一定速率抽样后与接收的GPS中频信号相乘,然后再与同样知晓频率的本地产生的载波相乘。GPS中频信号由接收机的射频前端将接收到的高频信号下边频得到。实际产生对应相位相互正交的两个本地载波,分别称为同相载波和正交载波,信号与本地载波相乘后的信号分别成为,产生同相I支路信号和正交的Q 支路信号。

两支路信号分别经过一个码周期时间的积分后,平方相加。分成两路是因为C/A码调制和P码支路正交的支路上,假设是I支路。当然由于信号传输过程中引入了相位差,解调时的I支路不一定是调制时的I支路,Q支路也一样,二者不一定一一对应,因此为了确定是否检测到接收信号,需要同时对两支路信号进行研究。相关后的积分是为了获取所有相关数据长度的值的相加结果,平方则是为了获得信号的功率。最后将两个支路的功率相加,只有当本地伪码和本地载波的频率相位都与中频信号相同时,最后得到的功率才很大,否则结果近似为零。根据这个结论考虑到噪声的干扰,在实际设计时应该设定一个判定门限,当两路信号功率和大于设定的门限时则判定为捕获成功,转入跟踪过程,否则继续扫描

其它的频率或相位。

二、MATLAB仿真过程及结果

仿真条件设置:抽样频率16MHz,中频5MHz,采样时间1ms,频

率搜索步进1khz,相位搜索步进1chip,信号功率-200dBW,载噪

比55dB

(1)中频信号产生

卫星导航信号采用数字nco的方式产生,如图2所示。

载波nco控制字为:carrier_nco_word=round(f_carrier*2^N/fs); 伪码nco控制字为:code_nco_word=round(f_code*2^N/fs);

图 2

其中载波rom存储的是正弦信号的2^12个采样点,伪码rom存储长度为2046的卫星伪码。这样伪码采用2psk的方式调制到射频,加性噪声很小是理想接收中频信号如图3所示。

-10

图3 理想中频信号

(2)噪声功率估计

实际接收机接收到的导航信号淹没在噪声中,本程序对接收到的信号进行了

噪声估计并进行了放大。采用滑动平均估计法估计噪声功率,滑动平均估计法原理如图4所示。

图4 噪声功率滑动平均估计法原理

迭代滤波器因子取0.8.功率估计结果是-191.48dBW 。仿真中将接收中频信号放大到了signal_power_dB=-4.94dBW 。 这个功率与后面的判决门限有关系。 (2) 检测门限的确定

常见的检测方法有幅度检波、平方检波和平方律检波。幅度检波器的输出为

在H0假设下,z(k) 服从瑞利分布,其概率密度函数为:

在H(1)假设下,z(k)服从莱斯分布,其概率密度函数为

式中, 为零阶修正的贝塞尔函数。 平方律检波输出为:

在H0假设下,z(k)服从自由度为 2M 的 伽马分布,其概率密度函数为

在H1假设下,z(k)服从自由度为 2M 的 卡方分布,其概率密度函数为

Q I Q 2210222

000

(/)exp[]() 02k

k k k k

k k Z Z D D Z f Z H I Z σσσ+=-⋅≥0

)2exp()

()

2(1

)/(2

1

200≥-

⋅Γ=

-k k

M k M k Z Z Z M H Z f σσ

当 M=1时,平方检波累积器就变成平方律检波器 ,可以计算出当归一化门限为Vt 时其虚警概率为:

其中 采用恒虚警率检测,设虚警率为pfa ,本仿真取0.1 ,采用平方律检波,归一化判决门限为Vt=(-2*log2(pfa))^0.5,实际判决门限为VT=Vt*signal_power (3) 判决算法

常见判决算法有单次判决、M/N 判决、(M/N+1)判决和Tong 判决,采用单次判决,虚警率为pfa=0.1 . 归一化检测门限为Vt=2.5776,判决门限为VT=0.8248; (5)仿真结果

搜索21个多普勒频点和40和相位点,仿真设置接收中频为4.991MHz ,相位为2,结果如图5所示。

6

doppler

code p hase

图中最大处的相关结果是144,其他非峰值最大的约为1.约21dB 。部分相关值如下表:

11/2

211222

000

1()(/)()exp()() 022M k k k k M k Z Z Z f Z H I Z λλσλσσ--+=⋅-⋅≥02

20

1

(/)exp[]221exp 2T

T

k

fa k k k V V t Z P f Z H dZ dZ V σσ+∞+∞

==-⎧⎫=-⎨⎬

⎩⎭

2

t T V V σ=

可以看出绝大部分数值都在门限之下,但也存在若干个在门限之上的数值,这些点可能造成虚警。

附:仿真主程序%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%´®ÐⶻñËã·¨·ÂÕæ%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

clear all;

clc;

% f_doppe=5000;

fsample=21e6;

f_m=5e6;

t_sim=1e-3/1;

df=1/t_sim;

cnt_det=1; %Åоö´ÎÊý

f_carrier=f_m-9*df; %½ÓÊÕÔز¨ÆµÂÊ

f_code=2.046e6; %αÂëËÙÂÊ

code_phase_init=2; %Ê×´ÎËÑË÷ʱ½ÓÊÕÂëÏàλ

code_phase_init_cmp=code_phase_init;

f_local_init=f_m-10*df; %±¾µØÔز¨nco³õʼƵÂÊ

local_code_phase=3; %%%%±¾µØαÂëÏàλ

cnt_doppler=21;

cnt_phase=40;

dot_num=t_sim*fsample; %·ÂÕæÒ»¸öαÂëÖÜÆڵĵãÊý

dBW_signal_pow=-200;

dB_C_I=60;

Am=10^(dBW_signal_pow/20)*2^0.5;

pre_noise_power=dBW_signal_pow-dB_C_I+(10*log10(f_carrier));

corr_result1=zeros(cnt_doppler,cnt_phase);

for dect_num=1:cnt_det %Åоö´ÎÊý

for num_phase=1:cnt_phase %²éÕÒÏàλµãµã

for num_doppeler=1:cnt_doppler %µ¥´Î²éÕÒ¶àÆÕÀÕµã

if num_doppeler==1

f_local=f_local_init;

else

f_local=f_local+df;

end

signal_r=signal_gen(fsample,f_carrier,f_code,code_phase_init,dBW_signal_pow,dB_C_I, dot_num); %%%%%ÕâÀïÔز¨Ö¸Ï±ßƵºóµÄÖÐƵ,ÊÕµ½ºó´

相关文档
最新文档