《通信原理》用matlab实现加性高斯白噪声信道实验

article/2025/9/25 15:31:04

目录 

一、实验名称

二、实验目的

三、实验原理

四、实验内容及结果

五、实验收获


一、实验名称

加性高斯白噪声信道

二、实验目的

1.掌握matlab语言的基本操作和基本的编程功能;

2.掌握awgn函数和randn函数的用法;

3.了解加性高斯白噪声信道的产生方法,并学会使用awgn函数和randn函数来产生图形。

三、实验原理

1.加性高斯白噪声信道的概述

信号在信道传输的过程中,不可避免地会受到各种干扰,这些干扰统称为“噪声”。加性高斯白噪声(Additive White Gaussian Noise, AWGN)是最常见的一种噪声,它存在于各种传输媒质中,包括有线信道和无线信道。加性高斯白噪声表现为信号围绕平均值的一种随机波动过程。加性高斯白噪声的均值为0,方差是噪声功率的大小。一般情况下,噪声功率越大,信号的波动幅度就越大,接收端接收到的信号的误比特率就越高。在研究通信系统的误码率与信道质量的关系时,一般先研究它在AWGN信道下的性能,然后再把它推广到具有快衰落的复杂情况。

2. MATLAB提供了awgn函数来实现在输入信号中叠加一定强度的高斯白噪声信号,噪声信号的强度由输入参数确定。它主要有以下几种形式。
    (1)awgn(x,snr)
    函数awgn(x,sm)把加性高斯白噪声叠加到输入信号x中,snr以dB的形式指定噪声的功率。在这种情况下,信号x的功率假设为0dBW,因此,噪声的功率实际上就等于-snr dBW。如果x是复数,那么awgn将添加复数噪声。

(2)awgn(x,snr,sigpower)

这种方法与(1)不同的是,假设了输入信号的功率为sigpower。

(3)首先计算输入信号x的功率,然后按照snr添加相应功率的高斯白噪声。

3.randn函数

randn函数也可以用来产生加性高斯白噪声,在第3章中已经用到过该函数。

(1)randn(n)

randn(n)返还一个n行n列的随机矩阵,其中每一行和每一列都服从均值为0、方差为1的正态分布。
    (2)randn(m,n)
    randn(m.n)返还一个m行n列的随机矩阵,其中每一行和每一列都服从均值为0、方差为1的正态分布。
    (3)randn('state',seed)
    randn(stateseed)把随机数种子设定为seed,相同的state产生相同的随机数序列。

四、实验内容及结果

编制程序使用awgn函数和randn函数实现对加性高斯白噪声信号进行功率叠加、改变信号功率、计算噪声功率和方差,并对所有结果做一个对比和分析。

(一)实验一:在正弦信号上叠加功率为-20dBW的高斯白噪声。

1.实验代码

%加性高斯白噪声信道-用awgn(x,snr)实现t=0:0.001:10;                            %产生时间矢量tx=sin(2*pi*t);                           %生成正弦信号xsnr=20;                                  %设定加性高斯白噪声的功率snry=awgn(x,snr);                           %在正弦信号上叠加高斯白噪声z=y-x;                                   %计算噪声功率f=var(z);                                %计算噪声方差subplot(2,2,1);                          %定义第一个图像plot(t,x,'g-');                          %画出原始信号title('正弦信号x');                      %对图像主题的说明xlabel('t');                             %对横轴进行说明ylabel('x=sin(2Πt)');                   %对纵轴进行说明subplot(2,2,2);                          %定义第二个图像plot(t,y,'r-');                          %画出叠加了噪声后的信号title('叠加了高斯白噪声后的正弦信号y');    %对图像主题的说明xlabel('t');                             %对横轴进行说明ylabel('y=awgn(x,snr)');                 %对纵轴进行说明subplot(2,2,3);                          %定义第三个图像plot(t,z,'b-');                          %画出噪声功率的信号title('噪声功率');                       %对图像主题的说明xlabel('t');                             %对横轴进行说明ylabel('z=y-x');                         %对纵轴进行说明subplot(2,2,4);                          %定义第四个图像plot(t,f,'k.');                          %画出噪声方差的信号title('噪声方差');                       %对图像主题的说明xlabel('t');                             %对横轴进行说明ylabel('f=var(z)');                      %对纵轴进行说明

2.实验结果

        计算出的噪声功率为ans=0.0100。

        说明:程序第2行是产生时间矢量,第3行是生成正弦信号,第4行是设定加性高斯白噪声的功率,第5行是在正弦信号上叠加高斯白噪声,第6~7行是画出原始信号和叠加了噪声后的信号,第9~10行是计算噪声的功率(方差)。

       从上图可以看出,叠加了噪声后的信号与原信号相比有了失真,并且计算出的噪声功
率为0.01,而且这个功率是由snr决定的。

(二)实验二:现在设实验一中的信号功率为10dBW,snr保持不变,再重新求解。

1.实验代码

%加性高斯白噪声信道-用awgn(x,snr,'measured')实现t=0:0.001:10;                            %产生时间矢量tx=sin(2*pi*t);                           %生成正弦信号xsnr=20;                                  %设定加性高斯白噪声的功率snry=awgn(x,snr,'measured');                %在正弦信号上叠加高斯白噪声z=y-x;                                   %计算噪声功率f=var(z);                                %计算噪声方差subplot(2,2,1);                          %定义第一个图像plot(t,x,'g-');                          %画出原始信号title('正弦信号x');                      %对图像主题的说明xlabel('t');                             %对横轴进行说明ylabel('x=sin(2Πt)');                   %对纵轴进行说明subplot(2,2,2);                          %定义第二个图像plot(t,y,'r-');                          %画出叠加了噪声后的信号title('叠加了高斯白噪声后的正弦信号y');    %对图像主题的说明xlabel('t');                             %对横轴进行说明ylabel('y=awgn(x,snr,‘measured’)');     %对纵轴进行说明subplot(2,2,3);                          %定义第三个图像plot(t,z,'b-');                          %画出噪声功率的信号title('噪声功率');                       %对图像主题的说明xlabel('t');                             %对横轴进行说明ylabel('z=y-x');                         %对纵轴进行说明subplot(2,2,4);                          %定义第四个图像plot(t,f,'m.');                          %画出噪声方差的信号title('噪声方差');                       %对图像主题的说明xlabel('t');                             %对横轴进行说明ylabel('f=var(z)');                      %对纵轴进行说明2.实验结果

2.实验结果

        计算出的噪声功率为0.100。

       比较图实验一与实验二的结果可以明显看出,实验二的结果的失真要远大于实验一的结果,这是因为输入信号的功率实际上小于10dBW,因此,虽然snr保持不变,但噪声功率实际上增大了,从计算出的噪声功率上也证明了这一点。

(三)实验三:计算实验一中输入信号的功率,根据snr添加高斯白噪声。

1.实验代码

%加性高斯白噪声信道-用awgn(x,snr,'measured')实现t=0:0.001:10;                            %产生时间矢量tx=sin(2*pi*t);                           %生成正弦信号xsnr=20;                                  %设定加性高斯白噪声的功率snry=awgn(x,snr,'measured');                %在正弦信号上叠加高斯白噪声z=y-x;                                   %计算噪声功率f=var(z);                                %计算噪声方差subplot(2,2,1);                          %定义第一个图像plot(t,x,'g-');                          %画出原始信号title('正弦信号x');                      %对图像主题的说明xlabel('t');                             %对横轴进行说明ylabel('x=sin(2Πt)');                   %对纵轴进行说明subplot(2,2,2);                          %定义第二个图像plot(t,y,'r-');                          %画出叠加了噪声后的信号title('叠加了高斯白噪声后的正弦信号y');    %对图像主题的说明xlabel('t');                             %对横轴进行说明ylabel('y=awgn(x,snr,‘measured’)');     %对纵轴进行说明subplot(2,2,3);                          %定义第三个图像plot(t,z,'b-');                          %画出噪声功率的信号title('噪声功率');                       %对图像主题的说明xlabel('t');                             %对横轴进行说明ylabel('z=y-x');                         %对纵轴进行说明subplot(2,2,4);                          %定义第四个图像plot(t,f,'m.');                          %画出噪声方差的信号title('噪声方差');                       %对图像主题的说明xlabel('t');                             %对横轴进行说明ylabel('f=var(z)');                      %对纵轴进行说明2.实验结果

     

 

 计算出的噪声功率为0.005。

      从本实验的结果图可以看出,添加噪声后的信号失真要小于实验一和实验二,这是因为添加的噪声功率根据实际的信号功率计算得到,而实际的信号的功率为0.5,因此,添加的噪声功率为0.005,与计算结果一致,并且要小于实验一和实验二的噪声功率。

(四)实验四:用randn函数实现实验三。

1.实验代码

%加性高斯白噪声信道-用randn函数实现t=0:0.001:10;                            %产生时间矢量tx=sin(2*pi*t);                           %生成正弦信号xsnr=20;                                  %设定加性高斯白噪声的功率snrpx=norm(x).^2/length(x);                 %计算信号x的功率pn=px./(10.^(snr./10));                  %根据snr计算噪声功率n=sqrt(pn)*randn(1,length(x));           %根据噪声功率产生相应的高斯白噪声序列y=x+n;                                   %在信号上叠加高斯白噪声subplot(2,2,1);                          %定义第一个图像plot(t,x,'g-');                          %画出原始信号title('正弦信号x');                      %对图像主题的说明xlabel('t');                             %对横轴进行说明ylabel('x=sin(2Πt)');                   %对纵轴进行说明subplot(2,2,2);                          %定义第二个图像plot(t,y,'r-');                          %画出叠加了噪声后的信号title('叠加了高斯白噪声后的正弦信号y');    %对图像主题的说明xlabel('t');                             %对横轴进行说明ylabel('y=x+n');                         %对纵轴进行说明subplot(2,2,3);                          %定义第三个图像plot(t,n,'b-');                          %画出噪声功率产生相应的高斯白噪声序列title('信号x的功率');                     %对图像主题的说明xlabel('t');                             %对横轴进行说明ylabel('n');                             %对纵轴进行说明subplot(2,2,4);                          %定义第四个图像plot(t,pn,'m.');                         %画出噪声功率title('噪声方差');                       %对图像主题的说明xlabel('t');                             %对横轴进行说明ylabel('pn');                            %对纵轴进行说明

2.实验结果

       计算出的噪声功率为0.005。

      比较本实验和实验三可以看出,两者的效果是一样的。最后计算出的噪声功率也证明了这一点。
      除了randn函数外,MATLAB还提供了wgn函数,也可以用来产生高斯白噪声;此外,rand函数用来产生在[0.1]上服从均匀分布的白噪声,要与randn函数区别开来。它们的用法分别与awgn函数和randn函数类似,我们可以参考MATLAB帮助手册。

五、实验收获

      通过本次实验,对awgn函数、randn函数、var函数、norm函数、length函数、sqrt函数有了一定的了解,学会了他们的用法,并对高斯白噪声信号有了一定的认识。

       总之,只要积极主动、细心、有耐心,注意理论联系实际、多做多学多问,就会有进步,就会学到更多知识。


http://chatgpt.dhexx.cn/article/5oJeISJu.shtml

相关文章

加性高斯色噪声信道

1 加性高斯色噪声信道 对于高斯白噪声,不同时刻的样本值是不相关的。为方便,在实际应用中通常将在信号上叠加高斯白噪声,对一些算法性能进行评估。依据评估结果,指导工程设计实现。在实际工程中,高斯白噪声的不相关性并…

噪声是什么?

1.噪声的概念 日常我们说的噪声是——“除了我想听到的声音”以外的声音,就是噪声。比如我想听A君讲话,但是B君和C君在旁边喋喋不休,他们俩说的话是“我不想听到的声音”,那么他们两个的声音就是噪声。而在电路中,噪声…

噪声和信噪比的转换(如何在数据集中添加噪声)

之前参考别人的博客写了一篇,后来用的过程中发现有问题,但是相关理论部分还是可以用的。 之前我写的:https://blog.csdn.net/Kathleen_yuan/article/details/89817487 别人的推论(推论1要加个条件才能用,就是信号强度…

乘性噪声理解

来自:乘性噪声图像处理方法研究 乘性噪声普遍存在于现实世界的图像应用当中,如合成孔径雷达、超声波、激光等相干图像系统当中.与标准加性高斯白噪声相区别,乘性噪声符合瑞利或伽玛分布函数.乘性噪声对图像的污染严重&…

噪声,白噪声,加性噪声和乘性噪声

对于一个学遥感或者说做图像处理的人来说,对噪声应该很敏感。但什么是加性噪声和乘性噪声,估计有部分并不很清楚。下面简要介绍之,内容摘自http://hi.baidu.com/%D2%B9%CB%AE%BE%A7%CD%F5%BD%A8%C7%E0/blog/item/137c42bf243d9c0f19d81f82.ht…

加性噪声和乘性噪声、均值滤波器、方框滤波器、中值滤波器、高斯滤波器、双边滤波器

1.滤波器的作用 滤波,也称平滑或者模糊,主要是为了减小图像噪声和伪影,同时在降低图像分辨率的时候,平滑也是必要的。 2.认识两种噪声 首先我们来认识两种常见噪声: 椒盐噪声,也就是夹杂在图像中的黑色…

java 抽奖 高并发处理_如何设计高并发下的抽奖?

关于抽奖,需要考虑的点有很多,这里稍微整理了下主要需要考虑以下三点: 用户抽奖次数限制 奖品数量限制 奖品发放的分布 中奖的概率的可控性 用户抽象次数限制 一个用户必须限制抽奖的次数,而同一个用户的并发几率其实是很小的,所以这里可以用悲观锁来控制用户的抽奖次数。 奖品…

使用Lua脚本实现高并发处理方案

我们使用 Lua 脚本可以很轻松构建出百万并发的应用系统。 由于 Tomcat 并发处理能力弱,nginx 并发处理能力强,我们可以在 nginx 上结合 Lua 脚本来高效处理业务逻辑,不用经过 Tomcat,就能够通过 Lua 脚本来操作 Redis、Kafka、My…

Android上实现高并发,可延迟处理

目录 1.Thread和线程池优缺点对比 1.1使用Thread 1.2使用线程池 2.实现Android高并发,可延迟处理的解决方案 2.1为什么不推荐无限制创建Thread执行 2.2实现多线程并发处理解决方案 2.3具体实现如下: 2.4模拟测试多线程并发及延迟执行 1.Thread和线…

01 Nginx的高并发处理

文章目录 Nginx的高并发处理1.为什么需要Nginx?2.Nginx概述2.1 Nginx介绍2.2 Nginx和apache的优缺点2.2.1 Nginx相对于apache的优点2.2.2 apache相对于Nginx的优点2.2.3 Tengine介绍 3. Nginx的下载与安装3.1 Nginx下载3.2 Nginx的源码安装3.2.1 安装前的准备工作3.…

浅谈 高并发 处理方案

愿打开此篇对你有所帮助。 文章目录 高性能开发十大必须掌握的核心技术I/O优化:零拷贝技术I/O优化:多路复用技术线程池技术无锁编程技术进程间通信技术 Scale-out(横向拓展)缓存异步高性能、高可用、高拓展 解决方案❇ 高性能的实…

分布式架构 高并发处理

分布式架构 高并发处理 高并发介绍 在同时或者极短时间内,有大量请求到达服务端,每个请求都需要服务端耗费资源进行处理,并做出相应反馈服务端比如同时开启进程数,能同时运行的线程数、网络连接数、CPU运算、I/O、内存都是有限&am…

iis高并发处理三

使用.NET开发的Web应用程序部署到IIS上后,当有大量用户并发访问,用户在访问的时候可能会出现页面打开慢或无法打开的情况,那么从服务器上的IIS上我们可以做以下调整,让应用支持10万级以内的并发访问。 1、调整IIS 应用程序池队列…

前端优化之高并发处理

大部分的高并发处理基本都是在后端处理,但是在部分特殊情况下,后端无法阻止用户行为,需要前端做配合。例如在抢购、秒杀等场景。 高并发是什么? 对此,我们首先需要简单的去了解一下,高并发是什么&#xff1…

机器学习中的核函数与核方法(是什么?为什么?怎么做?)

我们在学习机器学习的时候,总是会看到一个概念——核,然后看到一堆公式。但是为什么要核呢?核到底是啥玩意?云里雾里。接下来,我们将要把“核”这个东西的神秘面纱一点点揭开。 一、什么是“核函数” 我们都知道&…

【Kernel Method】Kernel Method核方法介绍

引言 核方法是20世纪90年代模式识别与机器学习领域兴起的一场技术性革命。其优势在于允许研究者在原始数据对应的高维空间使用线性方法来分析和解决问题,且能有效地规避“ 维数灾难”。在模式识别的特征抽取领域,核方法最具特色之处在于其虽等价于先将原…

通俗理解核方法(kernel function)

最近对核方法比较有兴趣,想了解一下,在网上查阅了很多资料,感觉说的很晦涩,没有理解,于是查看了李政轩老师的课程,对其有了一定程度上的理解,本博客目的为了记录,也为了加深理解。 …

电机选型及校核方法总结

序:原先最初是没打算写电机选型总结的,而是准备写一些关于数字信号处理相关的东西,但是我的一个朋友提醒了我。他说,现在网上关于数字信号处理的东西写的太多了,特别是基础的知识都写烂了,你再写也没人看&a…

核方法与核技巧

本文对核方法(kernel method)进行简要的介绍。 核方法的主要思想是基于这样一个假设:“在低维空间中不能线性分割的点集,通过转化为高维空间中的点集时,很有可能变为线性可分的” ,例如下图 左图的两类数据…

机器学习中的核方法(Kernel Method)

说到机器学习中的核方法(Kernel Method),大部分人应该是在学习SVM的时候认识到它或者听说它。它的基本思想是说,普通的SVM分类超平面只能应对线性可分的情况,而对于线性不可分的情况我们则需要引入一个Kernel,这个Kernel可以把数据集从低维映射到高维,使得原来线性不可分…