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);