在实验中发现在m序列的产生过程中,即使使用本原多项式的系数作为反馈逻辑,寄存器的状态也不能遍历除全0以外的所有状态。例如,用11 11 1 1 1 1作为初态,0 1 1 1 0 0 01(从低位到高位排列)作为反馈逻辑,产生的m序列m(2:9)=1 1 1 1 1 1 1 0.而m(129:136)= 1 1 1 1 1 1 1 0 可见在m(2)时
刻和在m(129)时刻寄存器组的状态是完全一样的,由此可知,m(2:128)=m(129:255),所以实际上产生m序列虽然周期为255实际上是1 m(2:128)m(2:128),更像是周期为127的序列。所以8位寄存器产生的255位m序列其自相关特性并不理想。根据以上分析,如果取其中127位,得到的序列应当所有较好的相关特性。在此用matlab进行了仿真,结果如下:
图1为8位寄存器产生的255位m序列(反馈逻辑0 11 1 0 0 0 1),取其前127位,的自相关特性。
图2为上述m序列取全255位所得序列的自相关特性。
图3 为8位寄存器产生的255位m序列(反馈逻辑0 10 0 1 1 0 1),其自相关特性。
可见,将m序列取全,其自相关特性并不好,在0.5倍周期时出现相关峰
若取m序列中的一半,其自相关特性有大的改善。
不同反馈逻辑产生的m序列其自相关特性有差异。
clear all
T=1;%m序列周期时间长度
N_sample=8;%每个码元取样点数
N=127;%m序列周期
dt=T/(N_sample*N);%样点间时间间隔
t=0:dt:10*T-dt;%时间坐标
X=[1 1 1 1 1 1 1 1];%m序列初相
C=[0 1 1 1 0 0 0 1];%反馈逻辑
Y=m_sequence(X,C);%产生m序列
Y1=Y(1:127);%取一半
matrix1=zeros(N,10);%产生10个周期的m序列
m_se=zeros(1,10*N);
for i=1:10
m_se(i*N-N+1:i*N)=Y1;
end
matrix_sample=zeros(N_sample,10*N);%取样
for i=1:N_sample
matrix_sample(i,:)=m_se;
end
m_se_sam=reshape(matrix_sample,1,N*10*N_sample);
m_se_sam=1-2*m_se_sam;
m_se_sam1=m_se_sam(1:T/dt);%取一个周期
[a,b]=xcorr(m_se_sam1, m_se_sam);%求自相关
subplot(311)
plot(b*dt,a)
N=255;
dt=T/(N_sample*N);
t=0:dt:10*T-dt;
Y1=Y;
matrix1=zeros(N,10);
m_se=zeros(1,10*N);
for i=1:10
m_se(i*N-N+1:i*N)=Y1;
end
matrix_sample=zeros(N_sample,10*N);
for i=1:N_sample
matrix_sample(i,:)=m_se;
end
m_se_sam=reshape(matrix_sample,1,N*10*N_sample);
m_se_sam=1-2*m_se_sam;
m_se_sam1=m_se_sam(1:T/dt);
[a,b]=xcorr(m_se_sam1,m_se_sam);
subplot(312)
plot(b*dt,a)
N=255;
dt=T/(N_sample*N);
t=0:dt:10*T-dt;
X=[1 1 1 1 1 1 1 1];
C=[0 1 0 0 1 1 0 1];
Y=m_sequence(X,C);
m_se=zeros(1,10*N);
for i=1:10
m_se(i*N-N+1:i*N)=Y;
end
matrix_sample=zeros(N_sample,10*N);
for i=1:N_sample
matrix_sample(i,:)=m_se;
end
m_se_sam=reshape(matrix_sample,1,N*10*N_sample);
m_se_sam=1-2*m_se_sam;
m_se_sam1=m_se_sam(1:T/dt);
[a,b]=xcorr(m_se_sam1,m_se_sam);
subplot(313)
plot(b*dt,a);
现在发现是我错了,原因是产生m序列的子函数写错了。
改正之后再画出3个序列的自相关函数的图像。如下。