您的问题是一个有趣的项目,您可以自己研究它。好吧,也许在您的朋友和 SE 社区的帮助下。而且,正如您的问题一样,首先从(1)均匀分布和(2)高斯分布生成样本。我会陪你迈出第一步。
首先,我为每种类型的噪声生成 1,048,576 个样本的波形。在图片中,显示了 512 个样本的范围。
均匀的噪音
高斯噪声
这些图片看起来非常相似。
然后我为每种类型的噪声计算波形的 FFT,并绘制噪声波形(蓝色图)和相应 FFT(橙色图)的值的分布。
均匀的噪音。蓝色的样本值分布,橙色的 FFT 值分布
高斯噪声。蓝色的样本值分布,橙色的 FFT 值分布
我不太明白您所说的“平坦频谱”是什么意思。这两个信号都是随机过程的实现。但它们在这里,样本值分布图中的趋势明显背叛了它们的起源。同时,两个信号的 FFT 值(FFT 值的实部)分布具有明显的高斯分布外观。为了准备好理解这种行为的解释,我建议你研究概率论中心极限定理的证明之一,即使用傅里叶变换的证明。有了这些知识,您甚至可以自己找到解释。如果不是,那么在遵循文献中的解释时了解它仍然是有用的。
另请注意,在 FFT 值的分布图中,中心峰值是零时插值分布的两倍。
更新
在计算中对白噪声进行建模时,在某些条件下,您可以自由选择任何可以为模拟中的样本生成随机值的方法。生成的值可以遵循均匀、高斯、任何其他均值为零的分布。即使是抛硬币随机生成器,以 50/50 的机会随机产生 +ampl/-ampl,也适合。在这些“某些条件”中,刚刚提到了一个——平均值为零。另一个要求是采样频率高,越高越好。在相邻信号样本之间的任何样本间隔内,您必须生成大量噪声样本,密集地填充时间间隔。这个公认的不明显的过程是由“白噪声信号”的本质所证明的:它是一个随机过程,不是经典函数。在普通语言中,这意味着我们无法知道任何给定时刻的噪声值,但是可以在实验中“测量”任意小时间间隔内的平均噪声值,或者在遵循已知公式的计算中“模拟”,这“已知公式”来自概率论的中心极限定理。
使用这种方法,信号采样(以及奈奎斯特)频率远低于噪声采样频率。为避免噪声频域中的混叠,您必须对噪声进行带宽限制。在此过程中,噪声在相邻信号样本之间的时间间隔内以取决于所使用滤波器的方式进行平均。受中心极限定理的影响,平均噪声值趋向于接近高斯分布——平均过程中使用的样本越多,分布越接近高斯分布。但这一事实表明了直接从高斯分布生成样本并避免在远高于信号采样频率的频率下进行过采样的想法。
生成具有高斯分布的随机变量的方法在 matlab、numpy 和 scipy(我相信)中很容易获得。在通用计算机语言中,您可以轻松实现Marsaglia 极坐标法或 Box–Muller 变换。
总而言之,您问题中的“事实证明......”陈述是中心极限定理的推论。您可以看到它遵循中心定理证明,或者甚至更好地生成多个 iid 随机变量并计算它们总和的分布,用增加的随机变量数量重复该过程并检查结果。
- 通过 (1) 产生的噪声原则上不会受到混叠的影响,但如果使用不适当的奈奎斯特频率进行计算,则计算出的频谱可能会出现混叠。在信号采样频率固定奈奎斯特频率的情况下,您必须调整噪声采样频率。
- 混叠通过一种称为Spectral Leakage的现象表现出来。
- 导致信号值超过程序中使用的变量类型的最大值的标准偏差确实切断了分布的尾部。使用 float 而不是 UINT16 是对抗这种斩波的安全选择。
数值实验:噪声产生
从采样到 65536 个样本的数据数组中的无声(零值)信号开始。首先,添加一个均匀分布的噪声,每个信号样本一个噪声样本。此处显示了前 256 个实现样本(纯噪声):
将样本值的分布与等幂的高斯分布进行比较:
实现的FFT:
实现的PSD:
实现 256 个样本的放大 PSD:
回到原来的零值纯信号,再次添加均匀分布的噪声,但这次每个信号样本插入两个噪声样本。为了产生以原始纯信号奈奎斯特频率采样的噪声信号的实现,我们将相邻的样本对相加。为了保持噪声功率恒定,我们通过过采样的平方根 (=2) 来缩小噪声幅度。新实现的前 256 个样本如下所示:
将样本值的分布与等幂的高斯分布进行比较:
只需进行两次过采样,该分布就已经接近高斯分布,如两个分布的差异图中所示:
实现 256 个样本的放大 PSD:
对于纯均匀噪声的图没有太大的不同。
最后,用每个信号样本的 4096 个噪声样本的过采样计算: 平均后的实现(前 256 个样本):
两种分布,均匀折叠和高斯分布的区别:
实现的PSD:
AWGN 更新:
短语“但如果使用不适当的奈奎斯特频率进行计算,则计算出的频谱可能会出现混叠”可能会导致混淆。我将尝试在不明确引用别名的情况下对其进行解释(别名仍然隐含地通过引用泄漏,但这些可能比我的解释更值得信赖)。
反过来看:当您尝试生成噪声时,您为每个声音样本生成一个随机均匀分布的变量(生成噪声的采样频率为 44.1KHz),PSD 也是随机且非常不均匀的。为了近似白噪声的 PSD 行为,您可以诉诸 N 过采样,将采样和奈奎斯特频率增加到 N·44.1KHz:您将在 44.1KHz 采样的每个声音值分布在新 (N·sample_count) 的相邻 N 个样本中噪声样本的大小向量(数组)并添加均匀噪声。
std::random_device rd;
std::mt19937 gen(rd());
std::uniform_real_distribution<double> unirand(-1.0, 1.0);
for(int isample=0; isample < vecSig.size()/*44.1-samples_count*/; ++isample)
for(int ix=0; ix < N; ++ix)
vecOversampled[isample*N + ix] = vecSig.at(isample) + unirand(gen);
在 N 个相邻频率区间上平均的该信号的 PSD 更加均匀。看到高于 44.1KHz 的频率是某种计算的拐杖,我们从信号中过滤掉这些频率,并得出与原始 44.1KHz 样本相加的高斯分布随机变量的等价物,因为中心极限定理适用于平均样本值。唉,滤波后的信号的 PSD 又是参差不齐的,因为 PSD 计算是非线性操作,并且 PSD 图只能通过扩大的频率仓大小来平滑。但是这次我们知道这种不规则是由于窗口功能造成的,而且我们有一个在进程中泄漏而不是在泄漏出去。
这种 PSD 不规则性是对白噪声“信号”进行采样的结果。
总结:为了节省内存和CPU时间,可以不用过采样,一开始就产生高斯分布的噪声
std::random_device rd;
std::mt19937 gen(rd());
std::normal_distribution<double> normalrand(-1.0/std::sqrt(M_PI), 1.0/std::sqrt(M_PI));
for(int isample=0; isample < vecSig.size()/*44.1-samples_count*/; ++isample)
vecSigPlusNoise[isample] = vecSig.at(isample) + normalrand(gen);
并得到与过采样的均匀分布噪声相同的结果。在使用均匀分布的随机变量对噪声进行建模时,您不能不进行过采样——如果不深入研究概率论,我建议您参考加性白噪声定义 ( https://en.wikipedia.org/wiki/White_noise )
在离散时间,白噪声是一种离散信号,其样本被视为一系列零均值和有限方差的序列不相关随机变量;白噪声的单一实现是随机冲击。根据上下文,可能还要求样本是独立的并且具有相同的概率分布(换句话说,独立且相同分布的随机变量是白噪声的最简单表示)。特别是,如果每个样本都具有均值为零的正态分布,则该信号称为加性高斯白噪声。[我的重点]
而非过采样均匀分布噪声模型中的每个样本都具有均匀分布。
我认为在这个阶段您需要为您的项目进行 AWGN 模拟。
这可能只是一种直觉,即“理想”噪声模型必须在越来越小的尺度上表现出相似的模式,即所谓的自相似特征。您会看到,如果您以某种精细的频率分辨率从均匀分布或任何其他非高斯分布的噪声开始,然后将这种噪声“缩小”到更大、更粗的尺度,您会得到趋向于接近高斯分布的噪声-分布噪声——而高斯分布噪声在任何缩放分辨率下再现样本值的高斯分布(使用适当调整的标准偏差参数)。这种自相似特征通常用于与噪声相关的开发项目中的分析和计算。一旦白噪声模型适用,
除了缩放频率分辨率之间噪声值分布的自相似性之外,高斯分布与任何其他分布的另一个论据可以从直接构建傅里叶谱以满足“平坦 PSD”要求的过程中得出。
给出最平坦、实际上恒定的 PSD 的频率的直接函数是恒定的,即与频率无关。不幸的是,傅里叶频谱与频率无关的信号是一个δ函数,而δ函数是除了噪声之外的一切。
为了赋予恒定傅立叶频谱类似噪声的特性,可以按照您在时域中产生噪声的方法:将频谱的每个样本设为随机均匀分布的变量。但是,正如我们所见,以这种方式构建的傅里叶谱给出了具有高斯分布样本值的时域实现!
我们已经讨论了两种模拟白噪声的可能性。在一种方法中,我们从时域中的均匀分布样本开始,并在频域中具有高斯分布的样本。在另一种方法中,我们从频域中的均匀分布样本开始,并在时域中具有高斯分布的样本。有趣的是,这意味着在频域中存在高斯分布样本的实现,其中傅里叶逆变换过程在时域中给出了均匀分布的样本。但是这些实现在信号空间中的份额可以忽略不计(一组测量零),并且对于绝大多数信号实现,从时(频)域中的高斯分布样本值开始,获得频(时)域中的高斯分布值。
高斯分布似乎是生成白噪声实现的最自然的分布。在信号空间中,非高斯分布白噪声实现的子空间测量为零。