通信原理实验报告LABVIEW21.docx

上传人:b****5 文档编号:7540357 上传时间:2023-01-24 格式:DOCX 页数:27 大小:385.73KB
下载 相关 举报
通信原理实验报告LABVIEW21.docx_第1页
第1页 / 共27页
通信原理实验报告LABVIEW21.docx_第2页
第2页 / 共27页
通信原理实验报告LABVIEW21.docx_第3页
第3页 / 共27页
通信原理实验报告LABVIEW21.docx_第4页
第4页 / 共27页
通信原理实验报告LABVIEW21.docx_第5页
第5页 / 共27页
点击查看更多>>
下载资源
资源描述

通信原理实验报告LABVIEW21.docx

《通信原理实验报告LABVIEW21.docx》由会员分享,可在线阅读,更多相关《通信原理实验报告LABVIEW21.docx(27页珍藏版)》请在冰豆网上搜索。

通信原理实验报告LABVIEW21.docx

通信原理实验报告LABVIEW21

通信原理实验报告

实验项目:

实验1掌握用Labview产主随机数的方法

实验2统计随机数的概率分布密度函数及相关函数特性

实验3产生m序列信号源,验证m序列的伪随机性以及伪随机序列的自相关函数的双值特性。

实验4模拟产生AWGN及ISI信道,添加到数字通信仿真系统中

实验1随机数产生及直方图统计

一、实验目的

(1)掌握在一般微型计算机上产主随机数的方法。

(2)统计随机数的概率分布密度函数。

二、实验内容

1.用计算机产生[0,1]均匀分布的(伪)随机数。

2.由[0,1]均匀分布随机数产生其它分布的随机数,例:

正态N(0,l)分布的随机数。

3.用直方图统计随机数的分布密度。

三、实验设备

微型计算机及其高级程序语言编译环境,例C++、FORTRAN、PASCAL等,也可以应用工程计算工具软件如MATLAB等。

四、实验原理

1.计算机产生均匀分布随机数

在计算机算法中,为实现方便,通常使用伪随机数(序列)来代替(真)随机数。

伪随机序列是有周期性的数值序列,当其周期N相对很大时,统计特性一定程度上逼近随机序列,故效果与(真)随机数相近。

2.高斯分布随机数的获得

实际研究当中,高斯(正态)分布是经常被使用到的数学模型,可以近似描述很多随机事件的统计特性。

,我们可以采用非线性变换法,对比较容易产生的均匀分布随机序列进行变换,(近似)得到高斯分布随机序列。

公式中,若R1和R2是[0,1]区间两个均匀分布随机变量,理论上可以证明XC是标准正态分布(均值为0,方差为1的高斯分布)的随机变量。

3.直方图

对于一个随机变量,假如我们知道它是正态的(或其它分布形式)我们可以从随机变量的抽样估计它的均值和方差,从而得到它的分布密度函数。

预先对一个随机变量分布一无所知,要估计它的分布密度函数可借助于直方图统计方法:

设有图1所示密度函数fx(x)把随机变量X的取值量化,量化阶为2ε,例如对于以x=2为中心的量化阶内,如果ε足够小。

当X抽样X1,X2,……,XN,是独立且同分布时,则

当N较大能用频率代替概率。

所以可以得到概率密度的估计值

k=1,…,N

显然x=2并不特殊,可以重复进行其它x值上的密度估计。

这样我们就得到密度函数fx(x)的离散估计值。

这就是直方图方法。

这种直方图估计的准确度可以进行专门分析。

分析它的方差可以知道,N和ε的选择有一定的要求。

显然,数据样点数N越大越好,而区间密度ε选择与N值相适应为好。

有表1可供参考。

表1样点数与直方单元数

500

1000

2000

5000

10000

22

30

39

56

74

N-数据样点数;K-随机变量取值范围量化的单元数。

实验中要求用计算机对所产生的随机数用直方图估计其概率密度函数,井打印出分布函数的图形

五、实验步骤

1.弄懂实验原理,设计结构框图:

2.利用LabVIEW编写程序:

六、实验结果

 

实验2相关噪声模型和相关函数计算

一、实验目的

熟悉相关噪声模型,掌握相关函数的计算方法。

二、实验内容

1.计算一下白噪声模型的相关函数。

2.计算相关噪声的相关函数,它应是指数型的。

3.计算正弦信号加噪声的相关函数,期望得到指数与余弦迭加的波形。

三、实验设备

微型计算机及其它外围设备。

四、实验原理

各态遍历的平稳随机过程x(t)自相关函数可表示为

而对于周期性信号,自相关函数可表示为

其中T0为周期。

自相关函数的离散数值计算公式

r=0,1,2,…,mm

如果我们有N个数据记录,上式就可以在数字计算机上进行相关函数的估计。

实验内容中的三个模型:

1.白噪声模型:

产生的[0,1]均匀分布随机序列,都强调要求它的分布均匀性要好,独立性要强。

这独立性要求指的是前后相邻数据不相关。

实际上这就是一种白噪声模型,如果把它变换为[-

]均匀分布,则就是一种零均值的白噪声模型。

我们记理想的白噪声序列为{wk},则其自相关函数可表示为

其中

计算机产生的均匀分布随机数具有白噪声性质,就应该有尖峰自相关函数。

反过来说,这相关函数的尖峰形状能用来检验随机数独立性的好坏。

2.相关噪声模型

对于相应的数据序列来说,可由白噪声模型变换出相关噪声的模型,白噪声wi,经图示装置处理,产生的输出为

(0

我们看到ni与其前面几个值(ni-1,ni-2,……,)有依赖关系。

这相关性的强弱取决于系数a的取值,这样得到的数据序列{ni}就是一个相关噪声模型。

相关噪声的相关函数应是指数型的。

3.正弦信号加噪声

这是加噪声模型,用一个正弦信号与相关噪声迭加,得到

其中正弦信号初相为零,当然也可随意指定一个初相,这随机相位正弦信号的数据样值只要利用函数赋值就可得到。

正弦信号加噪声的相关函数应该是指数与余弦迭加的波形。

五、实验步骤

1.弄懂实验原理,设计结构框图:

2.利用LabVIEW编写程序(由于程序框图太大,这里分成部分贴出):

(a)白噪声及其自相关函数

(b)相关噪声及正弦信号与相关噪声迭加

(c)相关噪声的自相关函数及正弦信号与相关噪声迭加的自相关函数

 

六、实验结果

实验3伪随机序列产生及其特性研究

一、实验目的

1.了解伪随机序列产生的方法,观察其变换的不同码型。

2.研究m序列本原多项式与线性移位寄存器的反馈方式间的关系。

3.验证m序列的伪随机性。

4.验证伪随机序列的自相关函数的双值特性。

二、实验内容

1.选择合适的m序列本原多项式,设计n级(n=3~8)线性反馈移位寄存器,产生m序列。

2.分析记录m序列的周期P与级数n之间的关系是否符合

3.讨论m序列的性质和相关函数特性。

三、实验设备

1.直流稳压电源

2.示波器

3.单片计算机实验电路装置

四、实验原理

1.m序列

在通信系统中,为了研究随机噪声对系统的影响,往往需要人为生成随机噪声。

而在20世纪60年代,人们发明了“伪随机噪声”,才真正满足了研究的需要。

伪随机噪声具有类似于随机噪声的某些统计特性,同时又能够重复产生,避免了随机噪声不可重现的缺点,因而获得了广泛的应用。

而伪随机噪声是由周期性数字序列经滤波等处理后得到的,这种周期性数字序列就是“伪随机序列”,有时也被称作伪随机信号或伪随机码。

至今,最广为人知的二进制伪随机序列是“最长线性反馈移位寄存器序列”,简称m序列。

m序列因其随机特性和预先可确定性及可重复实现的优点,在实际领域中得到广泛应用。

2.m序列产生原理

m序列是由带线性反馈的移存器产生的周期最长的序列。

图4-1为一般的线性反馈移存器产生m序列的原理饭框图。

图4-1线性反馈移位寄存器原理方框图

由于带有线性反馈,在移位脉冲作用下,线性移位寄存器各级的状态将不断变化,通常移位寄存器的最后一级做输出,当移位寄存器的级数及时钟一定时,输出序列就由初始状态和反馈逻辑完全确定。

输出序列为

,是一个周期序列。

经一次移位线性反馈,左端新得到的输入

(模2)

因此,一般说来,对于任意一个输入

,有

上式称为“递推方程”,它给出移位输入与移位前各级状态的关系。

按照递推方程,就可以用软件产生m序列。

当初始状态为全零状态是,移位寄存器输出全零序列,因此,因避免设置全0电路。

在递推方程中,

的取值决定了序列的结构,所以

是一个很重要的参量。

的取值情况可以用特征多项式(或特征方程)f(x)描述:

对于n阶m序列,最大能产生的周期为

其中能满足此要求的最简f(x)也称“本源多项式”。

其中3~8阶序列的本源多项式如表4-1所示。

级数n

8进制表示

代数式

3

13

x3+x+1

4

23

x4+x+1

5

45

x5+x2+1

6

103

x6+x+1

7

211

x7+x3+1

8

435

x8+x4+x3+x2+1

表4-1本源多项式表

3.m序列的性质

m序列具有几个有趣的性质和统计特性。

1.对n级m序列周期为

2.在一个周期中,“0”出现

次,“1”出现

3.在一个周期中,共有

个游程,其中:

长度为k的游程有

个,

长度为

的有1个“0”游程;

长度为n的有1个“1”游程。

4.归一化自相关函数为

的周期为P

五、设计要求

1.利用单片机编程实现,设计n级(n=3~8)m序列的发生器,每级可选择实现1种序列码型。

2.序列码元速率:

(推荐)100Baud。

3.为便于示波器观测m序列波形,给出序列周期同步信号作为示波器触发源,如图4-2示意。

图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;

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序列的周期

由表一可得生成的M序列的周期

,如n=3时,p=7;n=4时,p=15…….

2.M序列的游程

由上表所得的M序列所得,当n=4时,共有

个游程,分别为1111,0,1,0,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)的游程占了

,长度为3(n-1)的游程是连续0的游程(000),长度为4(n)的游程为连续1的游程(1111)。

同理分析n=3,5,6,7,8时得到结论:

m序列的一个周期(p=2n-1)中,游程总数为2n-1。

其中长度为1的游程个数占游程总数的1/2;长度为2的游程个数占游程总数的1/22=1/4;长度为3的游程个数占游程总数的1/23=1/8;……一般地,长度为k的游程个数占游程总数的1/2k=2-k,其中1≤k≤(n-2)。

而且,在长度为k游程中,连1游程与连0游程各占一半,长为(n-1)的游程是连0游程,长为n的游程是连1游程。

七、程序清单

#include

#include

/*///////////////////////////////////////////////////*/

/*/常量定义/*/

/*///////////////////////////////////////////////////*/

/*定时器初值*/

#defineV_TH10xee/*~5ms,!

notice:

crystal11.0592MHz*/

#defineV_TL10x00

/*数码管段驱动寄存器地址*/

#defineADDR_8SEGXBYTE[0x2000]

/*数码管位驱动和指示灯驱动寄存器地址*/

#defineADDR_SELXBYTE[0x4000]

/*按键*/

sbitKEY1=P1^0;

sbitKEY2=P1^1;

sbitKEY3=P1^2;

sbitKEY4=P1^3;

/*///////////////////////////////////////////////////*/

/*/变量定义/*/

/*//////////////////////////////////////////////////*/

 

/*数码管位驱动和指示灯驱动信号输出缓存,定义了一个可位寻址的变量*/

unsignedcharbdataoutput_sel;

sbitled_1=output_sel^5;

sbitled_2=output_sel^6;

sbitled_3=output_sel^7;

sbitled_4=output_sel^4;

/*数码管扫描驱动指针,为测试外部存储器(U36264),特使用xdata类型*/

unsignedcharxdatadigi_scaner;

 

/*测试用计数值十进制表示,为测试外部存储器(U36264),特使用xdata类型*/

unsignedcharxdatadigi[4]={0,0,0,3};

unsignedchartemp4;//按键消抖

/*pwm控制的变量*/

unsignedintpwm_time;

unsignedcharvth0,vtl0;

bitpwm_status;//信号

bitsync_sta;//同步

intpower;//2的乘方的结果,等于2的n次方

unsignedcharj;//用于for循环

intprd;//period,由于序列周期的计数

sbitpwm_out=P3^5;//m序列输出

sbitsync=P3^4;//序列周期同步信号

unsignedcharv=0;//发送完一位置零

 

/*///////////////////////////////////////////////////*/

/*/函数定义/*/

/*///////////////////////////////////////////////////*/

/****7段数码显示译码

参数:

DATA:

需要显示的数字或符号;

返回值:

7段译码结果(D7~0=PGFEDCBA)

*****/

unsignedcharNUMTOSEG7(unsignedcharDATA)

{unsignedcharAA;

switch(DATA)

{case0:

AA=0xc0;break;/*‘0’*/

case1:

AA=0xf9;break;/*‘1’*/

case2:

AA=0xa4;break;/*‘2’*/

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);

}

/****T1时钟中断服务程序在本例中,每5ms被执行一次*****/

 

timer1()interrupt3using0

{

EA=0;/*关中断*/

/*重新对计数器赋初值,并启动定时计数*/

TH1=V_TH1;

TL1=V_TL1;

TR1=1;

EA=1;

output_sel=0xf0;/*初值,令数码管驱动位无效,指示灯全灭*/

/*按键4消抖和按键4确认的处理*/

if(KEY4==0){led_4=0;temp4++;}

if(temp4>20&&KEY4==1){

temp4=0;

if(++digi[3]>8)digi[3]=3;

power=1;

prd=1;

for(j=0;j

power*=2;}

}

/*数码管扫描驱动指针值从1到4重复变换,每5ms间隔对一个数码管进行驱动,20ms一个轮回*/

if(++digi_scaner>=5)digi_scaner=1;

switch(digi_scaner)

{

case1:

/*驱动第一个数码管*/

output_sel|=0x01;

ADDR_8SEG=NUMTOSEG7(pwm_status);/*输出到锁存器U5(在电路图中找)*/

break;

case2:

/*驱动第二个数码管*/

output_sel|=0x02;

ADDR_8SEG=0xff;/*输出到锁存器U5*/

break;

case3:

/*驱动第三个数码管*/

output_sel|=0x04;

ADDR_8SEG=0xff;/*输出到锁存器U5*/

break;

case4:

/*驱动第四个数码管*/

output_sel|=0x08;

ADDR_8SEG=NUMTOSEG7(digi[3]);/*输出到锁存器U5*/

break;

}

ADDR_SEL=output_sel;/*输出到锁存器U6(在电路图中找)*/

}

timer0()interrupt1using1//T0中断,发送m序列

{

EA=0;

TH0=vth0;

TL0=vtl0;

TR0=1;

pwm_out=pwm_status;

sync=sync_sta;

v=0;

EA=1;

}

/****主程序*****/

main()

{

intn;

inti;

intcount=0;

inttemp;

intyd[8]={1,0,1,0,1,0,1,0};

/*单片机系统初始化*/

P1=0XFF;

P3=0XFF;

/**中断工作寄存器初始化**/

IE=0X80;//EA=1

IP=0;

PT0=1;

PT1=0;

/**定时器工作寄存器初始化**/

TMOD=0X11;//T0/1workas16btimer

TCON=0;

/*定时器1的寄存器初始化*/

TH1=V_TH1;

TL1=V_TL1;

/**全局变量赋初值**/

digi_scaner=1;//数码管计数

pwm_time=2304;//机器周期数,对应400Hz

vth0=(0xffff-pwm_time)>>8;

vtl0=(0xffff-pwm_time);

prd=1;

power=8;

TH0=vth0;

TL0=vtl0;

/**开定时器,定时器0中断允许**/

TR0=1;

TR1=1;

ET0=1;

ET1=1;

output_sel=0xf0;

temp4=0;

/*主循环,本例中,在T1中断服务程序未被执行的空余时间里,处理机在以下程序中不断循环*/

while

(1)

{

n=digi[3]-1;//随机码的级数-1

if(n==2||n==3||n==5||n==6)

{

if(v==0)

{

if(prd==1){

sync_sta=1;

}else{

sync_sta=0;

}

prd+=1;

if(prd>=power){prd=1;}

temp=(yd[0]+yd[n])%2;//取最低位与修高位异或运算

for(i=0;i

{

yd[i]=yd[i+1];//其余数字全部向前移动一位

}

yd[n]=temp;//新的数据加入队列最末

pwm_status=temp;//输入刚得到的新数据

v=1;

}

}

elseif(n==4)

{

if(v==0)

{

if(prd==1){

sync_sta=1;

}else{

sync_sta=0;

}

prd+=1;

if(prd>=power){prd=1;}

temp=(yd[0]+yd[2])%2;

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 理学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1