求关于m序列产生程序(要求产生序列波形)
%主函数
fbconnection=[0 1 0 0 1]; %特征多项式
m=1; %输出周期个数
t=length(fbconnection); %序列长度
chu=[zeros(1,t-1),1]; %初态
m_out=m_sequence(fbconnection,m,chu)
%m_sequence.m
function [m_out]=m_sequence(fbconnection,m,chu)
len=length(fbconnection);
n=2^len-1; %序列长度
register=chu; %初态
fan=0;
for i=1:n*m % i循环一次输出一个m_out
m_out(i)=register(len);
for k=1:len % k循环累加反馈
fan=fan+fbconnection(k)*register(k);
end
fan=mod(fan,2); % 反馈系数
newregister(1)=fan;
for j=2:len % j循环移位
newregister(j)=register(j-1);
end
register=newregister;
fan=0;
end
要求用四位移位寄存器,产生序列的长度为60
其实四位的移位寄存器产生15位的序列,后45位就是重复了,我试着写了一下,但运行结果不对啊
(具体来说,其实就是实现移位的功能,把x1赋给x2,把x2赋给x3,把x3赋给x4,再把x3、x4取异或后赋给x1,每循环一次记录下x4的值就是M序列的值,手算的为:
1111( 初态)—0111—0011—0001—1000—0100—0010—1001—1100—0110—1011—0101—1010—1101—1110—1111
每个状态的最后一位组成:111100010011010 为一个M序列)
程序如下:
#include <stdio.h>
int xor(int x3,int x4)
{
int a,b,c;
a=x3;
b=x4;
if(a==b)
c=0;
else
c=1;
return c;
}
void main()
{
int x[4]={1,1,1,1},u[60];
int i=1,m=0;
while(m<4)
{
u[0]=x[3];
while(i<=15)
{
int j;
for(j=0;j<3;j++)
{
x[j+1]=x[j];
}
x[0]=xor(x[2],x[3]);
u[i]=x[3];
i++;
}
for(i=0;i<15;i++)
{
printf("%d ",u[i]);
}
m++;
}
printf("\n");
}
function [seq]=create_mseq(connections)
% create_mseq generates the maximal length shift register sequence
% when the shift register connections are given as input to the
% funcion.A "zero" means not connected,ehereas a "one " represents
% a connections
% create_mseq 产生最大的移位寄存器序列。“0”代表没有连接,反之“1”代表连接
m=length(connections);
L=2^m-1; %移位寄存器序列的长度
registers=[zeros(1,m-1) 1]; %寄存器的初始内容
seq(1)=registers(m); %seq表示得到的m序列
for ii=2
new_reg_cont(1)=0;
for jj=2:m
new_reg_cont(jj)=registers(jj-1); %移位
end;
for jj=1:m
new_reg_cont(1)=mod(new_reg_cont(1)+connections(jj)*registers(jj),2);
end
registers=new_reg_cont; % 当前的寄存器内容
seq(ii)=registers(m); %m序列的下一个元素
end;