www.gusucode.com > GPS仿真Matlab编程源码程序 > GPS仿真Matlab编程源码程序/include/generateCAcode.m
function CAcode = generateCAcode(PRN) % generateCAcode.m generates one of the 32 GPS satellite C/A codes. % % CAcode = generateCAcode(PRN) % % Inputs: % PRN - PRN number of the sequence. % % Outputs: % CAcode - a vector containing the desired C/A code sequence % (chips). %-------------------------------------------------------------------------- % SoftGNSS v3.0 % % Copyright (C) Darius Plausinaitis % Written by Darius Plausinaitis % Based on Dennis M. Akos, Peter Rinder and Nicolaj Bertelsen %-------------------------------------------------------------------------- %This program is free software; you can redistribute it and/or %modify it under the terms of the GNU General Public License %as published by the Free Software Foundation; either version 2 %of the License, or (at your option) any later version. % %This program is distributed in the hope that it will be useful, %but WITHOUT ANY WARRANTY; without even the implied warranty of %MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the %GNU General Public License for more details. % %You should have received a copy of the GNU General Public License %along with this program; if not, write to the Free Software %Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, %USA. %-------------------------------------------------------------------------- %CVS record: %$Id: generateCAcode.m,v 1.1.2.5 2006/08/14 11:38:22 dpl Exp $ %--- Make the code shift array. The shift depends on the PRN number ------- % The g2s vector holds the appropriate shift of the g2 code to generate % the C/A code (ex. for SV#19 - use a G2 shift of g2s(19) = 471) g2s = [ 5, 6, 7, 8, 17, 18, 139, 140, 141, 251, ... 252, 254, 255, 256, 257, 258, 469, 470, 471, 472, ... 473, 474, 509, 512, 513, 514, 515, 516, 859, 860, ... 861, 862 ... end of shifts for GPS satellites ... Shifts for the ground GPS transmitter are not included ... Shifts for EGNOS and WAAS satellites (true_PRN = PRN + 87) 145, 175, 52, 21, 237, 235, 886, 657, ... 634, 762, 355, 1012, 176, 603, 130, 359, 595, 68, ... 386]; %--- Pick right shift for the given PRN number ---------------------------- g2shift = g2s(PRN); %--- Generate G1 code ----------------------------------------------------- %--- Initialize g1 output to speed up the function --- g1 = zeros(1, 1023); %--- Load shift register --- reg = -1*ones(1, 10); %--- Generate all G1 signal chips based on the G1 feedback polynomial ----- for i=1:1023 g1(i) = reg(10); saveBit = reg(3)*reg(10); reg(2:10) = reg(1:9); reg(1) = saveBit; end %--- Generate G2 code ----------------------------------------------------- %--- Initialize g2 output to speed up the function --- g2 = zeros(1, 1023); %--- Load shift register --- reg = -1*ones(1, 10); %--- Generate all G2 signal chips based on the G2 feedback polynomial ----- for i=1:1023 g2(i) = reg(10); saveBit = reg(2)*reg(3)*reg(6)*reg(8)*reg(9)*reg(10); reg(2:10) = reg(1:9); reg(1) = saveBit; end %--- Shift G2 code -------------------------------------------------------- %The idea: g2 = concatenate[ g2_right_part, g2_left_part ]; g2 = [g2(1023-g2shift+1 : 1023), g2(1 : 1023-g2shift)]; %--- Form single sample C/A code by multiplying G1 and G2 ----------------- CAcode = -(g1 .* g2);