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


16

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


在连续时间系统中,带宽受限的白噪声(无论是否为高斯)的概念都得到了明确定义和充分理解。对于离散时间系统,问题更加复杂,您需要考虑什么是频带限制以及如何将其与奈奎斯特频率进行比较。
Dilip Sarwate

2
@DilipSarwate:对我来说,“有限频带白噪声”是一种矛盾。:-)
Peter K.

@PeterK。带限白噪声的概念主要用于带通系统中,在这种系统中,通带外的噪声特性无关紧要,而通带的噪声与通过理想的带通滤波器(通过的频带正好通过)的白噪声没有区别。是通带。它只是白噪声(没有任何关于频带限制的贬义评论),是一种矛盾的情绪。另请参阅,在Jason R的回答(我不同意)之后,DRazick的评论(在现场)。
Dilip Sarwate

1
@DilipSarwate:感谢您的解释。我明白了,但我仍然认为这是一个非常差的术语选择。对我来说,“带通滤波的白噪声”更为精确,但我想它最终会出现在同一位置。
Peter K.

1
@PeterK。不幸的是,“带通滤波的白噪声”通常表示JasonR的答案中描述的过程。从白噪声开始,通过具有传递函数滤波器对其进行滤波,以得到与| | | | | | | | | | | | | | | H f | 2。带限白噪声相同,只是我们坚持认为H f 必须是理想带通滤波器的传递函数。白噪声的关键点是,只要我们必须使信号保持在频带内,我们就不能将信号放在适用于带限白噪声的噪声附近。H(f)|H(f)|2H(f)
Dilip Sarwate

Answers:


19

首先会产生白噪声,然后将其过滤到所需的带宽,从而产生带宽受限的高斯噪声。举个例子:

% 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);

我一直想知道这一点,但是如果完成了这样的事情,那么高斯又会如何呢?我不认为此时此刻PDF完全没有...
Spacey 2013年

8
高斯随机变量的特点之一是两个独立的高斯RV的和也是高斯分布的。由于输入噪声是白色的,因此您可以将滤波器输出处的每个样本视为许多独立的高斯随机变量的总和(其中每个RV的方差取决于输入噪声方差和相应滤波器抽头的值)。因此,滤波器输出处的样本也是高斯分布的。但是,噪声显然不再是白色的,因为在滤波器输出的连续采样之间存在相关性。
Jason R

Wikipedia上对该属性进行了更详细的描述。请注意,即使输入噪声是彩色的,该属性仍然保持不变(请参见“相关随机变量”部分)。
Jason R

1
脸庞。当然。
Spacey 2013年

3
但是这种方法不会产生白噪声。无需应用滤波器,每个离散采样噪声的带宽都从一开始就受到限制。
罗伊2013年

9

σ2。您可以将此代码添加到Jason答案中给出的代码中:

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

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


2
n=0N|h[n]|2=1个

@Matt不错!
Spacey 2013年

4

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

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

σCñ2δŤFsFsσCñ2

Fs/2

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



2

一个为什么不能使用中提到的方法这个帖子

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

这样做有什么弊端吗?


1
查看原始的matlab代码,它适用于块大小n(即fft长度)。如果我需要2n个样本,则可以将fft长度加倍,这比2 fft还要多。如果您执行2个单独的块,则从第一个块到第二个块将有不连续的过渡。您可以使用一个窗口来平滑过渡,但是接下来您需要做两个以上的步骤,以避免扇形化时间序列。使用过滤器方法,一旦过滤器处于稳定状态,就可以根据需要提供随机数。过滤方法的处理量增加呈线性比例。

0

我意识到此问题在当前视图中突然出现,因为@Drazick修改了他/她的2013年答案。

如果您生成一个良好的统一pdf伪随机数X(例如,使用rand()frand(),如果它是一个好的版本)范围从0到1(即0X<1个),那么如果您进行12次运算,则将所有12个据认为独立且不相关的值相加,然后从该总和中减去6.0,您将获得非常接近单位方差和零均值高斯随机数的值。如果统一的pdf伪随机数为“良好”(即它们表现出彼此独立性),则总和将为“白色”,因为您可以获得离散时间信号。

当然,即使对于模拟信号,“白噪声”也是误称。一直到平坦无穷大的“功率信号”也具有无限的功率。如上所述生成的虚拟高斯和“白”信号具有有限的功效(方差为1)和有限的带宽(表示为单面)为奈奎斯特。(因此,“功率谱密度”或每单位频率的功率为1 /奈奎斯特。)可按比例缩放并抵消它。

我想我可以稍后再编辑它,并添加一些类似于C的伪代码以明确显示这一点。


-1

产生全光谱白噪声然后对其进行过滤,就像要将房子的墙壁粉刷成白色,因此,您决定将整个房子粉刷成白色,然后将除墙壁以外的所有房屋粉刷回来。是白痴。(但是在电子学上有道理)。

我编写了一个小型C程序,该程序可以在任何频率和任何带宽下产生白噪声(比方说,中心频率为16kHz,“宽”频率为2 kHz)。不涉及过滤。

我做的很简单:在主(无限)循环内,我在中心频率+/-上产生一个正弦波,该带宽介于-半带宽和+半带宽之间,然后我将该频率保留为任意数量的样本(粒度),并且结果是:

在中心频率为16kHz时白噪声2kHz宽

在中心频率为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
    }


}

1
STFT在整个频段上都不平坦。您尚未显示为什么您的技术有任何优势。顺便说一句,大多数涂料都是灰白色,然后与颜料混合。橙色涂料不是仅使用橙色成分制成的。产生白噪声没有任何额外的工作。

@StanleyPawlukiewicz在电子领域,您很严厉,因为噪声发生器和滤波器是两个非常简单的“对象”。在编程中,过滤器在指令数量上的复杂性不仅仅是生成所需的数据。因此,如果您有时间紧迫的应用程序,那么编程是更可取的方法。如果您投票否决,我建议您再考虑一下。
Zibri

1
你的声音不好。整个频段的频谱并不平坦。快速调用超越函数并不比过滤快。您的论点没有根据

1
实际上,带内波纹是设计参数。说它们在中心频率处达到峰值也是错误的

1
由于您的技术很容易修改,为什么不编写自己的正弦波例程而不是链接到一个例程并声称您的代码不太复杂,然后将其与biquad进行比较。添加时,定点版本如何。您可能还会考虑随着样本数量的增加,技术将如何扩展
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.