Files
josh-blog-source/source/_posts/2020-11-27-matlab-awgn.md
T
2023-04-15 23:00:00 +08:00

9.3 KiB
Raw Blame History

title, tags, categories, mathjax, copyright, comments, abbrlink, date
title tags categories mathjax copyright comments abbrlink date
MATLAB 函数 —— awgn
MATLAB
翻译
高斯白噪声
MATLAB
函数用法
信号处理
噪声
true true true 2f6db45b 2020-11-27 01:15:12

awgn:在信号中添加高斯白斯噪声

语法

out = awgn(in,snr)

out = awgn(in,snr,signalpower)


out = awgn(in,snr,signalpower,randobject)

out = awgn(in,snr,signalpower,seed)


out = awgn(___,powertype)

说明

out = awgn(in,snr) 将高斯白噪声添加到矢量信号 in 中。此条语句假定 in 的功率为 0 dBW。

out = awgn(in,snr,signalpower) 接受以 dBW 为单位的输入信号功率值。要使该函数在添加噪声之前测量 in 的功率,请将 signalpower 指定为 measured。举例

out = awgn(in,snr,signalpower,randobject) 接受满足前述两条语法,外加随机数流对象的输入组合以生成满足正态分布的随机噪声样本。有关产生可重复噪声样本的信息,请参见提示。举例

out = awgn(in,snr,signalpower,seed) 指定用于初始化正态随机数生成器的种子值,该种子在添加高斯白噪声到输入信号时使用。有关产生可重复噪声样本的信息,请参见提示。

out = awgn(___,powertype) 除了前面任何语法中的输入自变量之外,还将可信号和噪声功率类型指定为 dB 或 linear。

有关 SNR 与噪声相对功率的其他度量(例如 E_\mathrm{S}/N_0 和 $E_\mathrm{b}/N_0$)之间的关系,请参阅 AWGN 信道噪声级别。

示例

将 AWGN 添加到锯齿波

创建一个锯齿波。

t = (0:0.1:10)';
x = sawtooth(t);

添加高斯白噪声并绘制结果。

y = awgn(x,10,'measured');
plot(t,[x y])
legend('Original Signal','Signal with AWGN')

AWGN 信道中的常规 QAM 调制

在存在高斯噪声的情况下,使用非矩形 16 元星座发送和接收数据。绘制噪声星座图,并针对两种不同的信噪比估算误符号率(SER)。

根据电话线调制解调器的 V.29 标准创建一个 16-QAM 星座。

c = [-5 -5i 5 5i -3 -3-3i -3i 3-3i 3 3+3i 3i -3+3i -1 -1i 1 1i];
M = length(c);

生成随机符号。

data = randi([0 M-1],2000,1);

使用 genqammod 函数调制数据。由于星座图不是矩形,因此必须进行常规 QAM 调制。

modData = genqammod(data,c);

使信号通过具有 20 dB 信噪比(SNR)的 AWGN 信道。

rxSig = awgn(modData,20,'measured');

显示接收信号的星座图和参考星座图。

h = scatterplot(rxSig);
hold on
scatterplot(c,[],[],'r*',h)
grid
hold off

使用 genqamdemod 函数解调接收到的信号。计算误符号数和误符号率。

demodData = genqamdemod(rxSig,c);
[numErrors,ser] = symerr(data,demodData)
numErrors = 1
ser = 5.0000e-04

使用具有 10 dB SNR 的 AWGN 信道重复传输和解调过程。计算降低 SNR 后的误符号率。不出所料,当 SNR 降低时,性能会下降。

rxSig = awgn(modData,10,'measured');
demodData = genqamdemod(rxSig,c);
[numErrors,ser] = symerr(data,demodData)
numErrors = 462
ser = 0.2310

用 RandStream 产生可重复的 AWGN

使用 RandStream 和 reset 对象函数生成高斯白噪声相加的结果。

将 X 的功率指定为 0 dBW,添加噪声以产生 10 dB 的 SNR,并利用本地随机流。

S = RandStream('mt19937ar','Seed',5489);
sigin = sqrt(2)*sin(0:pi/8:6*pi);
sigout1 = awgn(sigin,10,0,S);

将 AWGN 添加到 sigin。 使用 isequal 比较 sigout1 和 sigout2。 当不重置随机流时,输出不相等。

sigout2 = awgn(sigin,10,0,S);
isequal(sigout1,sigout2)
ans = logical
   0

重置随机流对象,将对象置为初始状态,然后再将 AWGN 添加到 sigout1。将 AWGN 添加到 sigin 并将 sigout1 与 sigout3 比较。 重置随机流后,输出相等。

reset(S);
sigout3 = awgn(sigin,10,0,S);
isequal(sigout1,sigout3)
ans = logical
   1

输入参数

in - 输入信号

输入信号,指定为标量,向量或数组。假定输入信号的功率为0 dBW。

数据类型:double 复数支持:是

snr - 信噪比(SNR)

信噪比(以 dB 为单位),指定为标量。

{% note info %}

注意:

加上噪声后,此函数会将相同的 snr 应用于完整输入信号的所有元素。阵列输入信号没有独立通道的概念。 要独立考虑多个频道,请参阅 comm.AWGNChannel。

{% endnote %}

数据类型:double

signalpower - 信号功率

信号功率,指定为标量或 measured。

  • 当 signalpower 为标量时,该值用作 in 的信号电平,以便根据 snr 的值确定适当的噪声电平。

  • 当 signalpower 为 measured 时,将计算 in 的信号电平,以根据 snr 的值确定适当的噪声电平。

{% note info %}

注意:

当指定 measured 时,此函数将使用完整输入信号的所有元素来计算信号功率。在计算功率时,阵列输入信号没有独立通道的概念。

{% endnote %}

数据类型:double

randobject - 随机数流对象

随机数流对象,指定为 RandStream 对象。 随机流对象的状态确定 randn 函数产生的数字序列。使用 reset (RandStream) 函数及其属性来配置随机流对象。

wgn 使用 randn 生成正常的随机噪声样本。randn 函数使用 RandStream 对象中的一个或多个统一值来生成每个正态值。

有关产生可重复噪声样本的信息,请参见提示。

seed - 随机数生成器种子

随机数生成器种子,指定为标量。

powertype - 信号功率单元

信号功率单元,指定为 dB 或 linear。默认为 dB。

  • 当功率类型为 dB 时,以 dB 为单位测量 snr,以 dBW 为单位测量信号功率。

  • 当功率类型为 linear 时,snr 以比率进行测量,signalpower 以瓦特为单位。

有关 SNR 与噪声相对功率的其他度量(例如 E_\mathrm{S}/N_0 和 $E_\mathrm{b}/N_0$)之间的关系,请参阅 AWGN 信道噪声级别。

输出参数

out - 输出信号

输出信号,以标量,向量或数组形式返回。 返回的输出信号是添加了高斯白噪声的输入信号。

提示

  • 要生成可重复的高斯白噪声样本,请使用以下技巧之一:

    • 提供静态 seed 值作为 awgn 的输入。

    • 在将 randobject 传递为 awgn 的输入之前,请对 randobject 使用 reset (RandSteam) 函数。

    • 将处于已知状态的 randobject 提供给 awgn。有关更多信息,请参见 RandStream。

扩展功能

C/C++ 代码生成

使用 MATLAB® Coder™ 生成 C 代码和 C++ 代码。

用法说明和限制:

支持代码生成,但包括 RandStream 对象的语法除外。

版本历史

在 R2006a 之前推出

另请参阅

函数

RandStream | bsc | randn | wgn

对象

comm.AWGNChannel

话题

AWGN Channel Noise Level

原文参考:https://ww2.mathworks.cn/help/comm/ref/awgn.html