如何生成具有给定功率谱密度的 AWGN

信息处理 功率谱密度 高斯
2022-02-05 09:39:07

我有点不确定加性高斯白噪声的产生,所以如果我做得正确,我会很高兴收到你的来信。

我的目标是生成与 -135 dbm/Hz 的本底噪声相对应的时域噪声

我采用的程序如下:

1 - 以 dbm/Hz 为单位将本底噪声转换为 Watts/Hz
2 - 从 PSD 获得平均总功率。
3 - 使用该平均总功率生成高斯噪声
4 - 对高斯噪声进行 FFT 并估计周期图,以验证它是否确实生成了具有正确 PSD 的噪声

以下是我如何执行上述 4 个步骤:

1 -

Swatts=(10SdBm10)103
在哪里Swatts是以瓦特/赫兹为单位的 PSD 和SdBm是以 dBm/Hz 为单位的 PSD。

2 - 平均总功率由下式给出

Pn=SwattsB,
在哪里B是带宽

3 - 生成randn MATLAB 函数乘以Pn.

4 -
4.1 对信号进行 FFT,比方说,X(k).
4.2 得到能谱密度(ESD)为|X(k)|2N
4.3 通过简单地将 ESD 除以得到 PSDN(FFT 长度) 4.4 我不简单地绘制10log10(PSD103),因为我相信这会以 dBm/副载波为单位绘制 PSD。而不是这个,我绘制10log10(PSDtone spacing103), 试图将图绘制为 dBm/Hz。

下面的代码是我正在使用的。请指出我是否做错了。

clear all
clc

bandwidth = 106e6;                          % in Hz
sampleFrequency = 2*bandwidth;              % in Hz
noiseFloor = -135;                          % in dBm/Hz
awgnPsd = (10.^(noiseFloor/10))*1e-3;       % in Watts/Hz
noisePower = awgnPsd*2*bandwidth;           % in Watts

% Generate noise signal:
N = 4096;           % signal length
nSymbols = 1000;     % number of symbols with length N to be generated
noise = randn(N,nSymbols)*sqrt(noisePower);

% Verify PSD
toneSpacing = sampleFrequency/N;        % DFT tone spacing           
ESD = mean(abs(fft(noise,N)).^2)/N;     % Energy spectral density
PSD = ESD/N; 


% plot PSD
figure
plot(10*log10((PSD/toneSpacing)*1e3))
1个回答

这是一个可能有帮助的 Matlab 片段。您应该能够将结果应用于您最喜欢的 PSD 例程,以查看频域中的 dbm/Hz。

% create complex noise with a desired dBm/Hz
fs=1e6;             % whatever you want
N=1e5;              % # samples of noise
R=50;               % ohms
dbm_hz = -135;      % goal
bw = fs;            % complex noise with BW = sample rate
dbm = dbm_hz + 10*log10(bw);
dbw = dbm - 30;
watts = 10^(dbw/10);
vrms = sqrt(watts * R);
n = randn(N,1) + j*randn(N,1);
n = vrms * n / std(n);
meas_dbm_hz = 10*log10(sqrt(mean(n.*conj(n)))^2 / R) - 10*log10(bw) + 30