www.gusucode.com > GPS仿真Matlab编程源码程序 > GPS仿真Matlab编程源码程序/include/makeCaTable.m
function caCodesTable = makeCaTable(settings) %Function generates CA codes for all 32 satellites based on the settings %provided in the structure "settings". The codes are digitized at the %sampling frequency specified in the settings structure. %One row in the "caCodesTable" is one C/A code. The row number is the PRN %number of the C/A code. % %caCodesTable = makeCaTable(settings) % % Inputs: % settings - receiver settings % Outputs: % caCodesTable - an array of arrays (matrix) containing C/A codes % for all satellite PRN-s %-------------------------------------------------------------------------- % SoftGNSS v3.0 % % Copyright (C) Darius Plausinaitis % Written by Darius Plausinaitis % Based on 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: makeCaTable.m,v 1.1.2.6 2006/08/14 11:38:22 dpl Exp $ %--- Find number of samples per spreading code ---------------------------- samplesPerCode = round(settings.samplingFreq / ... (settings.codeFreqBasis / settings.codeLength)); %--- Prepare the output matrix to speed up function ----------------------- caCodesTable = zeros(32, samplesPerCode); %--- Find time constants -------------------------------------------------- ts = 1/settings.samplingFreq; % Sampling period in sec tc = 1/settings.codeFreqBasis; % C/A chip period in sec %=== For all satellite PRN-s ... for PRN = 1:32 %--- Generate CA code for given PRN ----------------------------------- caCode = generateCAcode(PRN); %=== Digitizing ======================================================= %--- Make index array to read C/A code values ------------------------- % The length of the index array depends on the sampling frequency - % number of samples per millisecond (because one C/A code period is one % millisecond). codeValueIndex = ceil((ts * (1:samplesPerCode)) / tc); %--- Correct the last index (due to number rounding issues) ----------- codeValueIndex(end) = 1023; %--- Make the digitized version of the C/A code ----------------------- % The "upsampled" code is made by selecting values form the CA code % chip array (caCode) for the time instances of each sample. caCodesTable(PRN, :) = caCode(codeValueIndex); end % for PRN = 1:32