?? aquisition.m
字號:
clear;%指標是signalpower=-185dBW,此時可以進行室內(nèi)定位;%指標是SNR=-52dB,此時noisepower=-133dBWDopler_bound = 10; %原來是20,為加快運行速度,減少頻率槽數(shù)Freq_bin = 500;Fc = 1250000;Length_of_data = 5000;Length_of_fft = 4096;NUM = 5;%50010;Signalpower = -177 %I路信號的功率(dBW)Noisepower = -143 %噪聲的復功率(dBW)Threshold = 1e5;Times_of_ncoh = 40;%變量初始化successcount=0;%在衛(wèi)星從地平線升起或降落時,用戶速度900m/s時,徑向速度差不多(+ -)10K,fid_ca=fopen('CA_5000.txt','r');CA_samp=fscanf(fid_ca,'%d');%5000點fclose(fid_ca);CA_samp=CA_samp';%本地偽碼FFT:CA_fftCA_local=Average(Length_of_data, Length_of_fft, CA_samp);%plot(CA_local)CA_fft=fft(CA_local);%plot(imag(CA_fft))Idata=ReadIn( ); %把文本Idata全部讀到Idata數(shù)組中Qdata=ReadIn( ); % Idata=Idata';Qdata=Qdata';Idata(1:NUM)=[]; %刪去前NUM個元素Qdata(1:NUM)=[];AMP=sqrt(2*10^(Signalpower/10)) %輸入量為幅度系數(shù),單位相當于(V),%AMP=1e-9,此時signal power=-183dBWDIV_AWGN= 10^(Noisepower/10) %輸入量為高斯白噪聲的方差。DIV_AWGN:在均值means為0時,高斯白噪聲的方差即噪聲的功率單位為(W)for k=1:200 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %變量初始化 acq_tag = 0; coh_count = 1; ncoh_count = 1; highdop_index = 1;%初始值 lowdop_index = 0; %初始化矩陣并清零 R = zeros(20,(2*Dopler_bound+1)*Length_of_fft); sum_cohe_accum = zeros(Times_of_ncoh,(2*Dopler_bound+1)*Length_of_fft);%相干累積和清零 sum_ncohe_accum = zeros(1,(2*Dopler_bound+1)*Length_of_fft);%非相干累積和清零 ncohe_accum = zeros(1,(2*Dopler_bound+1)*Length_of_fft); [gr,gi]=MyAwgn(62*5000*20-NUM,DIV_AWGN);%產(chǎn)生隨機高斯白噪聲: Ich = Idata*AMP+gr; Qch = Qdata*AMP+gi; for n=1:Times_of_ncoh %把I和Q轉(zhuǎn)變成二維數(shù)組Isn和Qsn Isn(n,1:1e5) = Ich(1+(n-1)*1e5 : n*1e5); Qsn(n,1:1e5) = Qch(1+(n-1)*1e5 : n*1e5); end; for ncoh_count=1:Times_of_ncoh%%%進行非相干累積 while coh_count<=20 %%進行相干累積 while (highdop_index <= Dopler_bound) | (lowdop_index>=(-1)*Dopler_bound) %一次5000點搜索 if lowdop_index >= Dopler_bound*(-1) cos_localcarr = LocalCarrier(lowdop_index, Freq_bin, Fc); sin_localcarr = LocalCarrier(lowdop_index, Freq_bin, Fc); I=Isn(ncoh_count,1+(coh_count-1)*Length_of_data : coh_count*Length_of_data ).*cos_localcarr-Qsn(ncoh_count,1+(coh_count-1)*Length_of_data : coh_count*Length_of_data ).*sin_localcarr; Q=Isn(ncoh_count,1+(coh_count-1)*Length_of_data : coh_count*Length_of_data ).*sin_localcarr+Qsn(ncoh_count,1+(coh_count-1)*Length_of_data : coh_count*Length_of_data ).*cos_localcarr; I_short = Average( Length_of_data, Length_of_fft, I); Q_short = Average( Length_of_data, Length_of_fft, Q); Rev_fft = fft(I_short+i*Q_short); %接收來的信號做fft R(coh_count,1+(lowdop_index+Dopler_bound)*Length_of_fft : (lowdop_index+Dopler_bound+1)*Length_of_fft) = ifft(Rev_fft.*conj(CA_fft)); %相關值R,R其實是一個矩陣% R_mod(coh_count,1+(lowdop_index+Dopler_bound)*Length_of_fft : (lowdop_index+Dopler_bound+1)*Length_of_fft) = abs(R(coh_count,1+(lowdop_index+Dopler_bound)*Length_of_fft : (lowdop_index+Dopler_bound+1)*Length_of_fft)); end; if highdop_index <= Dopler_bound cos_localcarr = LocalCarrier(highdop_index, Freq_bin, Fc); sin_localcarr = LocalCarrier(highdop_index, Freq_bin, Fc); I=Isn(ncoh_count,1+(coh_count-1)*Length_of_data : coh_count*Length_of_data ).*cos_localcarr-Qsn(ncoh_count,1+(coh_count-1)*Length_of_data : coh_count*Length_of_data ).*sin_localcarr; Q=Isn(ncoh_count,1+(coh_count-1)*Length_of_data : coh_count*Length_of_data ).*sin_localcarr+Qsn(ncoh_count,1+(coh_count-1)*Length_of_data : coh_count*Length_of_data ).*cos_localcarr; I_short = Average( Length_of_data, Length_of_fft, I); Q_short = Average( Length_of_data, Length_of_fft, Q); Rev_fft = fft(I_short+i*Q_short); %接收來的信號做fft R(coh_count,1+(highdop_index+Dopler_bound)*Length_of_fft : (highdop_index+Dopler_bound+1)*Length_of_fft) = ifft(Rev_fft.*conj(CA_fft)); % R_mod(coh_count,1+(highdop_index+Dopler_bound)*Length_of_fft : (highdop_index+Dopler_bound+1)*Length_of_fft) = abs(R(coh_count,1+(highdop_index+Dopler_bound)*Length_of_fft : (highdop_index+Dopler_bound+1)*Length_of_fft)); end; lowdop_index = lowdop_index-1; highdop_index = highdop_index+1; end; %結(jié)束時域搜索頻率,求得單次相關值 %共進行2×Dopler_bound+1次,即 R 實際是 一個21×4096型矩陣 %再進行相干累積20次,即 R 實際是 一個20×21×4096型矩陣 % [peak,locate]=max(R_mod(coh_count, : )); % disp(Threshold); % if peak>Threshold %門限值要科學慎重計算,調(diào)試,得到。 % acq_tag=1; % freqbin_index = ceil(locate/Length_of_fft); %向上取整,求出行號即多普勒頻槽號 % freqbin_index = freqbin_index-Dopler_bound-1; % CA_phase = mod(locate,Length_of_fft); %取模,求出列號即碼相位偏移號 % CA_phase = Unaverage(Length_of_fft, Length_of_data, CA_phase); % CA_phase = CA_phase-1; % disp(coh_count); % disp(freqbin_index); % disp(CA_phase); % break; % else sum_cohe_accum(ncoh_count, : ) = sum_cohe_accum(ncoh_count, : ) + R(coh_count, : ); coh_count=coh_count+1;% if coh_count == 2 & ncoh_count == 1% for p=1:21% picture(p,:) = R(coh_count, 1+(p-1)*4096 : 4096*p );% end;% mesh(picture);% end;%把一次相關結(jié)果轉(zhuǎn)化成picture二維矩陣,畫三維圖 % end; end; %結(jié)束20ms的20次相干累積% if ncoh_count == 1% for p=1:21% picture(p,:) = sum_cohe_accum(1, 1+(p-1)*4096 : 4096*p );% end;% mesh(picture);% end;%把20次相干累積結(jié)果轉(zhuǎn)化成picture二維矩陣,畫三維圖 ncohe_accum( : ) = (abs(sum_cohe_accum(ncoh_count, : )/20)).^2;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% sum_ncohe_accum( : ) = sum_ncohe_accum( : ) + ncohe_accum( : );%求非相干累積和% end;%結(jié)束40次非相干累積 for p=1:21 picture(p, : ) = sum_ncohe_accum( 1+(p-1)*4096 : 4096*p ); end; mesh(picture); hold on; [peak, locate] = max(sum_ncohe_accum); freqbin_index = ceil(locate/Length_of_fft); %向上取整,求出行號即多普勒頻槽號 freqbin_index = freqbin_index-Dopler_bound-1;%freqbin_index取值范圍從 -Dopler_bound,到 +Dopler_bound CA_phase = mod(locate,Length_of_fft); %取模,求出列號即碼相位偏移號 CA_phase = Unaverage(Length_of_fft, Length_of_data, CA_phase); CA_phase = CA_phase-1; disp(peak); disp(freqbin_index); disp(CA_phase); if (freqbin_index==2) & (CA_phase==(Length_of_data-mod(NUM,Length_of_data))|CA_phase==(Length_of_data-mod(NUM,Length_of_data)-1)|CA_phase==(Length_of_data-mod(NUM,Length_of_data)-2)|CA_phase==(Length_of_data-mod(NUM,Length_of_data)+1)) successcount = successcount+1; acq_tag = 1; end;end; disp(successcount);% fclose(fid1);%捕獲結(jié)束,關掉文本指針% fclose(fid2);%捕獲結(jié)束,關掉文本指針
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -