前言
为了帮助同学们完成痛苦的实验课程设计,本作者将其作出的实验结果及代码贴至CSDN中,供同学们学习参考。如有不足或描述不完善之处,敬请各位指出,欢迎各位的斧正!
一、实验目的
1.了解线性移位寄存器产生伪随机序列的原理。
2.伪随机寄存器的软件实现。
3.同一个反馈函数不同初始值下的输出序列。
4.同一个初始值在不同反馈函数下的输出序列。
二、实验环境
Microsoft Visual Studio 2019
三、实验内容及步骤
1.编程实现8位线性移位寄存器。
2.观察输出序列前255位的随机性。
3.改变反馈函数,再观察输出序列前255位的随机性。
4.改变初始值,再观察输出序列前255位的随机性。
5.找到一个m序列。**
四、实验要求
1.程序设计的思想,及程序原代码。
2.报告观察结果。
3.对观察结果的分析。
4.分析8位寄存器产生的m序列。***
五、实验程序清单
实验代码修改为如下所示:
void CMFCApplication2View::OnBnClickedButton1()
{
CString str;
GetDlgItemText(IDC_EDIT4, str);
unsigned int t1, f;
unsigned int lfsr, fs;
int fsc = _ttoi(str);
CString out;
int i, j, c1 = 0, c2 = 0;
lfsr = 0x95;
for (i = 1; i <= 255; i++)
{
fs = lfsr&fsc;
t1 = lfsr & 0x80;
if (t1 == 0)
{
c1++;
out += '0';
}
else
{
out += '1';
c2++;
}
f = 0;
for (j = 0; j<8; j++)
{
if (fs & 0x1 != 0)
f = f ^ 1;
else
f = f ^ 0;
fs = fs / 2;
}
lfsr = lfsr / 2;
if (f == 1)
lfsr = lfsr | 0x80;
else
lfsr = lfsr & 0x7f;
}
CString zero, one;
zero.Format(_T("%d"), c1);
SetDlgItemText(IDC_EDIT1, zero);
one.Format(_T("%d"), c2);
SetDlgItemText(IDC_EDIT2, one);
SetDlgItemText(IDC_EDIT3, out);
}
六、实验结果
实验运行如下:
七、实验总结
通过本次实验,我们可分析得到如下信息与结论:由于线性反馈移位寄存器的运算是确定的,因此,由寄存器生成的数据流可完全决定寄存器现在的状态。由于寄存器的状态终究是有限的,它终将生成一个固定循环。通过多项式,线性反馈移位寄存器可以生成具有伪随机特性的长循环周期序列。