2.产生 M 序列程序
用带反馈通道的移位寄存器产生 PRBS 序列信号。要选择合适的通道,经模
二加法后进行反馈。在程序中,移位寄存器个数可从 2 到 13 中任意选择,其长
度也可以自由选择。运行结果在 vc++的运行环境中能看得很清楚,最后产生的
M 序列数据也存在相应的数据文件中。
M 序列的初值为各个移位寄存器均设为 1,使用 switch,case 语句对需要多
条反馈通道的情况进行分别处理,例如对 n 等于 8,12,13,用不同的 N1,N2,N3
进行区分,以区分只要一次模二加法的情况,这样就可以得到一个相当全面、功
能完善的程序。最后将输出信号转换为幅值可调的、有正负 a 值的信号。所有需
要调整的参数都可以通过界面上的人机对话输入。
//M 序列源程序
#include<iostream.h>
#include<math.h>
#include<fstream.h>
void main()
{
int i,n,a,N,k;
int zita[8200],u[8200];
ofstream fop("M 序列.txt"); //输出数据文件 M 序列.txt
cout<<"请输入 n:"; //对 n 和幅值 a 赋初值
cin>>n;
cout<<"请输入幅值 a:";
cin>>a;
N=int(pow(2,n)-1);
cout<<"序列周期长度为"<<N<<"";
fop<<"序列周期长度为"<<N<<"";
if(n==12||n==13)
{cout<<"序列总长度为"<<N<<"";
fop<<"序列总长度为"<<N<<"";
}
else
{cout<<"序列总长度为 2041"<<"";
fop<<"序列总长度为 2041"<<"";
}
for(i=1;i<=n;i++) //对 zita[k]赋初值
{
zita[i]=1;