downcvt.m

来自「Galileo BOC 码产生捕获相关仿真结果」· M 代码 · 共 110 行

M
110
字号

function [Cmplx,Rpart,Ipart]=DownCvt(datain,Freq_Para)

% datain: the input GPS data;
% Freq_Para: the parameter of output frequency 
% Cmplx: the the down converted data in the form of complexity;
% Rpart: the real part of the Cmplx;
% Ipart: the imaginary part of the Cmplx;

N=length(datain);
Cmplx=zeros(1,N);
Rpart=zeros(1,N);
Ipart=zeros(1,N);
DownCvtCarrier=zeros(1,N);
dco_acc =zeros(1,N);

% ****************** Sample input data module ***********************************
% SampleMap = [1 3 5 7 -1 -3 -5 -7];
% datain = SampleMap(datain+1);       % the format of input data is unsigned
% 
% datain = sign(datain).*(fix(abs(datain)*2)+1); % the format of input data is signed
% % Note: if the data is signed, zero is forbidden. it should add +/-eps to
% %       zero according to +0 or -0.



% ******************* down converter module ******************************
for(i=2:N)
    dco_acc(i) = dco_acc(i-1) + Freq_Para;
    dco_acc(i) = mod(dco_acc(i),256);
end
dco_acc = floor(dco_acc./8);

DownCvtMap = [7+j*1
              6+j*3
              6+j*4
              5+j*5
              4+j*6
              3+j*6
              1+j*7
              0+j*7
              -1+j*7
              -3+j*6
              -4+j*6
              -5+j*5
              -6+j*4
              -6+j*3
              -7+j*1
              -7+j*0
			  -7+j*-1
              -6+j*-3
              -6+j*-4
              -5+j*-5
              -4+j*-6
              -3+j*-6
              -1+j*-7
              0+j*-7
              1+j*-7
              3+j*-6
              4+j*-6
              5+j*-5
              6+j*-4
              6+j*-3
              7+j*-1
			  7+j*0 ];
DownCvtMap = DownCvtMap';

DownCvtCarrier = DownCvtMap(dco_acc+1);
			  
% for(i=1:N)    
%   switch (dco_acc(i))
%     case 0 , DownCvtCarrier(i) = 7   + j* 1; 
%     case 1 , DownCvtCarrier(i) = 6   + j* 3; 
%     case 2 , DownCvtCarrier(i) = 6   + j* 4; 
%     case 3 , DownCvtCarrier(i) = 5   + j* 5; 
%     case 4 , DownCvtCarrier(i) = 4   + j* 6; 
%     case 5 , DownCvtCarrier(i) = 3   + j* 6; 
%     case 6 , DownCvtCarrier(i) = 1   + j* 7; 
%     case 7 , DownCvtCarrier(i) = 0   + j* 7; 
%     case 8 , DownCvtCarrier(i) = -1  + j* 7;  
%     case 9 , DownCvtCarrier(i) = -3  + j* 6;  
%     case 10, DownCvtCarrier(i) = -4  + j* 6;  
%     case 11, DownCvtCarrier(i) = -5  + j* 5;  
%     case 12, DownCvtCarrier(i) = -6  + j* 4;  
%     case 13, DownCvtCarrier(i) = -6  + j* 3;  
%     case 14, DownCvtCarrier(i) = -7  + j* 1;  
%     case 15, DownCvtCarrier(i) = -7  + j* 0;  
%     case 16, DownCvtCarrier(i) = -7  + j* -1; 
%     case 17, DownCvtCarrier(i) = -6  + j* -3;  
%     case 18, DownCvtCarrier(i) = -6  + j* -4;  
%     case 19, DownCvtCarrier(i) = -5  + j* -5;  
%     case 20, DownCvtCarrier(i) = -4  + j* -6;  
%     case 21, DownCvtCarrier(i) = -3  + j* -6;  
%     case 22, DownCvtCarrier(i) = -1  + j* -7;  
%     case 23, DownCvtCarrier(i) = 0   + j* -7; 
%     case 24, DownCvtCarrier(i) = 1   + j* -7; 
%     case 25, DownCvtCarrier(i) = 3   + j* -6; 
%     case 26, DownCvtCarrier(i) = 4   + j* -6; 
%     case 27, DownCvtCarrier(i) = 5   + j* -5; 
%     case 28, DownCvtCarrier(i) = 6   + j* -4; 
%     case 29, DownCvtCarrier(i) = 6   + j* -3; 
%     case 30, DownCvtCarrier(i) = 7   + j* -1; 
%     case 31, DownCvtCarrier(i) = 7   + j* 0;  
% end   
% end

Cmplx=datain.*DownCvtCarrier;
Rpart=real(Cmplx);
Ipart=imag(Cmplx);

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?