Gold码序列生成MATLAB代码

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

%自制Gold序列

function [GoldSeq] = dyc_gold_gen_v3()


%本原多项式参数
M_base = 8;%本原多项式表示进制数
M1 = [2 0 1 1];
M2 = [2 4 1 5];
Mfb_len = 11;%M序列的生成多项式的长度
Mfinal_len = 1023;%生成的M序列的长度
%序列长度?(由用户而定,但序列循环周期由“生成多项式的长度”而定)


%本原多项式
% M_base = 8;%本原多项式表示进制数
% M1 = [2 0 1 1];
% M2 = [2 4 1 5];
M1origin_len = length(M1);
M2origin_len = length(M2);

%本原多项式(二进制)
% Mfb_len = 11;%M序列要求生成多项式的长度

Mfb_ratio = log2(M_base);

M1fb_raw_len = M1origin_len * Mfb_ratio;%M序列本源多项式转换二进制为后的长度
M1fb_raw = zeros(1, M1fb_raw_len);%初始化M序列生成多项式
for M1fb_reg_i = 1 : M1origin_len
for M1fb_bit_i = 1 : Mfb_ratio
M1fb_raw((M1fb_reg_i - 1) * Mfb_ratio + M1fb_bit_i) = mod(fix(M1(M1fb_reg_i) / (2 ^ (Mfb_ratio - M1fb_bit_i))), 2);
end
end
M1fb = M1fb_raw((M1fb_raw_len - Mfb_len + 1) : M1fb_raw_len);

M2fb_raw_len = M2origin_len * Mfb_ratio;
M2fb_raw = zeros(1, M2fb_raw_len);
for M2fb_reg_i = 1 : M2origin_len
for M2fb_bit_i = 1 : Mfb_ratio
M2fb_raw((M2fb_reg_i - 1) * Mfb_ratio + M2fb_bit_i) = mod(fix(M2(M2fb_reg_i) / (2 ^ (Mfb_ratio - M2fb_bit_i))), 2);
end
end
M2fb = M2fb_raw((M2fb_raw_len - Mfb_len + 1) : M2fb_raw_len);

% M1fb = [1 0,0 0 0,0 0 1,0 0 1];
% M2fb = [1 0,1 0 0,0 0 1,1 0 1];

%发生寄存器长度
M1regs_len = length(M1fb);
M2regs_len = length(M2fb);

%生成的M序列长度
M1len_period = Mfinal_len;
M2len_period = Mfinal_len;

%初始化起始寄存器状态
M1regs_s = zeros(1, M1regs_len);
M1regs_s(M1regs_len) = 1;

M2regs_s = zeros(1, M2regs_len);
M2regs_s(M2regs_len) = 1;

%初始化中间值
M1regs_m1 = M1regs_s;
M1regs_m2 = zeros(1, M1regs_len);

M2regs_m1 = M2regs_s;
M2regs_m2 = zeros(1, M2regs_len);

%初始化最终输出的一个周期的M序列
M1regs_e = zeros(1, M1len_period);
M2regs_e = zeros(1, M2len_period);

%产生M序列(从低位向高位移位)(左→右)
M1regs_e(1) = M1regs_s(M1regs_len);
for M1_ri = 2 : M1len_period
M1regs_m2(1) = mod(sum(M1fb .* M1regs_m1), 2);%低位产生新的一位
M1regs_m2(2 : M1regs_len) = M1regs_m1(1 : (M1regs_len - 1));%向高位右移一位
M1regs_m1 = M1regs_m2;
M1regs_e(M1_ri) = M1regs_m1(M1regs_len);
end

M2regs_e(1) = M2regs_s(M2regs_len);
for M2_ri = 2 : M2len_period
M2regs_m2(1) = mod(sum(M2fb .* M2regs_m1), 2);
M2regs_m2(2 : M2regs_len) = M2regs_m1(1 : (M2regs_len - 1));
M2regs_m1 = M2regs_m2;
M2regs_e(M2_ri) = M2regs_m1(M2regs_len);
end

%Gold序列
GoldSeq = mod((M1regs_e + M2regs_e), 2);

相关文档
最新文档