m序列
m序列的定义###
m序列是由n级线性移位寄存器产生的周期为
关于m序列的基本生成原理网上介绍很多了,其主要步骤就是寄存器的移位和异或运算。即:特定位置寄存器(由反馈系数决定)的值取出来进行异或运算(也就是或者全部相加后模2的运算),寄存器中的值往输出端移位,最后一位输出,第一个寄存器放刚才异或运算中得到的值。
m序列生成函数的Matlab代码
function [seq]=mseq(coef)
%***************************************************
% 此函数用来生成m序列
% coef为反馈系数向量
% Author: FastestSnail
% Date: 2017-10-03
%***************************************************
m=length(coef);
len=2^m-1; % 得到最终生成的m序列的长度
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); %特定寄存器的值进行异或运算,即相加后模2
registers(2:length(registers)) = registers(1:length(registers)-1); % 移位
registers(1)=backQ; % 把异或的值放在第一个寄存器的位置
end
end
该函数的调用方法
很多人得到函数不知道如何调用。
首先需要得到一个不同位数m序列的反馈系数表。(网上有很多,我这里也是在网上截的图,感谢原作者。)
然后在表上查到你要生成的m序列的长度,比如说15,即周期P为15。从表上能看出,需要的寄存器级数为4,即有4个寄存器。然后反馈系数
mseq([0 0 1 1])
返回的结果就是15位的m序列,如下:
最后再补充几点:
第一,关于寄存器的形状还有系数,我截了个图,(从百度文库上找的,感谢原作者,m序列原理)大家参考。
第二,八进制变二进制,可以打开windows下面的计算器,然后选择 查看->程序员,即可看到二进制,八进制,十进制和十六进制的转换。但是一般来说熟练了,十六进制与二进制、八进制与二进制的转换直接就能看出来。
第三,由于寄存器初始的值设置的不同(程序中默认为[1 0 0 …… 0 1],千万不能全部为0,一般来说有两个1就没问题),生成的m序列看似不一样,其实是一样的。只要通过循环移位,能够变成一样,就是正确的m序列。
相关阅读
第一步:选择调试模式找到数据库里functions包下需要调试的函数或存储过程,然后选中这个函数(或存储过程),单击右键,出现如下图所示,选中
$(patsubst 原模式, 目标模式, 文件列表) 如:在$(patsubst %.c,%.o,$(dir) )中,patsubst把$(dir)中的变量符合后缀是.c的全部替换成.
目录 1. randsrc 2. rand 3. randint 4. randperm 5. intersect 6. cumsum 7. rectpuls 1. randsrc out = randsrc out = randsr
https://docs.oracle.com/cd/B19306_01/server.102/b14200/functions183.htm TO_DATE(char [, fmt [, 'nlsparam' ] ]) 参数
描述:Predicate< T>接口接受一个T类型参数,返回一个boolean值。 源码: public interface Predicate<T> { boolean test(T t); }