1m序列的产生.docx
《1m序列的产生.docx》由会员分享,可在线阅读,更多相关《1m序列的产生.docx(7页珍藏版)》请在冰豆网上搜索。
1m序列的产生
1m序列的产生
使用的本源多项式是,M=31
查表n=6,可得到相应的反馈网络的函数f为(6,5),反馈f表示为:
根据f的反馈函数,假设初始状态为111000,可以写出其64-1=63长度的序列信号;具体做法为:
将每一列的6和5位置的数字相异或,得到的数字放在下一行的1位置,该行的54321位置上的数字移到下一行的65432位置上,合成下一行的6位数字。
初始状态为111000,则真值表为:
654321
1111000
2110000
3100000
4000001
5000010
6000100
7001000
8010000
9100001
10000011
11000110
12001100
13011000
14110001
15100010
16000101
17001010
18010100
19101001
20010011
21100111
22001111
23011110
24111101
25111010
26110100
27101000
28010001
29100011
30000111
31001110
32011100
33111001
34110010
35100100
36001001
37010010
38100101
39001011
40010110
41101101
42011011
43110111
44101110
45011101
46111011
47110110
48101100
49011001
50110011
51100110
52001101
53011010
54110101
55101010
56010101
57101011
58010111
59101111
60011111
61111111
62111110
63111100
根据上面,可得到最长线性序列信号:
111000001000011000101001111010001110010010110111011001101010111
寻找起跳状态
Q6输出序列为:
Ⅰ:
111000001000011000101001111010001110010010110111011001101010111
左移32位,
Ⅱ:
000001000011000101001111010001110010010110111011001101010111111
Ⅰ⊕Ⅱ=Ⅲ:
000001000011000101001111010001110010010110111011001101010111111
序列Ⅲ中100000(5个连0)处对应序列Ⅰ的四位代码为111100,此即为起跳状态。
求M=31的序列信号
可以在63长度的序列中,从起跳状态开始,消去32位码元,剩下的码元即组成31长度的序列信号:
111001*********1011001101010111
设计产生长度为31的序列信号的逻辑表达式
可直接通过修改m=63序列信号发生器的反馈函数f得到M=31的序列信号发生器的反馈函数f’:
f’=f⊕起跳状态+/Q6/Q5/Q4/Q3/Q2/Q1
=Q6⊕Q5⊕Q6Q5Q4Q3/Q2/Q1+/Q6/Q5/Q4/Q3/Q2/Q1
=/(Q6⊕Q5)Q6Q5Q4Q3/Q2/Q1+Q6⊕Q5/(Q6Q5Q4Q3/Q2/Q1)+/Q6/Q5/Q4/Q3/Q2/Q1
=(/Q5/Q6+Q5Q6)Q6Q5Q4Q3/Q2/Q1+(/Q5Q6+Q5/Q6)(/Q6+/Q5+/Q4+/Q3+Q2+Q1)+/Q6/Q5/Q4/Q3/Q2/Q1
=Q6Q5Q4Q3/Q2/Q1+/Q5Q6+Q5/Q6+/Q6/Q5/Q4/Q3/Q2/Q1
=/Q5Q6+Q5/Q6+Q6Q4Q3/Q2/Q1+/Q6/Q4/Q3/Q2/Q1
2C语言验证
经过C语言程序验证,M=31的序列信号111001*********1011001101010111
C语言运行结果如图2-6所示。
图1C语言验证结果
C语言源程序代码
程序运行环境:
DEVC++4.9.9.2,WindowsXP
/*
F(x)=1+X5+X6M=31
初始数列111000
起跳状态111100
f=/Q5Q6+Q5/Q6+Q6Q4Q3/Q2/Q1+/Q6/Q4/Q3/Q2/Q1
验证输出数列是否为1110010010110111011001101010111
C语言源程序代码
程序运行环境:
DEVC++4.9.9.2,WindowsXP
*/
#include
intmain()
{
intinitial[6]={0,0,1,1,1,1};
intans[31][6];
inti,j;
for(i=0;i<5;i++)
{
ans[0][i+1]=initial[i];
}
if((!
initial[4]&&initial[5])||(initial[4]&&!
initial[5])||(initial[5]&&initial[3]&&initial[2]&&!
initial[1]&&!
initial[0])||(!
initial[5]&&!
initial[3]&&!
initial[2]&&!
initial[1]&&!
initial[0]))
{
ans[0][0]=1;
}
else
{
ans[0][0]=0;
}
for(i=1;i<31;i++)
{
for(j=0;j<5;j++)
{
ans[i][j+1]=ans[i-1][j];
}
if((!
ans[i-1][4]&&ans[i-1][5])||(ans[i-1][4]&&!
ans[i-1][5])||(ans[i-1][5]&&ans[i-1][3]&&ans[i-1][2]&&!
ans[i-1][1]&&!
ans[i-1][0])||(!
ans[i-1][5]&&!
ans[i-1][3]&&!
ans[i-1][2]&&!
ans[i-1][1]&&!
ans[i-1][0]))
{
ans[i][0]=1;
}
else
{
ans[i][0]=0;
}
}
printf("\n");
printf("F(x)=1+X5+X6M=31\n初始数列111000\n起跳状态111100\nf=/Q5Q6+Q5/Q6+Q6Q4Q3/Q2/Q1+/Q6/Q4/Q3/Q2/Q1\n验证输出数列为:
");
for(i=0;i<31;i++)
{
printf("%d",ans[i][5]);
}
printf("\n");
while
(1);
}