%% ************************************************************
%% 程序描述
%程序功能:GPS普通测距码产生
%输入变量:code_id,测距码ID号
%输出变量:code,测距码
%% ***********************************************************
%% 程序结构体
function code=bao_code_gps_c(code_id)
%% ***********************************************
%% 初始化 即初相,周期,反馈系数
% 移位寄存器初相,C/A码是十级反馈移位寄存器
initial_phase=ones(1,10);
% 测距吗周期
status_renew_times=2^10-1;
% 移位寄存器1反馈系数
tickling_modulus_1=[0 0 1 0 0 0 0 0 0 1];
% 移位寄存器2反馈系数
tickling_modulus_2=[0 1 1 0 0 1 0 1 1 1];
%% **************************************************
%% 产生m序列1,即调用bao_m_sequence_register函数
% 移位寄存器状态更新
register_1=bao_m_sequence_register(status_renew_times,initial_phase,tickling_modulus_1);
%移位寄存器1输出;
m_sequence_1=register_1(:,size(initial_phase,2))';
%% 产生m序列2,即调用bao_m_sequence_register函数
% 移位寄存器2抽头(延迟)
delay=[2,6;3,7;4,8;5,9;1,9;2,10;1,8;2,9;3,10;2,3;3,4;5,6;6,7;7,8;8,9;9,10;
1,4;2,5;3,6;4,7;5,8;6,9;1,3;4,6;5,7;6,8;7,9;8,10;1,6;2,7;3,8;4,9;
5,10;4,10;1,7;2,8;4,10];
% 移位寄存器2状态更新
register_2=bao_m_sequence_register(status_renew_times,initial_phase,tickling_modulus_2);
% 移位寄存器2输出
m_sequence_2=mod(register_2(:,delay(code_id,1))+register_2(:,delay(code_id,2)),2)';
%% *************************************************************
%% 测距码产生
% (0,1码)
code=mod(m_sequence_1+m_sequence_2,2);
% (-1,1)码
code=2*code-1;
%% a=code(1:10) a输出前十个码片值,b将前十个码片值转换成八进制数,c将前十个码片值转换成十进制数
% b=a(1,1)*10^3+a(1,2:4)*2.^[2,1,0]'*10^2+a(1,5:7)*2.^[2,1,0]'*10+a(1,8:10)*2.^[2,1,0]'
% c=a*2.^[size(a,2)-1:-1:0]'