MATLAB 中的 awgn 函数

信息处理 matlab 离散信号 噪音 信号功率 渠道
2022-02-06 11:28:10

我在 MATLAB 中使用 ' awgn(input_signal,snr_db,'measured') '函数向输入信号添加白噪声。
这是简化的脚本。零填充输入信号是否会影响 awgn 函数的行为?

clc;clear all;close all;

data = randi([0 3], 1, 2^12); % Generate data
qam_mod = qammod(data, 4);  % Modulate data
qam_mod_u = upsample(qam_mod,64); % Upsample

ch_out_interplt = awgn(qam_mod_u, 5, 'measured');
ch_out_no_interplt = awgn(qam_mod, 5, 'measured');

ch_out_downsample = downsample(ch_out_interplt,64); % Downsample

scatterplot(ch_out_downsample); title('with up, down sampling, 5 dB SNR');
scatterplot(ch_out_no_interplt); title('no up, down sampling, 5 dB SNR');

有零填充和没有零填充的散点图是不同的。

  1. 这是否意味着 awgn 函数的行为取决于零填充(信号的长度)?
  2. ' awgn(input_signal,snr_db,'measured') '函数如何计算输入信号功率?
  3. 如何使功率计算与输入信号的长度无关?
  4. 有没有更好的方法来模拟 MATLAB 中的 awgn 噪声?

加入 awgn 噪声后的 QPSK 信号,无插值

添加 awgn 噪声后的 QPSK 信号,带插值

1个回答

这是否意味着 awgn 函数的行为取决于零填充(信号的长度)?

是的,它确实取决于信号的长度。

'awgn(input_signal,snr_db,'measured')'函数如何计算输入信号功率?

对于长度为函数计算功率为Nx[n]awgn1Nn=1N|x[n]|2

如何使功率计算与输入信号的长度无关?

上述定义将定义为信号的长度,包括零值样本。如果您不想将它们计入您的信号长度,那么您需要有一个有效的信号长度,它只计算非零样本。NN0

sigPower = mean(abs(qam_mod_u(qam_mod_u ~= 0)).^2);
noisePower = sigPower/10^(SNRdB/10);
noise = sqrt(noisePower/2)*(randn(size(qam_mod_u)) + 1j*randn(size(qam_mod_u)));
ch_out_interplt = qam_mod_u + noise;

有没有更好的方法来模拟 MATLAB 中的 awgn 噪声?

awgn只要您了解它在做什么,该功能就可以了。对于信号关闭和打开的情况,由于您的问题的原因,您自己做噪音可能更容易。您也可以通过将所有这些都放在您自己的函数中来使其更容易。