基于Matlab的Gps三种捕获算法仿真报告为了降低仿真实现的难度,三种捕获算法均是针对同向(I方向)数据进行仿真。1串行捕获算法它是一种逐一预置多普勒频移和对CA码作相关运算的逐步逐行搜索的算法,是现行GPS信号接收机广泛采用的捕获算法。原理图如下:正弦表余弦表载波NCOC/A码发生器非想干积分22信号捕获控制tVV混频相关器相干积分V()IFsniqIQ经过MATLAB仿真程序,先生成C/A码,然后调制在频率为3.25Mhz的L1载波上,并且添加2.5Khz的多普勒频移,最后添加高斯白噪声,生成的信号作为简易GPS信号。接收端在载波+-5Khz的多普勒频移范围内解调信号,并且与不同的C/A码相关运算,经过累加,找出峰值。下图是程序运行的结果。C/A生成代码:shift_G1_reg=[1111111111];shift_G2_reg=[1111111111];G1=zeros(1,1023);G2=zeros(1,1023);L1_CA_code=zeros(1,1023);fork1=1:1:1023G1(k1)=shift_G1_reg(10);G2(k1)=mod(shift_G2_reg(2)+shift_G2_reg(6),2);L1_CA_code(k1)=mod(G1(k1)+G2(k1),2);feedback_G1=mod(shift_G1_reg(3)+shift_G1_reg(10),2);feedback_G2=mod(shift_G2_reg(2)+shift_G2_reg(3)+shift_G2_reg(6)+shift_G2_reg(8)+shift_G2_reg(9)+shift_G2_reg(10),2);fork2=10:-1:2shift_G1_reg(k2)=shift_G1_reg(k2-1);shift_G2_reg(k2)=shift_G2_reg(k2-1);endshift_G1_reg(1)=feedback_G1;shift_G2_reg(1)=feedback_G2;器endL1_CA_code=(L1_CA_code-0.5)*2;GPS_signal生成代码:L1_CA_code_half=zeros(1,length(L1_CA_code)*2);%建立数组空间,数据都为0forkk1=1:length(L1_CA_code)L1_CA_code_half((2*kk1-1):(2*kk1))=L1_CA_code(kk1)*ones(1,2);endforkk2=1:length(L1_CA_code)%L1_CA_code_sampAD采样信号4M采样每周期1023*4码片L1_CA_code_samp((4*kk2-3):(4*kk2))=L1_CA_code(kk2)*ones(1,4);endFs=7.5e6;%采样频率Fc=3.25e6;%载波中心频率Fd=2.5e3;%载波多普勒频移+_2.5KHzCr=1.023e6;%伪码速率:1.023M%Sn=Fs/Cr;%采样率C_N0=70;SNR=C_N0-10*log10(Fs);%扩频调制t=1/Fs:1/Fs:(1023*4)/Fs;%采样点每个码片采4个点,总共1023*4/1.023=4000个点%cos_data=cos(2*pi*Fc*t);%未添加载波多普勒cos_data=cos(2*pi*(Fc+Fd)*t);%添加载波多普勒只调制同相分量信号sig_pure=L1_CA_code_samp.*cos_data;signal=awgn(sig_pure,SNR);捕获代码:fdop=linspace(0,5e3,100);L1_CA_code_local=[L1_CA_code_samp(4042:4092),L1_CA_code_samp(1:4041)];peak_out=zeros(100,100);%%fordd1=1:100;t=1/Fs:1/Fs:4092/Fs;I_cos=cos(2*pi*(Fc+fdop(dd1))*t);cos_data=cos(2*pi*(Fc+Fd)*t);deal_fd_data=signal.*I_cos;fordd2=1:100%码相位L1_CA_code_local_kk=[L1_CA_code_local(dd2:4092),L1_CA_code_local(1:(dd2-1))];deal_xor_data=L1_CA_code_local_kk.*deal_fd_data;%相关运算peak_out(dd1,dd2)=sum(abs(fftshift(fft(deal_xor_data))));%求和可看成是积分运算endendmesh(peak_out);%画图2并行频率捕获算法它是用离散傅里叶变换将原本在时域中进行的多普勒频移搜索过程转换到频域下进行搜索,而将多普勒搜索过程作并行处理。捕获原理图GPS信号的生成和串行捕获的一样。接收端在载波+-5Khz的多普勒频移范围内解调信号,并且与不同的C/A码相关运算,通过FFT变换将相关运算值变换到频域,通过频域的峰值可以捕获到载波多普勒和C/A码。捕获代码如下:fdop=linspace(0,5e3,100);L1_CA_code_local=[L1_CA_code_samp(4042:4092),L1_CA_code_samp(1:4041)];peak_out=zeros(100,100);fordd1=1:100;t=1/Fs:1/Fs:4092/Fs;I_cos=cos(2*pi*(Fc+fdop(dd1))*t);cos_data=cos(2*pi*(Fc+Fd)*t);deal_fd_data=signal.*I_cos;fordd2=1:100L1_CA_code_local_kk=[L1_CA_code_local(dd2:4092),L1_CA_code_local(1:(dd2-1))];deal_xor_data=L1_CA_code_local_kk.*deal_fd_data;peak_out(dd1,dd2)=sum(abs(fftshift(fft(deal_xor_data))));endendmesh(peak_out);3并行码相位捕获算法基本方法是用环形相关技术来进行接受吗与本地吗的相关运算,而不是通过改变本地吗的码相位来进行搜索捕获;通过FFT变换吧时域下接收码与本地码的相关运算转换为频域下接收码与本地码共轭信号的乘法原发,今儿用IFFT将结果转换到时域中来实现GPS信号捕获。捕获原理图如下:GPS信号的生成同上。接收端在载波+-5Khz的多普勒频移范围内解调信号,解调输出通过FFT变换到频域,并且将本地生成的C/A码序列也变换到频域,然后两者相乘,然后经过IFFT将乘积结果转换到时域,并去模来分析捕获结果。捕获代码如下:fdop=linspace(0,5e3,100);L1_CA_code_local=[L1_CA_code_samp(4042:4092),L1_CA_code_samp(1:4041)];peak_out=zeros(100,100);forkk3=1:length(L1_CA_code)L1_CA_code_samp((4*kk3-3):(4*kk3))=L1_CA_code(kk3)*ones(1,4);endfordd1=1:100;t=1/Fs:1/Fs:4092/Fs;I_cos=cos(2*pi*(Fc+fdop(dd1))*t);cos_data=cos(2*pi*(Fc+Fd)*t);deal_fd_data=signal.*I_cos;fordd2=1:100L1_CA_code_local_kk=[L1_CA_code_local(dd2:4092),L1_CA_code_local(1:(dd2-1))];fftL11=fft(deal_fd_data);fftL12=fft(L1_CA_code_local);fftL12conj=conj(fftL12);fftL11L12=fftL11.*fftL12conj;ifftL11L12=ifft(fftL11L12);peak_out(dd1,dd2)=sum(abs(ifftL11L12));endendmesh(peak_out);