新闻  |   论坛  |   博客  |   在线研讨会
用MATLAB产生正态分布随机噪声来测量直扩系统抗噪性能
shadowind | 2008-07-26 19:46:37    阅读:1348   发布文章

本文提出了一种产生正态分布随机噪声的设计方案。即利用MATLAB软件的仿真功能来产生若干正态分布随机噪声,然后以数据文件的形式将其存储在EPROM中并在地址发生器作用下输出噪声,以定量检验直接序列扩频系统(DSSS)的抗干扰能力。最后给出了仿真信号波形和实验信号波形。图1:在实际中采用了HC4040(12位)计数器和CD6740(EPROM)组成了一个噪声数据发生器。

 

目前,扩频技术因其良好的抗干扰能力及低截获概率性,因而在通信领域得到了广泛的应用。直接序列扩频是扩频技术的一种主要方式,它是用PN码和二元信息数字序列模2相加后成复合码去调制载波[1]。如何定量衡量一个扩频系统的抗干扰能力,就需引入一些已知参数的正态噪声,如果利用模拟信号源产生噪声,则正态噪声参数(均值和方差)通常是衡定的,满足不了实际情况的需要。解决这一问题的简单方法就是利用MATLAB中的仿真功能产生正态噪声,并将所有产生的噪声数据烧录进EPROM中,以供随时调用。但由于噪声数据较多,将这些数据烧录进EPROM中也比较麻烦。如果能将产生的噪声数据形成一个*.hex文件,并将其下载到EPROM中,就使得产生正态噪声的过程变得非常简单,用户可根据需要随时变更噪声参数。

 

用MATLAB产生正态分布噪声及数据文件

 

若噪声数据较长,直接用手工录入EPROM中很容易出错,且要花费较多的时间。如果用MATLAB中编程的方法产生一系列噪声数据,并将其以*.hex文件形式烧录进EPROM中,就可大大简化这一过程。至于正态噪声的参数,用户可根据自己需要设定。也可产生多组不同参数的正态分布随机噪声,同时烧录进EPROM中,根据需要可方便地取用。

 

另外,用MATLAB产生的噪声数据是模拟信号,而实际的扩频信号通常是0和1的数字信号,因此我们应将随机噪声进行量化编码,并用补码的形式表示。

 

下面以服从均值为0,方差为3的正态分布随机噪声的产生为例加以说明。

 

产生正态噪声的noise.m[2]文件如下:


==================================


echo on


fid=fopen('temp.hex','w');


random=3*randn(511,1);


for i=1:511


if random(i)>=7


noise(i)=3;


noise1(i)=96;


fprintf(fid,'%X',noise1(i));


elseif random(i)>=4.6&random(i)<7


noise(i)=2;


noise1(i)=64;


fprintf(fid,'%X',noise1(i));


elseif random(i)>=2.3&random(i)<4.6


noise(i)=1;


noise1(i)=32;


fprintf(fid,'%X',noise1(i));


elseif random(i)>=0&random(i)<2.3


noise(i)=0;


noise1(i)=0;


fprintf(fid,'%X',noise1(i));


elseif random(i)>=-2.3&random(i)<0


noise(i)=0;


noise1(i)=0;


fprintf(fid,'%X',noise1(i));


elseif random(i)<=-2.3&random(i)>-4.6


noise(i)=-1;


noise1(i)=224;


fprintf(fid,'%X',noise1(i));


elseif random(i)<=-4.6&random(i)>-7


noise(i)=-2;


noise1(i)=192;


fprintf(fid,'%X',noise1(i));


elseif random(i)<=-7


noise(i)=-3;


noise1(i)=160;


fprintf(fid,'%X',noise1(i));


end;


end;


fclose(fid);


==========================

程序说明:

 

1.图2(a):运用本文提出的设计方案所得到的实验电路输出的量化、编码后的正态噪声波形(图中上面部分是时钟波形)。 fopen()函数的功能是以写入的方式打开一个temp.hex文件,该文件的作用是存储噪声数据。fprintf()函数用来向打开的文件中写噪声数据。

 

2. randn(511,1)函数用来产生511个服从均值为0,方差为1的正态分布随机噪声,如需产生方差为delta的噪声,则需在函数前乘以delta。

 

3. 程序中的for循环语句部分就是对产生的随机噪声进行量化编码。量化是采用的均匀量化,编码是采用补码的形式。值得说明的是该例每个噪声数据用三比特来表示, 如EPROM中的每个地址单元存储一个噪声数据,就有5个比特没用。因此可采用填零的办法,如高3位为噪声数据,低5位填零。从EPROM中读噪声数据时就只取每个地址的前三位。

 

实际电路和波形

 

在实际中采用了HC4040(12位)计数器和CD6740(EPROM)组成了一个噪声数据发生器。发生器电路如图1所示。

 

4040在5V电压下最高输出频率为3.5MHz,在15V电压下可达到12Mhz,满足一般情况下的扩频数据速率要求。由于将噪声数据定为511,因此当Q1~Q9均为高电平时将计数器清零。图中输出噪声数据为高三位,经过并串转换后可跟扩频信号相结合。D触发器的作用是对输出数据起整形作用,以去掉毛刺。通过让EPROM的高地址线A13、A12、A11、A10接高低电平,能够使该电路产生多组不同参数的噪声数据以供选择。

 

图2(a)是运用本文提出的设计方案所得到的实验电路输出的量化、编码后的正态噪声波形(图中上面部分是时钟波形),图2(b)是仿真波形。二者选取了噪声数据中的同一段以便对照。图2(b):仿真波形。二者选取了噪声数据中的同一段以便对照。

 

实际应用

 

本文产生正态分布随机噪声的方法简单,噪声参数可灵活修改,因此可以方便地用于数字通信系统中的误码率测量。衡量一个通信系统的主要指标是其抗各种干扰的能力,而实际信道中的噪声并不能定量测量,所以可以人为地加入参数已知的正态分布随机噪声来定量地测出某个系统的误码率。实际应用中,我们用本文产生的随机噪声测量了一个直接序列扩频系统的误码率,较好地衡量了该系统的抗随机噪声的能力,收到了很好的效果。另外本文产生噪声的方法也可以用于某些随机码,如PN码、RS码的产生,并可在实际电路中方便调用。

 

总结本文提出的产生正态噪声的方案有三个特点:①噪声数据的产生及固化迅速而准确。②电路结构简单,几乎不需调试。③使用方便灵活,即可根据实际需要选择不同参数的噪声数据。

 

参考文献

 

1. 沈允春编著.扩谱技术.北京:国防工业出版社.1995年


2. 张志勇等编著.掌握和精通MATLAB.北京:北京航空航天大学出版社.1997

 

作者: 冯聃


重庆大学通信与测控工程研究所


邮编:400044

 

*博客内容为网友个人发布,仅代表博主个人观点,如有侵权请联系工作人员删除。

参与讨论
登录后参与讨论
推荐文章
最近访客