MATLAB代做  | MATLAB代寫  | MATLAB有償編程
首 頁
當前位置:MATLAB代做|MATLAB代寫|MATLAB有償編程matlab源碼基礎應用
基于matlab編程算法GPS信號捕獲仿真源碼程序        [↓跳到下載地址]
官方主頁:源碼共享網站:www.kggbzb.tw

聯系方式:客服QQ:1747812398 買代碼源碼軟件站,歡迎咨詢

運行環境:Win9X/2000/XP/2003/

源碼語言:簡體中文

源碼類型:源碼程序 - 基礎應用

推薦星級:

更新時間:2015-02-01 21:59:02

源碼簡介

基于matlab編程算法GPS信號捕獲仿真源碼程序

matlab環境下的GPS信號捕獲仿真,跟蹤仿真源碼

clear;
%指標是signalpower=-185dBW,此時可以進行室內定位;
%指標是SNR=-52dB,此時noisepower=-133dBW
Dopler_bound = 10; %原來是20,為加快運行速度,減少頻率槽數
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;
%在衛星從地平線升起或降落時,用戶速度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_fft
CA_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數組中
Qdata=ReadIn( ); % 
Idata=Idata';
Qdata=Qdata';
Idata(1:NUM)=[]; %刪去前NUM個元素
Qdata(1:NUM)=[];

AMP=sqrt(2*10^(Signalpower/10))   %輸入量為幅度系數,單位相當于(V),%AMP=1e-9,此時signal power=-183dBW
DIV_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);%產生隨機高斯白噪聲:
    Ich = Idata*AMP+gr;
    Qch = Qdata*AMP+gi;
       
    for n=1:Times_of_ncoh %把I和Q轉變成二維數組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; %結束時域搜索頻率,求得單次相關值

    %共進行2×Dopler_bound+1次,即 R 實際是 一個21×4096型矩陣
    %再進行相干累積20次,即 R 實際是 一個20×21×4096型矩陣
    %         [peak,locate]=max(R_mod(coh_count, : ));

    %       disp(Threshold);
    %       if peak>Threshold  %門限值要科學慎重計算,調試,得到。
    %          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;%把一次相關結果轉化成picture二維矩陣,畫三維圖
    %       end;
   
        end; %結束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次相干累積結果轉化成picture二維矩陣,畫三維圖
            ncohe_accum( : ) = (abs(sum_cohe_accum(ncoh_count, : )/20)).^2;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
            sum_ncohe_accum( : ) = sum_ncohe_accum( : ) + ncohe_accum( : );%求非相干累積和
%            
    end;%結束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);%捕獲結束,關掉文本指針
%     fclose(fid2);%捕獲結束,關掉文本指針

%將5000->4096點,驗證得出此函數正確,n是原來長度,k是調整后長度
function [numshort] = Average( n, k, numlong )

rate=n/k;
for m=1:k
 count(m)=0;
 sum(m)=0;
 for l=1:n
  if (floor((l-1)/rate))==(m-1)
   count(m)=count(m)+1;
   sum(m)=sum(m)+numlong(l);
        end;
    end;
 numshort(m)=sum(m)/(count(m));
end;

function [ cos_localcarr sin_localcarr ] = LocalCarrier(fd_index, freq_bin, fc)
%本地載波
sam_rate=5000000;
sam_intervel=1.0/sam_rate;
fr=fc+fd_index*freq_bin;
k=linspace(0,4999,5000);
cos_localcarr=10*cos(2*pi*fr*sam_intervel*k);
sin_localcarr=10*sin(2*pi*fr*sam_intervel*k);

function [ g1,g2 ] = MyAwgn( n, div)

%****** complex Gauss white noise
%****** 均值為0
%n為向量維數
%div  %復高斯白噪聲的方差
%實高斯白噪聲的方差為div/2
mean = 0;%meanan
u1 = rand(1,n);%在【0,1】上均勻分布的n個數
u2 = rand(1,n);

a = sqrt(-2.*log(u1));%由隨機信號分析得到
b = 2*pi.*u2;

g1 = sqrt(div/2)*a.*cos(b)+mean;%實高斯白噪聲,作為實部
g2 = sqrt(div/2)*a.*sin(b)+mean;%實高斯白噪聲,作為虛部

function [ output_args ] = Untitled1( input_args )
p=D;N=50000;%N的大小由你實際情況而定
u=randn(1,N);a=sqrt(p);
u=u*a;
save u;
 


提 示:本站所有源碼只提供瀏覽,需要定制的朋友可以聯系在線客服!
注意:價格根據項目的難易程度來定價格業務咨詢

基于matlab編程算法GPS信號捕獲仿真源碼程序 --下載地址

注意:為避免不必要的誤會,本站項目里的源碼只公開部分需要的聯系在線客服

本站長期招聘程序代寫高手,歡迎加入華南地區matlab團隊

想創業卻沒有經驗的人

無論你是否有過網上開店的經驗,都可以隨時聯系在線客服,建立自己獨立的網站
想開網店卻不知道如何入手

淘寶創業成本低而且風險小,如果想開淘寶店的朋友可以聯系在線客服。
想兼職創業,卻不擅長交際與服務的人

在家創業月入5000元。網站程序+百套群發工具+網賺資料+域名+空間+本站終身代理資格,這樣你網賺的條件全具備了。每天3小時管理、推廣、收錢。
缺乏能快速贏利型產品的人

導入多種最新流行營銷軟件+網賺教程,讓入駐者輕松加盟、復制有效成交技巧、快速賺錢。

源碼評論評論內容只代表網友觀點,與本站立場無關!

   評論摘要(共 0 條,得分 0 分,平均 0 分) 查看完整評論

瀏覽說明

* 本站所有源碼全部公開,隨時隨地瀏覽!
* MATLAB軟件如用于商業用途,請購買正版!
* 如果您發現下載鏈接錯誤,請點擊報告錯誤謝謝!
* 站內提供的所有軟件包含破解及注冊碼均是由網上搜集,若侵犯了你的版權利益,敬請來信通知我們!
Copyright © 2008-2014 www.kggbzb.tw. All Rights Reserved.
頁面執行時間:296.87500 毫秒
安微25选5开奖号