《通信原理》⽤matlab实现加性⾼斯⽩噪声信道实验
⽬录
⼀、实验名称
加性⾼斯⽩噪声信道
用subplot函数⼆、实验⽬的
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函数实现对加性⾼斯⽩噪声信号进⾏功率叠加、改变信号功率、计算噪声功率和⽅差,并对所有结果
编制程序使⽤awgn函数和randn函数实现对加性⾼斯⽩噪声信号进⾏功率叠加、改变信号功率、计算噪声功率和⽅差,并对所有结果做⼀个对⽐和分析。
(⼀)实验⼀:在正弦信号上叠加功率为-20dBW的⾼斯⽩噪声。
1.实验代码
%加性⾼斯⽩噪声信道-⽤awgn(x,snr)实现
t=0:0.001:10;                            %产⽣时间⽮量t
x=sin(2*pi*t);                          %⽣成正弦信号x
snr=20;                                  %设定加性⾼斯⽩噪声的功率snr
y=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;                            %产⽣时间⽮量t
x=sin(2*pi*t);                          %⽣成正弦信号x
snr=20;                                  %设定加性⾼斯⽩噪声的功率snr
y=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')实现
%加性⾼斯⽩噪声信道-⽤awgn(x,snr,'measured')实现
t=0:0.001:10;                            %产⽣时间⽮量t
x=sin(2*pi*t);                          %⽣成正弦信号x
snr=20;                                  %设定加性⾼斯⽩噪声的功率snr
y=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.实验结果