GPS信号捕获.docx

上传人:b****5 文档编号:11976745 上传时间:2023-04-16 格式:DOCX 页数:13 大小:374.88KB
下载 相关 举报
GPS信号捕获.docx_第1页
第1页 / 共13页
GPS信号捕获.docx_第2页
第2页 / 共13页
GPS信号捕获.docx_第3页
第3页 / 共13页
GPS信号捕获.docx_第4页
第4页 / 共13页
GPS信号捕获.docx_第5页
第5页 / 共13页
点击查看更多>>
下载资源
资源描述

GPS信号捕获.docx

《GPS信号捕获.docx》由会员分享,可在线阅读,更多相关《GPS信号捕获.docx(13页珍藏版)》请在冰豆网上搜索。

GPS信号捕获.docx

GPS信号捕获

实验二GPS信号捕获

姓名:

学号:

一、实验目的

1.熟悉GPS信号捕获基本概念;

2.掌握串行搜索算法、并行频率搜索算法和并行码相位搜索捕获算法的基本思想、特点及算法流程;

3.训练在实际当中分析问题、解决问题的能力。

二、实验要求

1.编写GPS信号捕获子程序,算法自选。

2.将实验一最终生成的信号延迟

时间,并加上大小为

的多普勒频移,使用以上编写的信号捕获子程序对该信号进行捕获。

3.画出三维捕获结果图(要求至少画出两幅,一幅对应信号成功捕获,一幅对应未捕获到信号)。

三、实验内容

1.实验代码

%指标是signalpower=-185dBW,此时可以进行室内定位;

%指标是SNR=-52dB,此时noisepower=-133dBW

Dopler_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_fft

CA_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,此时signalpower=-183dBW

DIV_AWGN=10^(Noisepower/10);%输入量为高斯白噪声的方差。

DIV_AWGN:

在均值means为0时,高斯白噪声的方差即噪声的功率单位为(W)

fork=1:

200%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%变量初始化

acq_tag=0;

coh_count=1;

ncoh_count=1;

highdop_index=1;%初始值

lowdop_index=0;

%初始化矩阵并清零

R=zeros(20,(2*Dopler_bound+1)*Length_of_fft);

sum_cohe_accum=zeros(Times_of_ncoh,(2*Dopler_bound+1)*Length_of_fft);%相干累积和清零

sum_ncohe_accum=zeros(1,(2*Dopler_bound+1)*Length_of_fft);%非相干累积和清零

ncohe_accum=zeros(1,(2*Dopler_bound+1)*Length_of_fft);

[gr,gi]=MyAwgn(62*5000*20-NUM,DIV_AWGN);%产生随机高斯白噪声:

Ich=Idata*AMP+gr;

Qch=Qdata*AMP+gi;

forn=1:

Times_of_ncoh%把I和Q转变成二维数组Isn和Qsn

Isn(n,1:

1e5)=Ich(1+(n-1)*1e5:

n*1e5);

Qsn(n,1:

1e5)=Qch(1+(n-1)*1e5:

n*1e5);

end;

forncoh_count=1:

Times_of_ncoh%%%进行非相干累积

whilecoh_count<=20%%进行相干累积

while(highdop_index<=Dopler_bound)|(lowdop_index>=(-1)*Dopler_bound)%一次5000点搜索

iflowdop_index>=Dopler_bound*(-1)

cos_localcarr=LocalCarrier(lowdop_index,Freq_bin,Fc);

sin_localcarr=LocalCarrier(lowdop_index,Freq_bin,Fc);

I=Isn(ncoh_count,1+(coh_count-1)*Length_of_data:

coh_count*Length_of_data).*cos_localcarr-Qsn(ncoh_count,1+(coh_count-1)*Length_of_data:

coh_count*Length_of_data).*sin_localcarr;

Q=Isn(ncoh_count,1+(coh_count-1)*Length_of_data:

coh_count*Length_of_data).*sin_localcarr+Qsn(ncoh_count,1+(coh_count-1)*Length_of_data:

coh_count*Length_of_data).*cos_localcarr;

I_short=Average(Length_of_data,Length_of_fft,I);

Q_short=Average(Length_of_data,Length_of_fft,Q);

Rev_fft=fft(I_short+i*Q_short);%接收来的信号做fft

R(coh_count,1+(lowdop_index+Dopler_bound)*Length_of_fft:

(lowdop_index+Dopler_bound+1)*Length_of_fft)=ifft(Rev_fft.*conj(CA_fft));%相关值R,R其实是一个矩阵

%R_mod(coh_count,1+(lowdop_index+Dopler_bound)*Length_of_fft:

(lowdop_index+Dopler_bound+1)*Length_of_fft)=abs(R(coh_count,1+(lowdop_index+Dopler_bound)*Length_of_fft:

(lowdop_index+Dopler_bound+1)*Length_of_fft));

end;

ifhighdop_index<=Dopler_bound

cos_localcarr=LocalCarrier(highdop_index,Freq_bin,Fc);

sin_localcarr=LocalCarrier(highdop_index,Freq_bin,Fc);

I=Isn(ncoh_count,1+(coh_count-1)*Length_of_data:

coh_count*Length_of_data).*cos_localcarr-Qsn(ncoh_count,1+(coh_count-1)*Length_of_data:

coh_count*Length_of_data).*sin_localcarr;

Q=Isn(ncoh_count,1+(coh_count-1)*Length_of_data:

coh_count*Length_of_data).*sin_localcarr+Qsn(ncoh_count,1+(coh_count-1)*Length_of_data:

coh_count*Length_of_data).*cos_localcarr;

I_short=Average(Length_of_data,Length_of_fft,I);

Q_short=Average(Length_of_data,Length_of_fft,Q);

Rev_fft=fft(I_short+i*Q_short);%接收来的信号做fft

R(coh_count,1+(highdop_index+Dopler_bound)*Length_of_fft:

(highdop_index+Dopler_bound+1)*Length_of_fft)=ifft(Rev_fft.*conj(CA_fft));

%R_mod(coh_count,1+(highdop_index+Dopler_bound)*Length_of_fft:

(highdop_index+Dopler_bound+1)*Length_of_fft)=abs(R(coh_count,1+(highdop_index+Dopler_bound)*Length_of_fft:

(highdop_index+Dopler_bound+1)*Length_of_fft));

end;

lowdop_index=lowdop_index-1;

highdop_index=highdop_index+1;

end;%结束时域搜索频率,求得单次相关值

%共进行2×Dopler_bound+1次,即R实际是一个21×4096型矩阵

%再进行相干累积20次,即R实际是一个20×21×4096型矩阵

%[peak,locate]=max(R_mod(coh_count,:

));

%disp(Threshold);

%ifpeak>Threshold%门限值要科学慎重计算,调试,得到。

%acq_tag=1;

%freqbin_index=ceil(locate/Length_of_fft);%向上取整,求出行号即多普勒频槽号

%freqbin_index=freqbin_index-Dopler_bound-1;

%CA_phase=mod(locate,Length_of_fft);%取模,求出列号即码相位偏移号

%CA_phase=Unaverage(Length_of_fft,Length_of_data,CA_phase);

%CA_phase=CA_phase-1;

%disp(coh_count);

%disp(freqbin_index);

%disp(CA_phase);

%break;

%else

sum_cohe_accum(ncoh_count,:

)=sum_cohe_accum(ncoh_count,:

)+R(coh_count,:

);

coh_count=coh_count+1;

%ifcoh_count==2&ncoh_count==1

%forp=1:

21

%picture(p,:

)=R(coh_count,1+(p-1)*4096:

4096*p);

%end;

%mesh(picture);

%end;%把一次相关结果转化成picture二维矩阵,画三维图

%end;

end;%结束20ms的20次相干累积

%ifncoh_count==1

%forp=1:

21

%picture(p,:

)=sum_cohe_accum(1,1+(p-1)*4096:

4096*p);

%end;

%mesh(picture);

%end;%把20次相干累积结果转化成picture二维矩阵,画三维图

ncohe_accum(:

)=(abs(sum_cohe_accum(ncoh_count,:

)/20)).^2;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

sum_ncohe_accum(:

)=sum_ncohe_accum(:

)+ncohe_accum(:

);%求非相干累积和

%

end;%结束40次非相干累积

forp=1:

21

picture(p,:

)=sum_ncohe_accum(1+(p-1)*4096:

4096*p);

end;

mesh(picture);

holdon;

[peak,locate]=max(sum_ncohe_accum);

freqbin_index=ceil(locate/Length_of_fft);%向上取整,求出行号即多普勒频槽号

freqbin_index=freqbin_index-Dopler_bound-1;%freqbin_index取值范围从-Dopler_bound,到+Dopler_bound

CA_phase=mod(locate,Length_of_fft);%取模,求出列号即码相位偏移号

CA_phase=Unaverage(Length_of_fft,Length_of_data,CA_phase);

CA_phase=CA_phase-1;

disp(peak);

disp(freqbin_index);

disp(CA_phase);

if(freqbin_index==2)&(CA_phase==(Length_of_data-mod(NUM,Length_of_data))|CA_phase==(Length_of_data-mod(NUM,Length_of_data)-1)|CA_phase==(Length_of_data-mod(NUM,Length_of_data)-2)|CA_phase==(Length_of_data-mod(NUM,Length_of_data)+1))

successcount=successcount+1;

acq_tag=1;

end;

end;

disp(successcount);

%fclose(fid1);%捕获结束,关掉文本指针

%fclose(fid2);%捕获结束,关掉文本指针

function[numshort]=Average(n,k,numlong)

rate=n/k;

form=1:

k

count(m)=0;

sum(m)=0;

forl=1:

n

if(floor((l-1)/rate))==(m-1)

count(m)=count(m)+1;

sum(m)=sum(m)+numlong(l);

end;

end;

numshort(m)=sum(m)/(count(m));

end;

function[cos_localcarrsin_localcarr]=LocalCarrier(fd_index,freq_bin,fc)

%本地载波

sam_rate=5000000;

sam_intervel=1.0/sam_rate;

fr=fc+fd_index*freq_bin;

k=linspace(0,4999,5000);

cos_localcarr=10*cos(2*pi*fr*sam_intervel*k);

sin_localcarr=10*sin(2*pi*fr*sam_intervel*k);

function[g1,g2]=MyAwgn(n,div)

%******complexGausswhitenoise

%******均值为0

%n为向量维数

%div%复高斯白噪声的方差

%实高斯白噪声的方差为div/2

mean=0;%meanan

u1=rand(1,n);%在【0,1】上均匀分布的n个数

u2=rand(1,n);

a=sqrt(-2.*log(u1));%由随机信号分析得到

b=2*pi.*u2;

g1=sqrt(div/2)*a.*cos(b)+mean;%实高斯白噪声,作为实部

g2=sqrt(div/2)*a.*sin(b)+mean;%实高斯白噪声,作为虚部

function[longnum]=Unaverage(in,out,shortnum)

rate=out/in;

ifshortnum==1

longnum=1;

else

longnum=floor((shortnum*rate))+1;

end;

ifshortnum==in

longnum=out;

end;

function[data]=ReadIn()%把文件全部读到数组中,再分段截取利用

[fname,pname]=uigetfile('*.txt','请选择要处理的数据文件firstI,thenQ',10,10);

filepath=[pname,fname];

f1=fopen(filepath,'r');

data=fscanf(f1,'%f');%data为读取文件句柄

function[output_args]=Untitled1(input_args)

p=D;N=50000;%N的大小由你实际情况而定

u=randn(1,N);a=sqrt(p);

u=u*a;

saveu;

 

function[output_args]=Untitled1(input_args)

%UNTITLED1Summaryofthisfunctiongoeshere

%Detailedexplanationgoeshere

2.实验图像

 

捕获成功图像

捕获失败

四、实验总结

通过本次实验,对GPS信号的捕获有了更深刻的印象。

对于网络资源的利用和网络资源的查找有了一个模糊的认识。

互联网上的matlab高手如云,合理的利用,能对学习起到积极的促进作用。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高中教育 > 英语

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1