在某些论文中,我读到加性噪声是带限高斯白。
如何使用MATLAB模拟这种类型的噪声?
在某些论文中,我读到加性噪声是带限高斯白。
如何使用MATLAB模拟这种类型的噪声?
Answers:
首先会产生白噪声,然后将其过滤到所需的带宽,从而产生带宽受限的高斯噪声。举个例子:
% 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答案中给出的代码中:
var = 3.0; % just an example
scale = sqrt(var)/std(nb);
nb = scale*nb; % nb has variance 'var'
请注意,您必须在滤波后进行缩放,因为通常滤波器会改变噪声方差。
每次生成离散噪声样本时(例如,使用MATLAB的randn
/ rand
),实际上都会生成一个带限噪声。
您需要做的就是将离散样本的方差调整为据称是从这些样本中获取的“连续”噪声的方差。
。
此处提供完整描述- 如何在特定带宽的通信系统中模拟AWGN(加性高斯白噪声)。
我意识到此问题在当前视图中突然出现,因为@Drazick修改了他/她的2013年答案。
如果您生成一个良好的统一pdf伪随机数(例如,使用rand()
或frand()
,如果它是一个好的版本)范围从0到1(即),那么如果您进行12次运算,则将所有12个据认为独立且不相关的值相加,然后从该总和中减去6.0,您将获得非常接近单位方差和零均值高斯随机数的值。如果统一的pdf伪随机数为“良好”(即它们表现出彼此独立性),则总和将为“白色”,因为您可以获得离散时间信号。
当然,即使对于模拟信号,“白噪声”也是误称。一直到平坦无穷大的“功率信号”也具有无限的功率。如上所述生成的虚拟高斯和“白”信号具有有限的功效(方差为1)和有限的带宽(表示为单面)为奈奎斯特。(因此,“功率谱密度”或每单位频率的功率为1 /奈奎斯特。)可按比例缩放并抵消它。
我想我可以稍后再编辑它,并添加一些类似于C的伪代码以明确显示这一点。
产生全光谱白噪声然后对其进行过滤,就像要将房子的墙壁粉刷成白色,因此,您决定将整个房子粉刷成白色,然后将除墙壁以外的所有房屋粉刷回来。是白痴。(但是在电子学上有道理)。
我编写了一个小型C程序,该程序可以在任何频率和任何带宽下产生白噪声(比方说,中心频率为16kHz,“宽”频率为2 kHz)。不涉及过滤。
我做的很简单:在主(无限)循环内,我在中心频率+/-上产生一个正弦波,该带宽介于-半带宽和+半带宽之间,然后我将该频率保留为任意数量的样本(粒度),并且结果是:
在中心频率为16kHz时白噪声2kHz宽
伪代码:
while (true)
{
f = center frequency
r = random number between -half of bandwidth and + half of bandwidth
<secondary loop (for managing "granularity")>
for x = 0 to 8 (or 16 or 32....)
{
[generate sine Nth value at frequency f+r]
output = generated Nth value
}
}