完整的m序列序列生成函数和调用

来源:互联网 发布:英国大学精算 知乎 编辑:程序博客网 时间:2024/06/06 00:52

上午写了m序列的产生方法(点这里),下午我又把调用方法简单化了一下,把所有的代码贴上来,供大家参考。

mseq.m

生成m序列的主文件,调用的时候直接用生成系数的二进制或者八进制都行。

function [seq]=mseq(coef)%==========================================================================% 此函数用来生成最大长度m序列% coef为特征多项式向量%==========================================================================if 1 == length(coef) % 此时直接输入的是8进制的反馈系数,需要准换成2进制    coef = prepro(coef);endif sum(coef>1) % 如果转换出错,或者输入的时候虽然是个数组,但不是二进制的    error('WRONG! the parameter of function mseq is invalid!');        endm=length(coef);len=2^m-1; % 得到序列的长度     backQ=0; % 对应寄存器运算后的值,放在第一个寄存器seq=zeros(1,len); % 给生成的m序列预分配registers = [1 zeros(1, m-2) 1]; % 给寄存器分配初始结果for i=1:len    seq(i)=registers(m);    backQ = mod(sum(coef.*registers) , 2);    registers(2:length(registers)) = registers(1:length(registers)-1);    registers(1)=backQ;endend

prepro.m

mseq函数输入的预处理函数。

function ret = prepro(coef)%==========================================================================% 仅用于mseq.m% 对输入的八进制数进行预处理,得到可以符合规则的反馈系数%==========================================================================bin = oct2bin(coef);while 0 == bin(1)        bin = bin(2:length(bin));endret = bin(2:length(bin));end

oct2bin.m

把八进制数转换成二进制。这里的八进制数是用十进制表示的,如果超过八,则会报错(是因为我使用的表只有八行)。二进制直接放在一个数组中。

function bin = oct2bin(coef)%==========================================================================% 把8进制数(用十进制表示的)变成2进制数,并且存放在数组中%==========================================================================tmpData = [0 0 1; 0 1 0; 0 1 1; 1 0 0; 1 0 1; 1 1 0; 1 1 1; 0 0 0];bin = [];while coef ~= 0    tmp = mod(coef,10);    if  0 == tmp        tmp = 8;    end    bin = [tmpData(tmp,:) bin];    coef = floor(coef/10);endend

调用示例

这里写图片描述

原创粉丝点击