用matlab产生gold序列问题,急求解答! 10

如何用matlab产生gold序列,是不是因为gold序列需要两个m序列产生,因此需要两个m文件?下面代码哪些属于m文件呢?还有,我已经产生了m序列,能不能在产生gold... 如何用matlab产生gold序列,是不是因为gold序列需要两个m序列产生,因此需要两个m文件?下面代码哪些属于m文件呢?还有,我已经产生了m序列,能不能在产生gold序列的时候调用已经产生的m序列,本人新手,请详细解答,会加分的。

代码:
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);
展开
 我来答
chenfeng201
2013-04-08 · TA获得超过1103个赞
知道小有建树答主
回答量:775
采纳率:100%
帮助的人:317万
展开全部
1:只需一个就行
2:这些代码都属于吧,但保存的是个函数,,而且少了个end
3:可以使用递归来调用生成的gold数列
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式