如何在 MATLAB 中生成带限高斯白噪声?

信息处理 matlab 噪音 高斯
2021-12-20 00:20:51

在一些论文中,我读到加性噪声是带限高斯白。
如何使用 MATLAB 模拟这种类型的噪声?

4个回答

您将通过首先生成白噪声,然后将其过滤到您想要的带宽来生成带限高斯噪声。举个例子:

% design FIR filter to filter noise to half of Nyquist rate
b = fir1(64, 0.5);
% generate Gaussian (normally-distributed) white noise
n = randn(1e4, 1);
% apply to filter to yield bandlimited noise
nb = filter(b,1,n);

就像对 Jason 的回答的一个小补充:通常您需要生成具有给定方差的带限噪声。您可以将此代码添加到 Jason 的答案中给出的代码中:σ2

var = 3.0;  % just an example  
scale = sqrt(var)/std(nb);
nb = scale*nb;  % nb has variance 'var'

请注意,您必须在过滤后进行缩放,因为通常过滤器会改变噪声方差。

每次生成离散噪声样本(例如使用 MATLAB 的randn/ rand)时,实际上都会生成带限噪声。

您需要做的就是将离散样本的方差调整为据称从中提取这些样本的“连续”噪声的方差。

给定具有方差的速率对其进行采样,您应该生成方差为σcn2δ(t)fsfsσcn2

的理想 LPF 滤波器,此结果是有效的fs/2

此处给出了完整的描述 -如何在特定带宽的通信系统中模拟 AWGN(加性高斯白噪声)

为什么不能使用StackOverflow 中提到的方法:如何在频率范围内产生噪声numpy

它从所需的频率开始,然后向后工作以构建信号,而不是过滤。它使用 python 代码,但也链接到原始的 Matlab 代码。

这样做有什么缺点吗?