数字中频GPS信号的MATLAB仿真
- 格式:pdf
- 大小:313.23 KB
- 文档页数:7
【matlab国外编程代写】GPS信号捕获matlab仿真clear;%指标是signalpower=-185dBW,此时可以进行室内定位;%指标是SNR=-52dB,此时noisepower=-133dBWDopler_bound = 10; %原来是20,为加快运行速度,减少频率槽数Freq_bin = 500;Fc = 1250000;Length_of_data = 5000;Length_of_fft = 4096;NUM = 5;%50010;Signalpower = -177 %I路信号的功率(dBW)Noisepower = -143 %噪声的复功率(dBW)Threshold = 1e5;Times_of_ncoh = 40;%变量初始化successcount=0;%在卫星从地平线升起或降落时,用户速度900m/s时,径向速度差不多(+ -)10K,fid_ca=fopen('CA_5000.txt','r');CA_samp=fscanf(fid_ca,'%d');%5000点fclose(fid_ca);CA_samp=CA_samp';%本地伪码FFT:CA_fftCA_local=Average(Length_of_data, Length_of_fft, CA_samp);%plot(CA_local)CA_fft=fft(CA_local);%plot(imag(CA_fft))Idata=ReadIn( ); %把文本Idata全部读到Idata数组中Qdata=ReadIn( ); %Idata=Idata';Qdata=Qdata';Idata(1:NUM)=[]; %删去前NUM个元素Qdata(1:NUM)=[];AMP=sqrt(2*10^(Signalpower/10)) %输入量为幅度系数,单位相当于(V),%AMP=1e-9,此时signal power=-183dBW DIV_AWGN= 10^(Noisepower/10) %输入量为高斯白噪声的方差。
摘要扩频通信是近几年来迅速发展起来的一种通信技术。
在早期研究这种技术的主要目的是为提高军事通信的和抗干扰性能,因此这种技术的开发和应用一直是处于状态。
扩频技术在军事应用上的最成功例可以以美国和俄国的全球定位系统(GPS和GLONASS)为代表;在民用上GPS和GLONASS也都得到了广泛的应用,这些系统的基础就是扩频技术。
全球定位系统(GPS)用于对全球的民用与军用飞机、舰船、人员、车辆等提供实时导航定位服务。
GPS系统采用典型的CDMA体制,这种扩频调制信号具有低截获概率特性。
该系统主要利用直接序列扩频调制技术,采用的伪码有C/A码和P(Y)码两种。
本文讲述的是直接序列扩频通信技术在全球定位系统(GPS)中的应用。
主要介绍扩频通信中的伪码仿真,简要论述M序列和伪随机噪声码(P码和C/A码)与其产生,并使用MATLAB7.0仿真M序列、P码和C/A码的编码过程和仿真结果,介绍直扩频技术伪码的相关知识,重点介绍P码。
关键字:全球定位系统;直接扩频通信;伪码仿真AbstractSpread spectrum communication is a communications technology developed rapidly in recent years. In early studies the main purpose of this technology is to improve the military communications confidential and anti-jamming performance, therefore the development and application of this technology is always in secret state. Spread spectrum technology in the most successful military application examples are the United States and Russia could the global positioning system (GPS and GLONASS) for representative; In civil GPS and GLONASS also have been widely used,which foundation of system is the spread spectrum technology.Global positioning system (GPS) is used to provide real-time navigation and positioning services for global civil and military aircraft, ships, personnel, vehicles and so on. GPS system adopts the typical CDMA system, which kind of spread spectrummodulation signals have low intercept probability characteristic. This system mainly used the direct sequence spread spectrum modulation technology, using the PRN code including C/A code, P codes and Y codes.This article tells the direct sequence spread spectrum communication technology applied in global positioning system (GPS) .The article mainly introduces the pn code spread spectrum communication simulation, briefly discussing M sequence and pseudo random noise code (P yards and C/A yards) and its produce and use MATLAB7.0 simulate M series, P yards and C/A yards of encoding process and the simulation results, introducing pn code straight spread-spectrum technology knowledge, especially P yards.Key: GPS; DS-SS;Pn code simulation目录引言41GPS理论与其特性51.1GPS系统概述51.2GPS信号构成71.2.1M序列101.2.2C/A码131.2.3P码151.3小结192MATLAB软件192.1MATLAB软件简介202.2MATLAB应用概述212.2.1 MATLAB功能介绍212.2.2 MATLAB使用方法233 GPS卫星导航信号算法与其MATLAB仿真293.1 C/A码仿真代码与其仿真结果293.2 P码的仿真代码与其仿真结果323.3 结果分析与其相关性分析36结论37致38参考文献39附录A 英文原文40附录B 中文翻译41附录C C/A码源代码41附录D P码源代码54引言全球卫星定位系统,简称GPS系统,可在全球围,全天候为用户连续地提供高精度的位置、速度和时间信息。
GPS卫星轨道计算及其MATLAB仿真黎奇,白征东,李帅,陈波波(清华大学地球空间信息研究所,北京 100084)一、程序设计思路1. 读取RINEX文件(注意:文件路径)2. 计算测量日周积秒(测量日的格里历→GPST)3. 按卫星轨道计算步骤计算WGS-84坐标系坐标(内插)4. 按需要将WGS-84坐标系下坐标转换为所需坐标系坐标5. 画图输出二、n 文件说明及读取程序参考时刻oe t 的RINEX 格式的 “”广播星历文件具体如下:(加粗部分为本次轨道化Ω,率i ,弧度/秒4-22)标svacc ,米)收到的卫星信号解,秒)文件名:RinexNreader.m 输 入:文件地址,卫星编号三、计算测量日的周积秒文件名:GCtoGPS.m (其中调用函数:GCtoJD.m)输入:指定公历的年、月、日、时、分、秒文件名:GCtoJD.m输 入:指定公历的 年、月、日四、GPS 卫星轨道计算步骤及计算程序1. 计算卫星运动的平均角速度n平均角速度()03n =经摄动参数n ∆改正后的平均角速度0n n n =+∆3#61-79),n ∆(2#42-60);14323.98600510/GM m s =⨯ 2. 计算归化时间k t说明:①广播星历是oe t 时刻的,对应的轨道参数也是oe t 时刻的,而观测时间在t 时刻,显然oe t t <。
所以,要想获得t 时刻的轨道参数,需要知道t 与oe t 之间的差值即k t 。
以此,按照oe t 时刻轨道参数,外推t 时刻轨道参数。
②k t 的起算时间是星期六/星期日子夜0点,当302400k t s >时,604800k t s -;当302400k t s <-时,+604800k t s 。
(604800s=1周) =k oe t t t -,且604800302400604800302400k k k k k k t t t t t t =-⎧⎨=+⎩> <-已知:oe t (1#4-21)3. 计算观测时刻的平近点角k M0k k M M nt =+已知:0M (2#61-79),n (见1),k t (见2) 4. 计算观测时刻的偏近点角k Esin k k k E M e E =+已知:k M (见3),e (3#23-41)方法:迭代解算,设初值0k k E M =,迭代2次基本收敛。
配套毕业设计论文见百度文库请搜索《基于MATLAB的GPS信号仿真123》附录C 仿真程序代码1、数据码的产生function datacode=data(x)y=rand(1,x);for i=1:xif y(i)<0.5datacode(i)=0;elsedatacode(i)=1;endendy(1)=0;show2(1)=datacode(1);q=2;for i=1:length(datacode)for j=1:100y(q)=i-1+j*0.01;show2(q)=datacode(i);q=q+1;endendplot(y,show2);axis([0 length(datacode) -0.2 1.2]);1、C/A码的产生及扩频调制clc;c=input('请输入数据码的长度:c=');y=rand(1,c);for i=1:cif y(i)<0.5datacode(i)=0;elsedatacode(i)=1;endendx(1)=0;show(1)=datacode(1);p=2;for i=1:cfor j=1:100x(p)=i-1+j*0.01;show(p)=datacode(i);p=p+1;endendsubplot(4,1,1);plot(x,show);title('数据码');axis([0 c -0.2 1.2]);number=input('请输入卫星PRN号码:number=');cacode=CAgenerate(number);temp=cacode(1:100)x(1)=0;show(1)=temp(1);p=2;%下面的循环是为了将结果显示成方波形式for i=1:length(temp)for j=1:100x(p)=i-1+j*0.01;show(p)=temp(i);p=p+1;endend%画出仿真结果图subplot(4,1,2);plot(x,show);title('C/A码');axis([0 100 -0.2 1.2]);%截取CA码的前十个数据进行扩频,每个数据插入5个CA序列 cacode1=cacode(1:10);for i=1:cif datacode(i)==1datacodek((i-1)*50+1:i*50)=ones(1,50);elsedatacodek((i-1)*50+1:i*50)=zeros(1,50);endendfor i=1:cfor j=1:50addr=rem(((i-1)*50+j),10);if addr==0addr=10;endkuopindata((i-1)*50+j)=xor(datacodek((i-1)*50+j),cacode1(addr));endend%下面的循环是为了将结果显示成方波形式x(1)=0;show(1)=kuopindata(1);p=2;for i=1:length(kuopindata)for j=1:100x(p)=i-1+j*0.01;show(p)=kuopindata(i);p=p+1;endendsubplot(4,1,3);plot(x,show);title('扩频数据');axis([0 length(kuopindata) -0.2 1.2]);%每位数据通过正弦波来调制Sinwave=sin([0:2*pi/8:2*pi*7/8]);Sinwave=single(Sinwave);GPSsignal=zeros(1,1);Sinwave=[Sinwave Sinwave Sinwave Sinwave Sinwave];for i=1:length(kuopindata)GPSsignal=[GPSsignal kuopindata(i)*Sinwave];endGPSsignal=GPSsignal(2:length(GPSsignal));subplot(4,1,4);plot(GPSsignal(1:500));title('调制后数据');C/A码产生的子程序CAgenerate:function cacode=CAgenerate(number)if (number<1)|(number>37)disp('输入参数必须在1 ~ 37之间取值');returnendCACode=zeros(1,1023); %生成一个1*1023的零矩阵% 设置寄存器初相Reg1=[1,1,1,1,1,1,1,1,1,1];Reg2=[1,1,1,1,1,1,1,1,1,1];% 设置反馈点,1表示需要反馈gp1=[0,0,1,0,0,0,0,0,0,1];gp2=[0,1,1,0,0,1,0,1,1,1];% 抽头G2Table=[ 2,3,4,5,1,2,1,2,3,2,3,5,6,7,8,9,1,2,3,4,5,6,1,4,5,6,7,8,1,2,3 ,4,5,4,1,2,4;6,7,8,9,9,10,3,4,6,7,8,9,10,4,5,6,7,8,9,3,6,7,8,9,10,6,7,8,9,10,10,7,8,10;] % 生成一个周期的伪码序列for m=1:1023CACode(m)=mod(Reg1(10)+Reg2(G2Table(1,number))+Reg2(G2Table(2,number)),2);Reg1=[mod(Reg1*gp1',2),Reg1(1:9)];Reg2=[mod(Reg2*gp2',2),Reg2(1:9)];endcacode=CACode;2、C/A码的相关性分析clc;n=input('请输入卫星PRN号码:n=');cacode1=CAgenerate(n);%在G2序列中找出-1并转换为0,找出1并转换为1ind1=find(cacode1==1);ind2=find(cacode1==0);cacode1(ind1)=-ones(1,length(ind1)); cacode1(ind2)=ones(1,length(ind2)); N=1023;z=zeros(1,1023);for i=0:N-1for k=i+1:N-1z1(k)=cacode1(k)*cacode1(k-i); z(i+1)=z(i+1)+z1(k);endz(i+1)=z(i+1)/N;endsubplot(2,1,1);plot(z);title('自相关特性');axis([-50 1300 -0.5 1.2]);n=input('请输入卫星PRN号码:n='); cacode2=CAgenerate(n);ind1=find(cacode2==1);ind2=find(cacode2==0);cacode2(ind1)=-ones(1,length(ind1)); cacode2(ind2)=ones(1,length(ind2));N=1023;h=zeros(1,1023);for i=0:N-1for k=i+1:N-1h1(k)=cacode1(k)*cacode2(k-i); h(i+1)=h(i+1)+h1(k);endh(i+1)=h(i+1)/N;endsubplot(2,1,2);plot(h);title('互相关特性');axis([-50 1300 -0.5 1]);4、 P码的产生及扩频调制clc;c=input('请输入数据码的长度:c='); y=rand(1,c);for i=1:cif y(i)<0.5datacode(i)=0;elsedatacode(i)=1;endendx(1)=0;show(1)=datacode(1);p=2;for i=1:cfor j=1:100x(p)=i-1+j*0.01;show(p)=datacode(i);p=p+1;endendsubplot(4,1,1);plot(x,show);title('数据码');axis([0 c -0.2 1.2]);NumberPCode=input('enter the NumberPcode='); NumberShift=input('enter the NumberShift=');a=input('enter a=');pcode=Pcode(a,NumberPCode,NumberShift);x(1)=0;show(1)=pcode(1);p=2;for i=1:length(pcode)for j=1:100x(p)=i-1+j*0.01;show(p)=pcode(i);p=p+1;endendsubplot(4,1,2);plot(x,show);title('P码');axis([0 length(pcode) -0.2 1.2]);pcode=pcode(1:10);for i=1:cif datacode(i)==1datacodek((i-1)*50+1:i*50)=ones(1,50); elsedatacodek((i-1)*50+1:i*50)=zeros(1,50); endendfor i=1:cfor j=1:50addr=rem(((i-1)*50+j),10);if addr==0addr=10;endkuopindata((i-1)*50+j)=xor(datacodek((i-1)*50+j),pcode(addr)); endendx(1)=0;show(1)=kuopindata(1);p=2;%下面的循环是为了将结果显示成方波形式for i=1:length(kuopindata)for j=1:100x(p)=i-1+j*0.01;show(p)=kuopindata(i);p=p+1;endendsubplot(4,1,3);plot(x,show);title('扩频数据');axis([0 length(kuopindata) -0.2 1.2]);%每位数据通过正弦波来调制Sinwave=sin([0:2*pi/8:2*pi*7/8]);Sinwave=single(Sinwave);GPSsignal=zeros(1,1);Sinwave=[Sinwave Sinwave Sinwave Sinwave Sinwave];for i=1:length(kuopindata)GPSsignal=[GPSsignal kuopindata(i)*Sinwave];endGPSsignal=GPSsignal(2:length(GPSsignal));subplot(4,1,4);title('调制后数据');plot(GPSsignal(1:500));以下是P码产生的子程序Pcode:function pcode=Pcode(a,NumberPCode,NumberShift) % P码产生reg1a=[0 0 0 1 0 0 1 0 0 1 0 0];reg1b=[0 0 1 0 1 0 1 0 1 0 1 0];reg2a=[1 0 1 0 0 1 0 0 1 0 0 1];reg2b=[0 0 1 0 1 0 1 0 1 0 1 0];rx1a=0;rx1b=0;rx2a=0;rx2b=0;x1bWork=1;x2aWork=1;x2bWork=1;N=NumberShift;C1=4092*3750;C2=4093*3749;z1a=mod(N,4092);%取余数x1a=mod([(N-z1a)/4092],3750);y1a=(N-z1a-4092*x1a)/C1;if ((N-C1*y1a)>=C2)z1b=4092;x1bWork=0;x1b=3748;elsez1b=mod((N-C1*y1a),4093);x1bWork=1;x1b=(N-z1b-C1*y1a)/4093;endm=mod(N,(C1+37));y2a=(N-m)/(C1+37);if (m>=C1)dv=m-C1;elsedv=0;endz2a=mod((m-dv),4092);x2a=mod((((m-dv)-z2a)/4092),3750);z2b=mod((m-dv),4093);if (m>=C2)x2b=3748;elsex2b=(m-z2b)/4093;end%各移位寄存器的状态for i=1:z1aslave1a=mod(reg1a(6)+reg1a(8)+reg1a(11)+reg1a(12),2);reg1a(2:12)= reg1a(1:11);reg1a(1)=slave1a;endfor i=1:z1bslave1b=mod(reg1b(1)+reg1b(2)+reg1b(5)+reg1b(8)+reg1b(9)+reg1b(10)+reg1b(11 )+reg1b(12),2);reg1b(2:12)=reg1b(1:11);reg1b(1)=slave1b;endfor i=1:z2aslave2a=mod(reg2a(1)+reg2a(3)+reg2a(4)+reg2a(5)+reg2a(7)+reg2a(8)+reg2a(9)+ reg2a(10)+reg2a(11+reg2a(12)) ,2);reg2a(2:12)=reg2a(1:11);reg2a(1)=slave2a;endfor i=1:z2bslave2b=mod(reg2b(2)+reg2b(3)+reg2b(4)+reg2b(8)+reg2b(9)+reg2b(12) ,2);reg2b(2:12)=reg2b(1:11);reg2b(1)=slave2b;end%各控制变量的判断if z1a==4091rx1a=1;endif z1b==4092rx1b==1;endif z2a==4091rx2a=1;x2aWork=0;endif z2b==4092rx2b=1;x2bWork=0;end%开始产生P码p=zeros(NumberPCode,1);x1acou=0;x1bcou=0;x2acou=0;x2bcou=0;cou37=dv;x2(1:a)=1;for i=1:(NumberPCode+37)x1(i)=mod( reg1a(12)+reg1b(12),2);x2(i+a)=mod( reg2a(12)+reg2b(12),2);%寄存器x1b的移位函数if x1bWork==1if rx1b==0slave1b=mod(reg1b(1)+reg1b(2)+reg1b(5)+reg1b(8)+reg1b(9)+reg1b(10)+reg1b(11)+reg1b(12),2);reg1b(2:12)=reg1b(1:11);reg1b(1)=slave1b;else if rx1b==1reg1b=[0 0 1 0 1 0 1 0 1 0 1 0];rx1b=0;endendelse if x1bWork==0endendif reg1b==[0 1 0 1 0 1 0 1 0 1 0 0 ]rx1b=1;x1bcou=x1bcou+1;if x1bcou==3749x1bwork=0;x1bcou=0;endend%寄存器x1a的移位函数if rx1a==0slave1a=mod(reg1a(6)+reg1a(8)+reg1a(11)+reg1a(12),2);reg1a(2:12)=reg1a(1:11);reg1a(1)=slave1a;else if rx1a==1reg1a=[0 0 0 1 0 0 1 0 0 1 0 0];rx1a=0;endendif reg1a==[0 0 1 0 0 1 0 0 1 0 0 0]rx1a=1;x1acou=x1acou+1;if x1acou==3750x1bwork=1;x1acou=0;endend%寄存器x2b的移位函数if x2bWork==1if rx2b==0slave2b=mod(reg2b(2)+reg2b(3)+reg2b(4)+reg2b(8)+reg2b(9)+reg2b(12) ,2); reg2b(2:12)=reg2b(1:11);reg2b(1)=slave2b;else if rx2b==1x2bout=reg2b(11);reg2b=[0 0 1 0 1 0 1 0 1 0 1 0];rx2b=0;endendelse if x2bWork==0reg2b=[0 0 1 0 1 0 1 0 1 0 1 0];x2bWork=1;rx2b=0;endendif reg2b==[0 1 0 1 0 1 0 1 0 1 0 0]rx2b=1;x2bcou=x2bcou+1;if x2bcou==3749x2bWork=0;x2bcou=0;endend%寄存器x2a的移位函数if x2aWork==1if rx2a==0slave2a=mod(reg2a(1)+reg2a(3)+reg2a(4)+reg2a(5)+reg2a(7)+reg2a(8)+reg2a(9)+reg2a(10)+reg2a(11)+reg2a(12) ,2); reg2a(2:12)=reg2a(1:11);reg2a(1)=slave2a;else if rx2a==1reg2a=[1 0 1 0 0 1 0 0 1 0 0 1];rx2a=0;endendelse if x2aWork==0if rx2a==1cou37=cou37+1;if cou37==37rx2a=0;x2awork=1;cou37=0;endendendendif reg2a==[0 1 0 0 1 0 0 1 0 0 1 1] rx2a=1;x2acou=x2acou+1;if x2acou==3750x2awork=0;x2acou=0;endendendfor i=1:NumberPCodep(i)= mod( x1(i)+x2(i),2);endp=p';pcode=p';5、 P码的相关性分析clc;NumberPCode=input('enter the number Pcode='); NumberShift=input('enter the numbershift='); a=input('enter a=');pcode=Pcode(a,NumberPCode,NumberShift);ind1=find(pcode==1);ind2=find(pcode==0);pcode(ind1)=-ones(1,length(ind1));pcode(ind2)=ones(1,length(ind2));M=NumberPCode;z=zeros(1,M);for i=0:M-1for k=i+1:M-1z1(k)=pcode(k)*pcode(k-i);z(i+1)=z(i+1)+z1(k);endz(i+1)=z(i+1)/M;endsubplot(2,1,1);plot(z);title('自相关特性');axis([-50 M -0.5 1.2]);a=input('enter a=');NumberShift=input('enter the numbershift='); pcode2=Pcode(a,NumberPCode,NumberShift);h=zeros(1,M);for i=0:M-1for k=i+1:M-1h1(k)=pcode(k)*pcode2(k-i);h(i+1)=h(i+1)+h1(k);endh(i+1)=h(i+1)/M; endsubplot(2,1,2);plot(h);title('互相关特性'); axis([-50 M -0.5 1]);。
数字中频GPS信号的MATLAB仿真1杨勇,陈偲,王可东北京航空航天大学宇航学院,北京 (100083)E-mail:wangkd@摘要:文章以INS/GPS紧耦合为应用对象,在分析中频GPS信号结构的基础上,根据实际环境和载体运行状态,给出GPS信号延时、多普勒频移和钟差等参数,并应用中频信号解析表达式实现多颗卫星信号的合成。
最后,基于MATLAB语言进行了仿真计算,仿真结果表明信号符合实际情况,同时经过软件接收机的捕获、跟踪和解调计算,验证了信号的正确性。
关键词:GPS;高动态;紧耦合;中频;信号模拟器中图分类号:TP3911.引言随着固体弹道导弹射程的不断增加和打击精度的要求提高,纯惯性导航早已不能够满足要求。
全球定位系统(GPS)和惯性系统(INS)相结合是复合制导的重要发展方向之一,而对于GPS/INS组合导航来说,为了缩短研制周期,便于新信号开发及测试,软件信号模拟器和接收机的研究成为重要的研究方向之一。
GPS技术成长非常迅速,现在市场上的手持式GPS接收机已相当普遍,但是国内的自主知识产权的GPS技术产品的研发仍然比较薄弱,尤其是核心芯片的知识产权很少被国内所拥有。
国内的“北斗”、“GALILEO”导航定位都处在发展之中,信号模拟器的研究被越来越多的被重视。
信号模拟器具有成本低、可重复性好、数据完整等优点,不仅能用于组合导航技术研究,也能为新信号的验证研究提供支持,还可以为硬件接收机的接收性能测试提供有效的信号环境模拟。
GPS信号模拟器是软件无线电研究的一个方面,为处于设计阶段的GPS接收机提供仿真环境。
常见的GPS信号生成器产生的是射频信号,而目前接收机的设计重点侧重于基带信号处理,也就是本文中提到的数字中频GPS信号。
数字中频GPS信号模拟器目前主要是仿真载体运动、模拟时钟偏差、卫星星钟误差、电离层误差、对流层误差、多路经效应、天线的方向、弹体振动、以及云层、雷雨等实际环境对GPS信号的影响,并对接收机前端的下变频、滤波、采样和自动增益控制进行仿真,直到生成GPS接收机信号处理所需的数字信号。
数字中频GPS信号的MATLAB仿真1杨勇,陈偲,王可东北京航空航天大学宇航学院,北京 (100083)E-mail:wangkd@摘要:文章以INS/GPS紧耦合为应用对象,在分析中频GPS信号结构的基础上,根据实际环境和载体运行状态,给出GPS信号延时、多普勒频移和钟差等参数,并应用中频信号解析表达式实现多颗卫星信号的合成。
最后,基于MATLAB语言进行了仿真计算,仿真结果表明信号符合实际情况,同时经过软件接收机的捕获、跟踪和解调计算,验证了信号的正确性。
关键词:GPS;高动态;紧耦合;中频;信号模拟器中图分类号:TP3911.引言随着固体弹道导弹射程的不断增加和打击精度的要求提高,纯惯性导航早已不能够满足要求。
全球定位系统(GPS)和惯性系统(INS)相结合是复合制导的重要发展方向之一,而对于GPS/INS组合导航来说,为了缩短研制周期,便于新信号开发及测试,软件信号模拟器和接收机的研究成为重要的研究方向之一。
GPS技术成长非常迅速,现在市场上的手持式GPS接收机已相当普遍,但是国内的自主知识产权的GPS技术产品的研发仍然比较薄弱,尤其是核心芯片的知识产权很少被国内所拥有。
国内的“北斗”、“GALILEO”导航定位都处在发展之中,信号模拟器的研究被越来越多的被重视。
信号模拟器具有成本低、可重复性好、数据完整等优点,不仅能用于组合导航技术研究,也能为新信号的验证研究提供支持,还可以为硬件接收机的接收性能测试提供有效的信号环境模拟。
GPS信号模拟器是软件无线电研究的一个方面,为处于设计阶段的GPS接收机提供仿真环境。
常见的GPS信号生成器产生的是射频信号,而目前接收机的设计重点侧重于基带信号处理,也就是本文中提到的数字中频GPS信号。
数字中频GPS信号模拟器目前主要是仿真载体运动、模拟时钟偏差、卫星星钟误差、电离层误差、对流层误差、多路经效应、天线的方向、弹体振动、以及云层、雷雨等实际环境对GPS信号的影响,并对接收机前端的下变频、滤波、采样和自动增益控制进行仿真,直到生成GPS接收机信号处理所需的数字信号。
目前,国外已成功地开发出多种信号模拟器[1];国内对高动态GPS信号的研究也比较深入,完成了星历的生成、动态信号的原理研究、误差建模和信号的仿真验证等研究工作 [2,3]。
但国内研究的重点集中在数字中频GPS信号的生成,即针对环境误差、载体运动以及卫星星历的仿真,从而通过接收机捕获、跟踪、解算获得所需要的载体位置。
国内大部分研究都成功仿真了GPS信号的功率谱,但是对于其信号真正用于导航解算的介绍不多,尤其是信号的实时性问题。
本文主要针对紧耦合导航中对GPS信号生成的要求,分析GPS信号的生成与应用问题,并结合中频GPS信号的解析表达式,通过解算GPS信号的延迟,基于MATLAB语言,对大机动条件下的GPS信号进行仿真,获得紧耦合导航所需中频信号。
1本课题得到高等学校博士学科点专项科研基金(项目编号:20070006006)的资助。
2.GPS 中频信号的MATLAB 实现2.1 GPS 中频信号GPS 信号为了避免受到干扰,采用高频信号作为载波,对伪随机码和数据码进行调制,本文仅考虑使用L1载波(1575.42MHz )的GPS 信号。
由于L1频率很高,直接进行数字仿真在计算速度和精度上都无法保证,所以,这里直接对信号的中频解析表达式进行仿真,如式(1)所示。
}IF tropo iono SV MP 1tropo iono SV MP IF IF 1tropo iono SV MP 0()()cos[()()()]Ni p i i p d L p S t T t t t t C t T t t t t t t t T t t t t δδδδδδδδωωωωδδδδϕ==−−−+−−−−+−+∆+−∆−+−−++∑(1)其中:r P 为信号功率,单位w ; ()i D 为数据码,频率50Hz ; ()i C 为伪随机码,频率1.023MHz ;IF ω为中频信号角频率,单位rad/s ; d ω为多普勒频移角频率,单位rad/s ; 1L ω为L1载波的角频率,单位rad/s ; 0ϕ为初始相位,单位rad ;t 为接收机时刻,单位s ;t ∆是t 的整毫秒的小数部分,单位s (例如t =105.1121ms,t ∆=0.1121ms ); p T 为从卫星发射到接收机接收的传输时间(不考虑误差),单位s ;tropo t δ为对流层延时,单位s ; iono t δ为电离层延时,单位s ; SV t δ为星钟误差,单位s ; MP t δ为多路径效应误差,单位s ;N 表示接收到的卫星数目。
为了获得所需的GPS 中频信号,同时简化问题,假设: (1)接收机钟差为零; (2)星钟误差SV 0t δ=; (3)多路径效应误差MP 0t δ=。
简化之后获得式(2):}IF tropo iono 1tropo iono IF IF 1tropo iono 0()()cos[()()()]Ni p i i p d L p S t T t t C t T t t t t t T t t δδδδωωωωδδϕ==−−−−−−+∆+−∆−+−+∑(2)根据式(2)可得到最基本的载波信号的关系。
在实际应用中,该式也能应用于其他简单模型。
例如考虑了星钟误差之后,可利用式(1)进行仿真;如果考虑因水面折射、建筑物反射等原因引起的多路径效应时,可用式(3)表示。
其中i α表示信号功率增益系数。
}{IF tropo iono 1tropo iono IF IF 1tropo iono 0tropo iono MP 1tropo iono MP IF IF ()()cos[()()()]()()cos[()()Ni p i i p d L p Ni p i i p d S t T t t C t T t t t t t T t t t T t t t C t T t t t t t t δδδδωωωωδδϕαδδδδδδωωω===−−−−−−+∆+−∆−+−++−−−−−−−−+∆+−∆∑∑}1tropo iono MP 0()]L p T t t t ωδδδϕ−+−++ (3)2.2 传输时间p T 计算给定任意接收时刻,都要能够计算出传输起始时刻,从而为位置计算提供基准,这是一个模拟现实的过程[7]。
本文采用迭代方法计算传输时间,更为简明实用。
首先,根据卫星星历和接收时刻计算出卫星在接收时刻的位置rec P ;然后,由rec P 和用户的接收时刻位置user P 计算出迭代初值p T ,见式(4),c 为光速。
rec user /p T P P c =− (4)最后,根据卫星星历和()p t T −计算出发送起始时刻的卫星位置trans P ,再带入(4)式代替rec P 计算p T ,直到p T 收敛到要求值。
3.接收机接收信号的形成在紧耦合导航中,为了防止失锁,由INS 对GPS 计算进行反馈,使得其能够跟踪迅速变化的频率(主要是多普勒频移变化),所以,在信号模拟中有必要对多普勒信号进行比较精细的控制:计算步长太大,使得伪距分辨率降低;计算步长太小,会使得计算变得比较繁琐,同时增大了计算量。
本文对四颗卫星信号进行仿真,采用了1ms 的计算步长,对每毫秒的数据进行计算,即每1ms 就要重新计算卫星、接收机和信道等参数,使得信号能够满足紧耦合导航的需要。
之所以选用1ms 的计算步长,是因为其精度基本满足要求,同时因为伪随机码的周期为1ms ,也便于计算。
选取1ms 作为计算步长,并不是所有时候都能够满足精度要求,文献[1]中要求的计算步长为10µs 。
不过,都以10µs 作为计算步长也不太合适,因为在载体运动机动性较低时,采用过小的计算步长没有必要,反而会大幅度最大计算量,此时,可以采用相对较大的计算步长。
在这里,可以使用一个选择判断,进行计算步长的自适应变化,如果机动性达到一定要求,就会采用更高精度的计算步长,否则,以一般步长进行计算。
例如选取0.05m/s 的伪距变化率精度,有式(5)所表示的关系。
step step step 100m/s t 1ms100m/s 1,000m/s t 100µs 1,000m/s 10,000m/st 10µsv v v ⎧<=⎪<<=⎨⎪<<=⎩径向径向径向 (5) 多颗卫星(本文中选取了四颗)经过叠加之后,再经过数字化和滤波,最后经过接收机的解调后,可以实现数据码的提取、C/A 码的捕获和跟踪,能够计算出正确的多普勒频移,从而为组合导航提供了可用的信号。
尤其对于紧耦合方案,提供了可用的高动态信号。
4.仿真4.1仿真流程在软件信号模拟方面,实时性 关系到系统的应用。
如果无法实时 完成信号的仿真,就不能使用转台 上的INS 系统,因为无法做到实时 修正GPS ,GPS 也无法实时修正 INS 。
这时,可以通过对INS 系统 进行仿真,使整个系统离线运行, 验证组合导航中的紧耦合方案的可 用性。
如果提高卫星、用户之间的 位置和伪距等模拟参数的计算,然 后对图1中的信号调制部分(阴影 模块)进行硬件化,或者采用效率 较高的C 代码来实现,这样就可能 满足实时性的要求。
因此,目前只完成了工作的第一 步:离线数据产生。
下一步工作重点 集中在实时化方面。
4.2 仿真界面为了实现可变参数的方便调节,以及 整个程序的可读性,建立了若干GUI 界 面,加强仿真处理的可视化、可交互性。
主界面如图2所示。
主要功能是设 定若干环境参数、仿真时间和选择误差类型等,并向用户提供仿真所处阶段,综合显示各仿真参数,绘制关键曲线。
图1 信号生成程序流程图Fig1 Graph of the signal generation4.3 仿真结果该仿真程序通过接收机载体的运行模块计算出来的接收机位置和速度,加上一定的选星原则,获得选星结果之后,将伪距、开普勒频移和各项误差计算出来之后,就可以进行调制得到最终的仿真信号结果。
如图3所示为仿真信号的一部分,其中:中频信号3.563MHz ,采样频率11.999MHz 。
由图3可知,仿真的信号与实际信号基本一致,其中(b)显示出GPS 信号的带宽约为2M (2×1.023M ),中频位于大约3.5M (3.563M )处。
另外,经过软件接收机的捕获、跟踪及解算,得到的多普勒频移、卫星星历与仿真参数完全一致,说明了信号的正确性。
(a )四颗卫星信号的时域图形(1ms 数据) (a ) Waves of the four satellites signal in timedomain(1ms)(b ) 四颗卫星信号的功率谱(1ms 数据) (b ) Power spectrum of the four satellites signal (1ms )图3 仿真信号 Fig3 Simulation signal图2 MATLAB 中的信号仿真交互主界面Fig2 Mainframe of the signal simulation using MATLAB经过GPS 软件接收机的捕获、跟踪等,依据所获得伪距、导航电文,解算出的导航误差如图4所示,获得的导航结果满足要求。