www.gusucode.com > GPS仿真Matlab编程源码程序 > GPS仿真Matlab编程源码程序/acquisition_lj.m
function acqResults = acquisition_lj(x2,longSignal, settings,N) %% Initialization ================================================ % Find number of samples per spreading code % samplesPerCode = round(settings.samplingFreq / ... % (settings.codeFreqBasis / settings.codeLength)); %-------------------------------------------------------------------------- % Initialize acqResults % Carrier frequencies of detected signals acqResults.carrFreq = zeros(1, 32); %-------------------------------------------------------------------------- % C/A code phases of detected signals acqResults.codePhase = zeros(1, 32); %-------------------------------------------------------------------------- % Correlation peak ratios of the detected signals acqResults.peakMetric = zeros(1, 32); %-------------------------------------------------------------------------- delay=zeros(32, 4); C=zeros(32, 4); fdm=zeros(1,4); num=zeros(1,4); delay1=zeros(1,4); % fprintf('('); %CVS record: %$Id: acquisition.m,v 1.1.2.12 2006/08/14 12:08:03 dpl Exp $ % N=settings.samplingFreq*280e-3;%0.05 % N1=settings.samplingFreq*1e-3; N2=settings.samplingFreq*1e-3; % cnt=N2/N1; timebegin=0; L=2^(nextpow2(N)); % L=N; % L1=2^(nextpow2(N1)); L2=2^(nextpow2(N2)); % pxx=zeros(L2,1); % yf=zeros(N2,1); % timeend=N/settings.samplingFreq; % timeend1=N1/settings.samplingFreq; timeend2=N2/settings.samplingFreq; % snr=-18; % dB % As=10^(snr/20); % zz=fft(longSignal-mean(longSignal)); % fftw('planner','patient') zz=fft(longSignal(1:N2)); % longSignal=longSignal(1:N); % cnt=600; %% -------------FFT--------------%%%%%% pxx=abs(fft(x2,L)); % index1=1e5; for n=1:settings.numberOfChannels [fftMax1, fftMaxIndex1] = max(pxx); omiga1=(1-(fftMaxIndex1-1)/L)*2*pi; fdm1(1)=(omiga1/2)*settings.samplingFreq/(2*pi); fdm1(2)=(omiga1/2+pi)*settings.samplingFreq/(2*pi); % fdm1(1)=(1-(fftMaxIndex1-1)/L)*0.5*settings.samplingFreq; % [index1]= find(abs(fdm1-settings.IF)<10e3); % in1=isempty(index1); % if in1==1 fftMaxIndex2=L+4-fftMaxIndex1; omiga1=(1-(fftMaxIndex2-1)/L)*2*pi; fdm1(3)=(omiga1/2)*settings.samplingFreq/(2*pi); fdm1(4)=(omiga1/2+pi)*settings.samplingFreq/(2*pi); % fdm2=fdm1(3); % fdm3=fdm1(4); % index1=find(fdm1==fdm2); % index2=find(fdm1==fdm3); % fdm1(index1)=0; % fdm1(index2)=0; % end % fdm1(2)=(1-(fftMaxIndex2-1)/L)*0.5*settings.samplingFreq;settings.samplingFreq- [index]= find(abs(fdm1-settings.IF)<10e3);%|abs(fdm1-(settings.samplingFreq-settings.IF))<10e3 % if n==1 fdm(n)=fdm1(index); % else % fdm_tmp=fdm1(index); % index2=find(fdm_tmp~=fdm(n)); % fdm(n)=fdm1(index2); % end % fdm1=0; for dot=1:5 pxx(fftMaxIndex1-3+dot)=0; pxx(L+4-fftMaxIndex1-3+dot)=0; end end % f1=settings.IF-10e3; % f2=settings.IF+10e3; % % f=f1:1e3:f2; % xy=0; % for f=f1:1e3:f2 % xy=xy+1; % N2(xy)=ceil((1-f/settings.samplingFreq)*L+1); % end % px=zeros(1,length(f)); % for tx=1:length(f) % temp=myfft_part(x2,f(tx),f(tx),settings.samplingFreq); % px(tx)=max(abs(temp)); % end % [a,b]=sort(px,'descend'); % for ii=1:settings.numberOfChannels % f1=f(b(ii))-500; % f2=f(b(ii))+500; % pxx=abs(myfft_part(x2,f1,f2,settings.samplingFreq)); % [fftMax1, fftMaxIndex1] = max(pxx); % fdm(ii)=(1-(fftMaxIndex1-1)/L)*0.5*settings.samplingFreq; % end %% ---------part FFT------------------%%%%%% % f1=settings.IF-10e3; % f2=settings.IF+10e3; % pxx=abs(myfft_part(x2,f1,f2,settings.samplingFreq)); % for n=1:settings.numberOfChannels % [fftMax1, fftMaxIndex1] = max(pxx); % fdm(n)=(1-(fftMaxIndex1-1)/L)*0.5*settings.samplingFreq; % for dot=1:5 % pxx(fftMaxIndex1-3+dot)=0; % pxx(L+4-fftMaxIndex1-3+dot)=0; % end % end %%%%%%---------Zoom FFT---------------%%%%%%% % B=10e3; % % complex modulated signal % x1=x2.*exp(-1i*2*pi*[1:length(longSignal)]*(settings.samplingFreq-settings.IF*2)/settings.samplingFreq).'; % % Digital LPF % om1=2*pi*(settings.IF-B)/settings.samplingFreq; % om2=2*pi*(settings.IF+B)/settings.samplingFreq; % D=floor(pi/(om2-om1)); % K=floor(om1*D/pi); % while ((K+1)/D*pi<om2) % D=D-1; % K=floor(om1*D/pi); % end % % D=fs/20e3; % bw=settings.samplingFreq/(2*D);b=fir1(32,2*bw/settings.samplingFreq);y=filter(b,1,x1); % % resampling % N3=2^16; % N4=floor(N/D); % yd=zeros(1,N4); % for ii=1:N4 % yd(ii)=y(ii*D); % end % % zoomed spectrum % pxx=abs(fft(yd,N3)); % for n=1:settings.numberOfChannels % [fftMax1, fftMaxIndex] = max(pxx); % if fftMaxIndex>=1 && fftMaxIndex<=N3/2-1 % fftMaxIndex1=fftMaxIndex+N3/2+1; % else if fftMaxIndex>=N3/2 && fftMaxIndex<=N3-1 % fftMaxIndex1=fftMaxIndex-N3/2+1; % else % fdm(n)=0; % end % end % fdm(n)=settings.IF-B+(fftMaxIndex1-1)*2*B/N3; % for dot=1:5 % pxx(fftMaxIndex-5+dot)=0; % % pxx(L+4-fftMaxIndex1-5+dot)=0; % end % end t_sig1=timebegin:1/settings.samplingFreq:timebegin+timeend2-1/settings.samplingFreq; % t_sig=timebegin:1/settings.samplingFreq:timebegin+timeend1-1/settings.samplingFreq; caCodesTable = makeCaTable(settings); for m=1:32 % sg=signalgen1(m,timebegin,settings.samplingFreq,timeend2,0,settings.codeFreqBasis); sg = caCodesTable(m,:); for n=1:settings.numberOfChannels % s=As*signalgen(m,timebegin,settings.samplingFreq,timeend2,0,fdm(n),settings.codeFreqBasis); % s=fft(s).'; % y1=conj(s).*zz(1:N2); % y2=abs(fft(y1,L2)); % [B,k]=max(y2);%(1:uniqFftPt-1)); % omiga2=(1-(k-1)/L2)*2*pi; % omiga2=mod(omiga2,settings.samplingFreq*2*pi*1e-3/N); % or=settings.samplingFreq*2*pi*0.714518*1e-3/N; % % Z=zeros(L2-N2,1); % yt=[y1;Z]; % fun=@(omigam) -abs((exp(-1j*(0:L2-1)*omigam)*yt).'); % omiga(1)=fminbnd(fun,omiga2-2*pi/L2,omiga2+2*pi/L2); % % delay(m,n)=omiga(1)*N2/(2*pi*settings.samplingFreq)*1e3; s=sg.*exp(1i*2*pi*fdm(n)*t_sig1); % s2=As*signalgen(m,timebegin,settings.samplingFreq,timeend2,0,fdm(n),settings.codeFreqBasis); s=fft(s).'; % for h=1:cnt % sf(:,h)=s(N1*(h-1)+1:N1*h); % % sf(:,h)=s; % yf(:,h)=zz(N1*(h-1)+1:N1*h); % temp(:,h)=abs(fft(conj(sf(:,h)).*yf(:,h),L1)); % end % temps=sum(temp,2); % [B,k]=max(temps); % omiga2=(1-(k-1)/L1)*2*pi; % % omiga2=mod(omiga2,settings.samplingFreq*2*pi*1e-3/N1); % % omiga(1)=omiga2; % % delay(m,n)=omiga(1)*N1/(2*pi*settings.samplingFreq)*1e3; y1=conj(s).*zz; y2=abs(fft(y1,L2)); [B,k]=max(y2);%(1:uniqFftPt-1)); omiga1=(1-(k-1)/L2)*2*pi; omiga2=mod(omiga1,settings.samplingFreq*2*pi*1e-3/N2); delay(m,n)=omiga2*N2/(2*pi*settings.samplingFreq)*1e3; C(m,n)=B; end end for n=1:settings.numberOfChannels [peak(n),num(n)]=max(C(:,n)); if n>1 k1=find(num(1:n-1)==num(n)); if k1~=0 if peak(k1)<peak(n) C(num(n),n)=0; [peak(n),num(n)]=max(C(:,n)); else C(num(k1),k1)=0; [peak(n),num(k1)]=max(C(:,k1)); end end end end acqResults.peakMetric(num) = peak; acqResults.carrFreq(num) = fdm; for ii=1:length(num) delay1(ii)=delay(num(ii),ii); end acqResults.codePhase(num) = round(delay1*N2); % for n=1:settings.numberOfChannels % [peak(n),num(n)]=max(max(C)); % [peak(n),sat(n)]=max(max(C, [], 2)); % C(:,num(n))=0; % C(sat(n),:)=0; % end % % acqResults.peakMetric(sat) = peak; % acqResults.carrFreq(sat) = fdm; % for ii=1:length(sat) % delay1(ii)=delay(sat(ii),ii); % end % acqResults.codePhase(sat) = round(delay1*N2);