matlab中for创建矩阵,每次for循环生成一个固定行列的矩阵,把每次矩阵存到。......

这段代码展示了如何在MATLAB中使用for循环创建矩阵,并进行GPS信号跟踪。代码中更新GUI状态,读取数据块,进行码相位跟踪,并计算载波和码元误差,用于调制解调过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

        for loopCnt =  1:codePeriods

%% GUI update -------------------------------------------------------------

% The GUI is updated every 50ms. This way Matlab GUI is still

% responsive enough. At the same time Matlab is not occupied

% all the time with GUI task.

Ln=sprintf('\n');

trackingStatus=['Tracking: Ch ', int2str(channelNr), ...

' of ', int2str(settings.numberOfChannels),Ln ...

'PRN: ', int2str(channel(channelNr).PRN),Ln ...

'Completed ',int2str(loopCnt), ...

' of ', int2str(codePeriods), ' msec',Ln...

'C/No: ',CNo,' (dB-Hz)'];

if (rem(loopCnt, 50) == 0)

try

waitbar(loopCnt/codePeriods, ...

hwb, ...

trackingStatus);

catch

% The progress bar was closed. It is used as a signal

% to stop, "cancel" processing. Exit.

disp('Progress bar closed, exiting...');

return

end

end

%% Read next block of data ------------------------------------------------

% Find the size of a "block" or code period in whole samples

% Update the phasestep based on code freq (variable) and

% sampling frequency (fixed)

codePhaseStep = codeFreq / settings.samplingFreq;                %%%  settings.samplingFreq       =

5.714e6;  %[Hz]

blksize = ceil((settings.codeLength-remCodePhase) / codePhaseStep);   %%%settings.codeLength

= 1023;  remCodePhase  = 0.0;                             %%%初始码移位为0

% Read in the appropriate number of samples to process this

% interation

[rawSignal, samplesRead] = fread(fid, blksize, settings.dataType);  %%%  settings.dataType

='int8';

%% for bupt if data

rawSignal =rawSignal.';

%rawSignal=(rawSignal<0); %负数取1,正数取0

% If did not read in enough samples, then could be out of

% data - better exit

if (samplesRead ~= blksize)

disp('Not able to read the specified number of samples  for tracking, exiting!')

fclose(fid);

return

end

%% Set up all the code phase tracking information -------------------------

% Define index into early code vector

tcode    = (remCodePhase-earlyLateSpc/2) :...

codePhaseStep:...

((blksize-1)*codePhaseStep+remCodePhase-earlyLateSpc/2);

tcode2      = mod(ceil(tcode),1023)+1;

earlyCode11   = caCode11(tcode2);    %早早早码3

tcode    = (remCodePhase-earlyLateSpc/2) :...

codePhaseStep:...

((blksize-1)*codePhaseStep+remCodePhase-earlyLateSpc/2);

tcode2      = mod(ceil(tcode),1023)+1;

earlyCode10   = caCode10(tcode2);    %早2

tcode       = (remCodePhase-earlyLateSpc/2) : ...%remCodePhase=0,earlyLateSpc=0.1

codePhaseStep : ...%codePhaseStep=码频率/采样频率=每个采样点有多少个码片

((blksize-1)*codePhaseStep+remCodePhase-earlyLateSpc/2);% blksize=ceil((settings.codeLength-

remCodePhase) / codePhaseStep);

tcode2      = ceil(tcode) + 1;%%tcode2=0+1:1023/5714:1022.1+1,,,,,ceil:比它大的最小整数,如ceil(-

1.9)=-1

earlyCode   = caCode(tcode2);%早1

% Define index into late code vector超前

tcode       = (remCodePhase+earlyLateSpc/2) : ...

codePhaseStep : ...

((blksize-1)*codePhaseStep+remCodePhase+earlyLateSpc/2);

tcode2      = ceil(tcode) + 1;

lateCode    = caCode(tcode2);%晚1

tcode       = (remCodePhase+earlyLateSpc/2+0.5) : ...

codePhaseStep : ...

((blksize-1)*codePhaseStep+remCodePhase+earlyLateSpc/2+0.5);

tcode2      = ceil(tcode) + 1;

lateCode10    = caCode20(tcode2);   %晚2

tcode       = (remCodePhase+earlyLateSpc/2+1) : ...

codePhaseStep : ...

((blksize-1)*codePhaseStep+remCodePhase+earlyLateSpc/2+1);

tcode2      = ceil(tcode) + 1;

lateCode11    = caCode21(tcode2);   %晚3

% Define index into prompt code vector

tcode       = remCodePhase : ...

codePhaseStep : ...

((blksize-1)*codePhaseStep+remCodePhase);

tcode2      = ceil(tcode) + 1;

promptCode  = caCode(tcode2);

remCodePhase = (tcode(blksize) + codePhaseStep) - 1023.0;%%当前采样点处的码片+每个采样点多少个码片-

1023

%% Generate the carrier frequency to mix the signal to baseband -----------

time    = (0:blksize) ./ settings.samplingFreq;

% Get the argument to sin/cos functions

trigarg = ((carrFreq * 2.0 * pi) .* time) + remCarrPhase;

remCarrPhase = rem(trigarg(blksize+1), (2 * pi));

% Finally compute the signal to mix the collected data to bandband

carrCos = fix(7*cos(trigarg(1:blksize)));

carrSin = fix(7*sin(trigarg(1:blksize)));

%% Generate the six standard accumulated values ---------------------------

%%%%%%%%%%-----------加的------------%%%%%%%%%%%%%%%%%%

Num=ceil(settings.samplingFreq*settings.codeLength/codeFreq/settings.codeLength);%%采样率为25兆赫兹,也就

是每个码片有25个采样点。每个码片多少个采样点

Scurvec=((xcorr(real(rawSignal(1:settings.samplingFreq*0.001)),earlyCode,Num*1)).^2-(xcorr(real

(rawSignal(1:settings.samplingFreq*0.001)),lateCode,Num*1)).^2)/blksize/blksize;%%S曲线

Scurve=Scurvec;%%1*51的矩阵

Scurve1=[Scurve;Scurve1];%矩阵合成

%         Scurvec1=Scurvec';%

%%%%%%%%%%-----------加的------------%%%%%%%%%%%%%%%%%%

% First mix to baseband

qBasebandSignal = carrCos .* rawSignal;

iBasebandSignal = carrSin .* rawSignal;

%             % Now get early, late, and prompt values for each

%             I_E = sum(earlyCode  .* iBasebandSignal);

%             Q_E = sum(earlyCode  .* qBasebandSignal);

%             I_P = sum(promptCode .* iBasebandSignal);

%             Q_P = sum(promptCode .* qBasebandSignal);

%             I_L = sum(lateCode   .* iBasebandSignal);

%             Q_L = sum(lateCode   .* qBasebandSignal);

%

% Now get early, late, and prompt values for each

I_E = sum(earlyCode  .* iBasebandSignal);

Q_E = sum(earlyCode  .* qBasebandSignal);%早码1

I_E10 = sum(earlyCode10  .* iBasebandSignal);

Q_E10 = sum(earlyCode10  .* qBasebandSignal);%早码2

I_E11 = sum(earlyCode11  .* iBasebandSignal);

Q_E11 = sum(earlyCode11  .* qBasebandSignal);%早码3

I_P = sum(promptCode .* iBasebandSignal);

Q_P = sum(promptCode .* qBasebandSignal);

I_L = sum(lateCode   .* iBasebandSignal);%晚码1

Q_L = sum(lateCode   .* qBasebandSignal);

I_L10 = sum(lateCode10   .* iBasebandSignal);%晚码2

Q_L10 = sum(lateCode10   .* qBasebandSignal);

I_L11 = sum(lateCode11  .* iBasebandSignal);%晚码3

Q_L11 = sum(lateCode11   .* qBasebandSignal);

%% Find PLL error and update carrier NCO ----------------------------------

% Implement carrier loop discriminator (phase detector)

carrError = atan(Q_P / I_P) / (2.0 * pi);%鉴相因子,通过它来查看相关结果是否最大%liruiqin

% Implement carrier loop filter and generate NCO command

carrNco = oldCarrNco + (tau2carr/tau1carr) * ...

(carrError - oldCarrError) + carrError * (PDIcarr/tau1carr);

oldCarrNco   = carrNco;

oldCarrError = carrError;

% Modify carrier freq based on NCO command

carrFreq = carrFreqBasis + carrNco;

trackResults(channelNr).carrFreq(loopCnt) = carrFreq;

%% Find DLL error and update code NCO -------------------------------------

codeError = (sqrt(I_E * I_E + Q_E * Q_E) - sqrt(I_L * I_L + Q_L * Q_L)) / ...

(sqrt(I_E * I_E + Q_E * Q_E) + sqrt(I_L * I_L + Q_L * Q_L));

% Implement code loop filter and generate NCO command

codeNco = oldCodeNco + (tau2code/tau1code) * ...

(codeError - oldCodeError) + codeError * (PDIcode/tau1code);

oldCodeNco   = codeNco;

oldCodeError = codeError;

% Modify code freq based on NCO command

codeFreq = settings.codeFreqBasis - codeNco;

trackResults(channelNr).codeFreq(loopCnt) = codeFreq;

%% Record various measures to show in postprocessing ----------------------

% Record sample number (based on 8bit samples)

trackResults(channelNr).absoluteSample(loopCnt) = ftell(fid);

trackResults(channelNr).dllDiscr(loopCnt)       = codeError;

trackResults(channelNr).dllDiscrFilt(loopCnt)   = codeNco;

trackResults(channelNr).pllDiscr(loopCnt)       = carrError;

trackResults(channelNr).pllDiscrFilt(loopCnt)   = carrNco;

trackResults(channelNr).I_E(loopCnt) = I_E;

trackResults(channelNr).I_P(loopCnt) = I_P;

trackResults(channelNr).I_L(loopCnt) = I_L;

trackResults(channelNr).Q_E(loopCnt) = Q_E;

trackResults(channelNr).Q_P(loopCnt) = Q_P;

trackResults(channelNr).Q_L(loopCnt) = Q_L;

% %              trackResults(channelNr).Scurve11(51,loopCnt) =Scurve11;%每毫秒存一条S曲线

end % for loopCnt

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值