前言
在通信系统仿真中,经常需要用到加性高斯白噪声信道。MATLAB中可以使用randn函数生成高斯随机变量,作为高斯白噪声叠加到有用信号上,从而仿真加性高斯白噪声信道对信号的影响。本文给出MATLAB仿真代码。
一、仿真代码
代码如下:
f = 1; % 信号频率,单位Hz
fs = 1000; % 采样率,单位samples per second
T = 10; % 信号时长,单位s
t = 0:1/fs:T;
x = sin(2*pi*f*t);
px = norm(x).^2/length(x); % 计算信号x的功率,噪声功率=0.5,单位W
snr = 20; % 信噪比,dB形式
pn = px./(10.^(snr./10)); % 根据snr计算噪声功率,单位W
n = sqrt(pn) * randn(1,length(x)); % 根据噪声功率产生相应的加性高斯白噪声序列
y = x + n; % 信号叠加高斯白噪声,生成有噪信号
figure()
subplot(2,1,1);
plot(t,x);
ylim([-2 2]);
grid on;
title('正弦信号x')
subplot(2,1,2);
plot(t,y);
ylim([-2 2]);
grid on;
title('叠加了加性高斯白噪声后的正弦信号')
% 计算噪声功率(也即噪声方差)
var(n) % 噪声功率=0.005,是信号功率的1%
说明:当信噪比设置为20dB时,意味着,信号功率是噪声功率的100倍。上述代码中,信号的功率为0.5W,所以最终得出的信号功率为0.5/100=0.005W。
二、仿真结果
仿真结果如下:
后记
本文为了说明加性高斯白噪声信道的底层原理,帮助大家理解加性高斯白噪声信道是如何工作的,所以使用了randn函数进行实现。在MATLAB中,有专门的加性高斯白噪声信道函数awgn,后续将进行介绍。