相关噪声序相关噪声自相关函T;正弦信号周b(0.3
正弦信号加噪声自相关函数编写程序(由于程序框图太大,这里分成部分贴出):
LabVIEW2.利用(a)白噪声及其自相关函数6
实验2相关噪声模型和相关函数计算
(b)相关噪声及正弦信号与相关噪声迭加
(c)相关噪声的自相关函数及正弦信号与相关噪声迭加的自相关函数
7
实验2相关噪声模型和相关函数计算
8
实验2相关噪声模型和相关函数计算
六、实验结果
9
实验2相关噪声模型和相关函数计算
10
实验3常量信号检测的计算机模拟(新版)
11
实验4伪随机序列产生及其特性研究
实验3伪随机序列产生及其特性研究
一、实验目的
1.了解伪随机序列产生的方法,观察其变换的不同码型。
2.研究m序列本原多项式与线性移位寄存器的反馈方式间的关系。
3.验证m序列的伪随机性。
4.验证伪随机序列的自相关函数的双值特性。
二、实验内容
1.选择合适的m序列本原多项式,设计n级(n=3~8)线性反馈移位寄存器,产生m序列。
n?
1?
2P。
n之间的关系是否符合P2.分析记录m序列的周期与级数3.讨论m序列的性质和相关函数特性。
三、实验设备
1.直流稳压电源
2.示波器
3.单片计算机实验电路装置
四、实验原理
1.m序列
在通信系统中,为了研究随机噪声对系统的影响,往往需要人为生成随机噪声。
而在20世纪60年代,人们发明了“伪随机噪声”,才真正满足了研究的需要。
伪随机噪声具有类似于随机噪声的某些统计特性,同时又能够重复产生,避免了随机噪声不可重现的缺点,因而获得了广泛的应用。
而伪随机噪声是由周期性数字序列经滤波等处理后得到的,这种周期性数字序列就是“伪随机序列”,有时也被称作伪随机信号或伪随机码。
至今,最广为人知的二进制伪随机序列是“最长线性反馈移位寄存器序列”,简称m序列。
m序列因其随机特性和预先可确定性及可重复实现的优点,在实际领域中得到广泛应用。
2.m序列产生原理
m序列是由带线性反馈的移存器产生的周期最长的序列。
图4-1为一般的线性反馈移存器产生m序列的原理饭框图。
图4-1线性反馈移位寄存器原理方框图
由于带有线性反馈,在移位脉冲作用下,线性移位寄存器各级的状态将不断变化,通常12
实验4伪随机序列产生及其特性研究
移位寄存器的最后一级做输出,当移位寄存器的级数及时钟一定时,输出序列就由初始状态{a}?
aa...a...,是一个周期序列。
和反馈逻辑完全确定。
输出序列为1?
10kna为经一次移位线性反馈,左端新得到的输入nn?
ac?
ca?
a?
cn?
ca?
?
2)(模in?
20n?
1i?
2nnn11i?
a,有因此,一般说来,对于任意一个输入kn?
aca?
iki?
k1?
i上式称为“递推方程”,它给出移位输入与移位前各级状态的关系。
按照递推方程,就可以用软件产生m序列。
当初始状态为全零状态是,移位寄存器输出全零序列,因此,因避免设置全0电路。
ccc的取值情的取值决定了序列的结构,所以是一个很重要的参量。
在递推方程中,iii况可以用特征多项式(或特征方程)f(x)描述:
n?
nix?
cx?
cxf()?
c?
cx?
...i01n0?
in12?
“本)也称其中能满足此要求的最简最大能产生的周期为n阶m序列,f(x。
对于4-1所示。
源多项式”。
其中3~8阶序列的本源多项式如表4-1本源多项式表表
)xf(代数式8级数n进制表示3+x+1313x4+x+1x234
25+145+xx
5
103211435
6+x+1x37+1+xx2438+x+xx+x
678
+1m序列的性质3.
序列具有几个有趣的性质和统计特性。
m序列周期为n级m1.对n12?
P?
1n?
1n?
1?
22次,”出现”出现“2.在一个周期中,0“1次
1?
n23.在一个周期中,共有个游程,其中:
13
4伪随机序列产生及其特性研究实验
12n?
1?
k?
个,的游程有长度为k;
k21n?
0”游程;的有长度为1个“1”游程。
的有1个“长度为n4.归一化自相关函数为)?
01(j?
?
?
j)(?
)1?
P?
/P(1?
j?
1
?
?
)j(P
且的周期为五、设计要求种序列1m序列的发生器,每级可选择实现=3~8).利用单片机编程实现,设计n级(n1码型。
。
(推荐)100Baud2.序列码元速率:
4-2序列波形,给出序列周期同步信号作为示波器触发源,如图.为便于示波器观测m3示意。
为例:
n=3以
序列输出mm序列0
0111011110010
发生器
序列周期同步脉冲
图4-2m序列发生和序列周期同步信号
六、实验内容
1.m序列生成
本次试验由MCS51系列的AT89S52单片机完成m序列机器周期同步脉冲的生成。
其主要部分的程序设计如下:
a)m序列的移位寄存器生成法
m序列由移位寄存器法产生(详细原理见上面“实验原理”部分),反馈环路的设置采用了表4-1中的本源多项式的取值方法。
每当定时器T0中断输出m序列的一个二进制位,便把全局变量v置零。
在主程序中,每当检测到v的值为零,则根据当前要求的阶数移位产生新的位,将v置1,并等待定时器中断输出。
为保证在3~8阶都可生成,并避免移位寄存器出现全零状态,移存器(实际上是一个数组)的初值设置为{1,0,1,0,1,0,1,0},n阶m序列则取其前n个作为m序列的初值。
(详见“程序清单”主程序中无限循环部分)
b)定时中断输出m序列
我们选择m序列的波特率为400Baud,而单片机晶振为12.0592MHz,所以定时器的计数量为pwm_time=11059200/12/400=2304。
我们采用定时器T0作为m序列输出定时器,工作于模式1(即16位定时器)。
中断服务程序如下:
timer0()interrupt1using1//T0中断,发送m序列
{
EA=0;
TH0=vth0;
TL0=vtl0;
14
实验4伪随机序列产生及其特性研究
TR0=1;
pwm_out=pwm_status;
sync=sync_sta;
v=0;
EA=1;
}
2.实验结果及m序列性质验证
a)实验结果
实验观察到的m序列为:
n=3级m序列:
1010011
n=4级m序列:
101011001000111
n=5级m序列:
101011001000111101011001000111
n=6级m序列:
101010110011011101101001001110…
n=7级m序列:
101010100110011101110100101100…
n=8级m序列:
101010100110010111010001110110…
b)序列性质
1.M序列的周期
n12?
p?
.p=15……p=7;n=4时,,如n=3时,由表一可得生成的M序列的周期2.M序列的游程14?
?
28个游程,分别为1111,0,1,时,共有由上表所得的M序列所得,当n=40,11,00,1,000;其中长度为4的游程有1个(1111),长度为3的游程有1个(000),长度为2的游程有2个(11,00),长度为1的游程有4个(0,1,0,1)
综上长度为1(k=1)的游程占了总游程数的一半(1/2),长度为2(k=2)的游程占了11?
,长度为3(n-1)的游程是连续0的游程(000,长度为4(n)的游程为连续1的)
2*k4游程(1111)。
同理分析n=3,5,6,7,8时得到结论:
m序列的一个周期(p=2n-1)中,游程总数为2n-1。
其中长度为1的游程个数占游程总数的1/2;长度为2的游程个数占游程总数的1/22=1/4;长度为3的游程个数占游程总
1/23=1/8;……一般地,长度为k的游程个数占游程总数的数的1/2k=2-k,其中1≤k≤(n-2)。
而且,在长度为k游程中,连1游程与连0游程各占一半,长为(n-1)的游程是连0游程,长为n的游程是连1游程。
七、程序清单
#include
#include
/*///////////////////////////////////////////////////*/
/*/常量定义/*/
/*///////////////////////////////////////////////////*/
*/
/*定时器初值
!
notice:
crystal11.0592MHz*/
/*0xee#defineV_TH1~5ms,
15
实验4伪随机序列产生及其特性研究
#defineV_TL10x00
/*数码管段驱动寄存器地址*/
#defineADDR_8SEGXBYTE[0x2000]
/*数码管位驱动和指示灯驱动寄存器地址*/
#defineADDR_SELXBYTE[0x4000]
/*按键*/
sbitKEY1=P1^0;
P1^1;sbitKEY2=
P1^2;sbitKEY3=
P1^3;
sbitKEY4=
/*///////////////////////////////////////////////////*/
/*/
变量定义/*/
/*//////////////////////////////////////////////////*/
*//*数码管位驱动和指示灯驱动信号输出缓存,定义了一个可位寻址的变量
unsignedcharbdataoutput_sel;
sbitled_1=output_sel^5;
sbitled_2=output_sel^6;
sbitled_3=output_sel^7;
sbitled_4=output_sel^4;
*/),特使用xdata类型U36264/*数码管扫描驱动指针,为测试外部存储器(unsignedcharxdatadigi_scaner;
*/,特使用U36264/*测试用计数值十进制表示,为测试外部存储器()xdata类型unsignedcharxdatadigi[4]={0,0,0,3};
按键消抖unsignedchartemp4;//
*/控制的变量/*pwmunsignedintpwm_time;
unsignedcharvth0,vtl0;
信号bitpwm_status;//同步bitsync_sta;//的2的乘方的结果,等于intpower;//2n次方循环forunsignedcharj;//用于intprd;//period,由于序列周期的计数
sbitpwm_out=P3^5;//m序列输出16
实验4伪随机序列产生及其特性研究
sbitsync=P3^4;//序列周期同步信号
unsignedcharv=0;//发送完一位置零
/*///////////////////////////////////////////////////*/
/*/
函数定义/*/
/*///////////////////////////////////////////////////*/
/****7段数码显示译码
参数:
DATA:
需要显示的数字或符号;
返回值:
7段译码结果(D7~0=PGFEDCBA)
*****/
TA)unsignedcharNUMTOSEG7(unsignedcharDA{unsignedcharAA;
TA)
switch(DA
{case0:
AA=0xc0;break;/*‘0'*/
case1:
AA=0xf9;break;/*‘1'*/4;break;/*‘2'*/case2:
AA=0xa
case3:
AA=0xb0;break;/*‘3'*/
case4:
AA=0x99;break;/*‘4'*/
case5:
AA=0x92;break;/*‘5'*/
case6:
AA=0x82;break;/*‘6'*/
case7:
AA=0xf8;break;/*‘7'*/
case8:
AA=0x80;break;/*‘8'*/case9:
AA=0x90;break;/*‘9'*/
'*/case10:
AA=0x88;break;/*‘A
case11:
AA=0x83;break;/*‘B'*/
case12:
AA=0xc6;break;/*‘C'*/
case13:
AA=0xa1;break;/*‘D'*/case14:
AA=0x86;break;/*‘E'*/
case15:
AA=0x8e;break;/*‘F'*/
*/case'-':
AA=0xbf;break;/*破折号,此处原误为0xdf,系04级王资凯同学指正*/case'_':
AA=0xf7;break;/*下划线
*/case'':
AA=0xff;break;/*消隐default:
AA=0xff;
}
return(AA);
}
*****/
5ms/****T1时钟中断服务程序在本例中,每被执行一次
17
实验4伪随机序列产生及其特性研究
timer1()interrupt3using0
{
EA=0;/*关中断*/
*//*重新对计数器赋初值,并启动定时计数
TH1=V_TH1;
TL1=V_TL1;
TR1=1;
EA=1;
*/初值,令数码管驱动位无效,指示灯全灭output_sel=0xf0;/**/确认的处理消抖和按键4/*按键4temp4++;}if(KEY4==0){led_4=0;
{if(temp4>20&&KEY4==1)
temp4=0;
if(++digi[3]>8)digi[3]=3;
power=1;
prd=1;
for(j=0;jpower*=2;}
}
*//*数码管扫描驱动指针值从1到一个轮回20ms5ms4重复变换,每间隔对一个数码管进行驱动,if(++digi_scaner>=5)digi_scaner=1;
switch(digi_scaner)
{
*/驱动第一个数码管case1:
/*
output_sel|=0x01;
*/U5ADDR_8SEG=NUMTOSEG7(pwm_status);/*输出到锁存器(在电路图中找)
break;
case2:
/*驱动第二个数码管*/
output_sel|=0x02;
U5*/输出到锁存器ADDR_8SEG=0xff;/*
break;
*/驱动第三个数码管case3:
/*
output_sel|=0x04;
U5*/ADDR_8SEG=0xff;/*输出到锁存器
break;
case