基于MATLAB的m序列产生函数及其调用方法

来源:互联网 发布:鲜活的数据 编辑:程序博客网 时间:2024/05/22 06:17

m序列的定义###

m序列是由n级线性移位寄存器产生的周期为P=2n1的码序列,是最长线性移位寄存器序列的简称。

关于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; % 把异或的值放在第一个寄存器的位置endend

该函数的调用方法

很多人得到函数不知道如何调用。
首先需要得到一个不同位数m序列的反馈系数表。(网上有很多,我这里也是在网上截的图,感谢原作者。)

m序列反馈系数表

然后在表上查到你要生成的m序列的长度,比如说15,即周期P为15。从表上能看出,需要的寄存器级数为4,即有4个寄存器。然后反馈系数Ci为23。注意:这里是八进制,所以23对应的二进制位010 011,然后二进制中最高位的0不需要,所以序列位10011,这里有人就好奇了,为什么是5位,但是寄存器是4个?因为这里的Ci中的i是从0开始的,而且C0=1是确定的,所以,需要传到函数中的系数为[0 0 1 1]。

综上:调用方式是,首先把函数放在当前工作空间,然后输入

mseq([0 0 1 1])

返回的结果就是15位的m序列,如下:

这里写图片描述

最后再补充几点:

第一,关于寄存器的形状还有系数,我截了个图,(从百度文库上找的,感谢原作者,m序列原理)大家参考。

这里写图片描述

第二,八进制变二进制,可以打开windows下面的计算器,然后选择 查看->程序员,即可看到二进制,八进制,十进制和十六进制的转换。但是一般来说熟练了,十六进制与二进制、八进制与二进制的转换直接就能看出来。

这里写图片描述

第三,由于寄存器初始的值设置的不同(程序中默认为[1 0 0 …… 0 1],千万不能全部为0,一般来说有两个1就没问题),生成的m序列看似不一样,其实是一样的。只要通过循环移位,能够变成一样,就是正确的m序列。