解读Darius Plausinaitis, Dennis M. Akos所著的关于GPS信号捕获的代码
最新上传所有源码
链接:https://pan.baidu.com/s/1M2oiCWcm9e4DTbsn8g1Fuw
提取码:ewxv
- 参数初始化设置
samplesPerCode = round(settings.samplingFreq / ...
(settings.codeFreqBasis / settings.codeLength));
% 计算每个C/A码包含多少采样点,“...”表示续行
signal1 = longSignal(1 : samplesPerCode);
signal2 = longSignal(samplesPerCode+1 : 2*samplesPerCode);
%取相邻的两个信号,信号长度为1ms,采样点数为samplesPerCode
signal0DC = longSignal - mean(longSignal);
%去直流
ts = 1 / settings.samplingFreq;
%计算采样时间间隔
phasePoints = (0 : (samplesPerCode-1)) * 2 * pi * ts;
%计算1ms信号内的载波相位点
numberOfFrqBins = round(settings.acqSearchBand * 2) + 1;
%计算频率捕获的个数,500Hz步进 总共2kHz,共41个
caCodesTable = makeCaTable(settings);
% makeCaTable函数根据采样频率产生32颗指定卫星的CA码 ,此时为32*samplesPerCode矩阵
%--- 初始化捕获结果矩阵 -------------------------------
results = zeros(numberOfFrqBins, samplesPerCode);
%一颗卫星的包含搜索频率个数与一个C/A码采样个数的零向量
% Carrier frequencies of the frequency bins
%
frqBins = zeros(1, numberOfFrqBins);
%产生一颗卫星的载波偏移初始向量
%--- Initialize acqResults ------------------------------------------------
acqResults.carrFreq = zeros(1, 32);
%初始化32颗卫星的载波频率
acqResults.codePhase = zeros(1, 32);
% C/A code phases of detected signals
acqResults.peakMetric = zeros(1, 32);
% Correlation peak ratios of the detected signals
fprintf('(');
2. 并行码搜索的方式捕获码相位和载波频率
2.1.求信号与本地c/a码的相关值
for PRN = settings.acqSatelliteList
%settings.acqSatelliteList=1:32
caCodeFreqDom = conj(fft(caCodesTable(PRN, :)));%某颗PRN卫星的CA码采样值的FFT区共轭
for frqBinIndex = 1:numberOfFrqBins
%带宽为500Hz的频率遍历
frqBins(frqBinIndex) = settings.IF - ...
(settings.acqSearchBand/2) * 1000 + ...
0.5e3 * (frqBinIndex - 1);