diff --git a/8.md b/8.md index 28ffa42cc479c7f1b34786087c2fbaf9933517ba..81545fee86bee559c5ea3734c44525b09f5990a1 100644 --- a/8.md +++ b/8.md @@ -20,7 +20,7 @@ + 一些物理量的重尾分布:例如,在冷冻的水中,晶体尺寸的分布是幂律的。 -+ 呈现粉红噪音的时间变化。复合信号可以分解为它们的频率分量。在粉红噪声中,低频分量比高频分量功率更大。具体而言,频率`f`处的功率与`1 / f`成正比。 ++ 呈现粉红噪声的时间变化。复合信号可以分解为它们的频率分量。在粉红噪声中,低频分量比高频分量功率更大。具体而言,频率`f`处的功率与`1 / f`成正比。 临界系统通常不稳定。例如,为了使水保持部分冷冻状态,需要主动控制温度。如果系统接近临界温度,则小型偏差倾向于将系统从一个相位移到另一个相位。 @@ -369,3 +369,89 @@ slope = params[0] 严格来说,值为 3 的分形维度与 2 不可区分,但考虑到其他值的结果,线的表观曲率和图案的外观,似乎它也是分形的。 本章结尾的练习之一,要求您使用不同的`n`和`level`值,再次运行此分析,来查看估计的维度是否一致。 + +## 8.6 频谱密度 + +提出沙堆模型的原始论文的标题是《自组织临界:1/f 噪声的解释》(Self-Organized Criticality: An Explanation of 1/f Noise)。 正如小标题所述的那样,Bak,Tang 和 Wiesenfeld 正试图解释为什么许多自然和工程系统表现出 1/f 噪声,这也被称为“闪烁噪声”和“粉红噪声”。 + +为了了解粉红噪声,我们必须绕路来了解信号,频谱分析和噪声。 + +信号: + +信号是随时间变化的任何数量。 一个例子是声音,即空气密度的变化。 在本节中,我们将探讨雪崩持续时间和大小在不同时间段内的变化。 + +频谱分析: + +任何信号都可以分解为一组具有不同音量或功率的频率分量。 例如,演奏中央 C 上方的 A 的小提琴的声音,包含频率为 440 Hz 的主要分量,但它也包含较低功率分量,例如 880 Hz,1320 Hz 和其他整数倍的基频。 频谱分析是寻找构成信号的成分和它们的功率的过程,称为其频谱。 + +噪声: + +在通常的用法中,“噪声”通常是一种不需要的声音,但在信号处理的情况下,它是一个包含许多频率成分的信号。 + +噪声有很多种。 例如,“白噪声”是一个信号,它在很宽的频率范围内拥有相同功率的成分。 + +其他种类的噪声在频率和功率之间有不同的关系。 在“红噪声”中,频率为`f`的功率为`1 / f ** 2`,我们可以这样写: + +``` +P(f) = 1 / f ** 2 +``` + +我们可以把指数 2 换成`β`来扩展它: + +``` +P(f) = 1 / f ** β +``` + +当`β= 0`时,该等式描述白噪声; 当`β= 2`时,它描述红噪声。 当参数接近 1 时,我们将结果称为`1 / f`噪声。 更一般来说,任何介于 0 和 2 之间的噪声称为“粉红”,因为它介于白色和红色之间。 + +那么这如何适用于沙堆模型呢? 假设每次细胞倒塌时,它会发出声音。 如果我们在运行中记录了沙堆模型,它会是什么样子? + +在我的`SandPile`实现运行时,它会记录在每个时间步骤中,倒塌的细胞数量,并将结果记录在名为`toppled_seq`的列表中。 例如,在第?节中运行模型之后,我们可以提取产生的信号: + +```py +signal = pile2.toppled_seq +``` + +为了计算信号的频谱(同样,这是它包含的频率和它们的功率),我们可以使用快速傅立叶变换(FFT)。 + +唯一的问题是噪声信号的频谱往往是嘈杂的。 但是,我们可以通过将一个长信号分成多个段,计算每个段的 FFT,然后计算每个频率的平均功率来使其平滑。 + +该算法的一个版本被称为“韦尔奇方法”,SciPy 提供了一个实现。 我们可以像这样使用它: + +```py + +from scipy.signal import welch + +nperseg = 2048 +freqs, spectrum = welch(signal, nperseg=nperseg, fs=nperseg) +``` + +`nperseg`是信号分解成的片段长度。 对于较长的片段,我们可以获得更多的频率成分,但由于平均的片段数较少,结果更加嘈杂。 + +`fs`是“采样频率”,即每单位时间的信号中的数据点数。 通过设置`fs = nperseg`,我们可以得到从 0 到`nperseg / 2`的频率范围,但模型中的时间单位是任意的,所以频率并不意味着什么。 + +返回值,`freqs`和`powers`是 NumPy 数组,包含成分的频率及其相应的功率。 + +如果信号是粉红噪声,我们预计: + +``` +P(f) = 1 / f ** β +``` + +对两边取对数会得到: + +``` + +logP(f) = −β logf +``` + +所以如果我们在双对数刻度上绘制功率与频率的关系,我们预计有一条斜率为`β`的直线。 + +![](img/8-6.png) + +图 8.6:随着时间推移的倒塌细胞的功率频谱,双对数刻度 + +图?显示结果。 对于 10 到 1000 之间的频率(以任意单位),频谱落在一条直线上。 灰线斜率为 -1.58,这对应于由 Bak,Tang 和 Wiesenfeld 报告的参数`β= 1.58`。 + +这个结果证实了沙堆模型产生粉红噪声。 + diff --git a/img/8-6.png b/img/8-6.png new file mode 100644 index 0000000000000000000000000000000000000000..e9c2870203b5c388d71eb4623df7a33052718202 Binary files /dev/null and b/img/8-6.png differ