5D Library › 声音说服力、韵律信息论与人际生理同步 · English
第五章 情绪传染与声学粗糙度
为什么尖叫让人立刻警觉
一声尖叫,即使隔着墙、听不清内容,也会让人立刻警觉。阿纳尔等人用声音的调制功率谱解释了这一点:它描述声音的能量在不同的时间调制频率(声音包络起伏的快慢)和频谱调制上如何分布。
证据
尖叫占据的声学「生态位」。 阿纳尔等人分析了尖叫、普通言语、歌唱以及各种人造警报声,发现普通言语的能量主要集中在每秒几次的慢速包络调制上(对应音节的节奏),而尖叫的能量相当一部分落在约 30–150 Hz 的快速振幅调制区,听起来就是「粗糙」的。这个区域在普通言语中几乎不被使用。粗糙度越高的声音被判断为越可怕;功能磁共振成像显示,粗糙的声音更强地激活杏仁核 (Arnal et al. 2015)。
这为一个日常经验提供了声学上的解释:紧张、愤怒或惊恐时,声音会变得「毛糙」「发紧」,听者也会随之紧张。情绪通过声音、表情和姿态在人与人之间传递的现象,心理学称为情绪传染 (Hatfield et al. 1993)。
计算粗糙度
推导
三个合成的 1 秒声音(只看一个以 1 kHz 为中心的频带):平静的、类似言语的声音,只有每秒 4 次的音节节奏;紧张的声音,额外带有深度 0.3 的 70 Hz 振幅调制;类似尖叫的声音,额外带有深度 0.9 的 90 Hz 调制。用全波整流与 2 毫秒滑动平均提取包络,计算 1–250 Hz 的调制谱,粗糙度指数为 30–150 Hz 的调制功率所占的比例。
# Roughness as fast amplitude modulation. Arnal et al. (2015) found that screams carry much of their
# energy in temporal modulations of about 30-150 Hz ('roughness'), a range ordinary speech hardly
# uses (its envelope is dominated by syllable-rate modulation of a few hertz). Here: one 1-kHz
# frequency band of three SYNTHETIC 1-second sounds, sampled at 8 kHz. The envelope is recovered by
# full-wave rectification and a 2-ms moving average, decimated to 1 kHz; its modulation spectrum is
# a discrete Fourier transform from 1 to 250 Hz. Roughness index = share of modulation power at 30-150 Hz.
import math
FS = 8000
def sound(am): # am: list of (modulation frequency Hz, depth)
out = []
for n in range(FS):
t = n / FS
env = 1.0
for f, d in am: env *= 1 + d * math.sin(2 * math.pi * f * t)
out.append(env * math.sin(2 * math.pi * 1000 * t))
return out
def mod_spectrum(x):
r = [abs(v) for v in x]
w = int(0.002 * FS); acc = sum(r[:w]); env = []
for i in range(w, len(r)):
acc += r[i] - r[i - w]
if i % 8 == 0: env.append(acc / w) # decimate to 1 kHz
m = sum(env) / len(env); env = [e - m for e in env]; n = len(env)
spec = {}
for f in range(1, 251):
re = sum(e * math.cos(2 * math.pi * f * k / 1000) for k, e in enumerate(env))
im = sum(e * math.sin(2 * math.pi * f * k / 1000) for k, e in enumerate(env))
spec[f] = (re * re + im * im) / n
return spec
SOUNDS = {"calm speech-like: 4 Hz syllable rhythm": [(4, 0.8)],
"tense voice: + 70 Hz modulation, depth 0.3": [(4, 0.8), (70, 0.3)],
"scream-like: + 90 Hz modulation, depth 0.9": [(4, 0.8), (90, 0.9)]}
for name, am in SOUNDS.items():
s = mod_spectrum(sound(am))
total = sum(s.values()); rough = sum(v for f, v in s.items() if 30 <= f <= 150)
peak = max(s, key=s.get)
print(f"{name:43s}: roughness index {rough / total:5.1%}, strongest modulation at {peak} Hz")
# calm speech-like: 4 Hz syllable rhythm : roughness index 0.0%, strongest modulation at 4 Hz
# tense voice: + 70 Hz modulation, depth 0.3 : roughness index 14.8%, strongest modulation at 4 Hz
# scream-like: + 90 Hz modulation, depth 0.9 : roughness index 60.1%, strongest modulation at 90 Hz平静的声音几乎没有粗糙度;带有中等 70 Hz 调制的「紧张」声音,粗糙度指数约为 15%,最强的调制仍然是音节节奏;而类似尖叫的声音粗糙度指数约为 60%,最强的调制落在 90 Hz。这个程序只是对一个频带的简化处理,真实的调制功率谱需要在多个听觉频带上计算,但它显示了粗糙度的物理含义:包络在每秒几十到一百多次的快速起伏。
谐噪比:清亮与沙哑
与粗糙度相关但不同的另一个特征是谐噪比。嗓音中周期性的谐波越强、气流噪声越少,谐噪比越高,听起来越「清亮」;气声、沙哑的嗓音谐噪比较低。
推导
用自相关法估计谐噪比(博尔斯马方法的简化版,不含窗函数校正与插值):信号在一个基音周期处的归一化自相关为 时,谐噪比 dB (Boersma 1993)。合成的「元音」基频为 120 Hz,分别加入不同强度的噪声,或加入 2% 的周期间抖动。
# Harmonics-to-noise ratio (HNR) by a simplified version of Boersma's (1993) autocorrelation method
# (no window correction or interpolation): if r is the normalised
# autocorrelation of the signal at one pitch period, HNR = 10 log10(r / (1 - r)) dB.
# SYNTHETIC 0.4-s 'vowels' at f0 = 120 Hz, sampled at 8 kHz: a sum of 20 harmonics with a -6 dB per
# octave roll-off, plus white noise at a chosen level, and optional period-to-period jitter.
import math, random
FS = 8000
def vowel(noise_db, jitter=0.0, seed=1):
rng = random.Random(seed); n = int(0.4 * FS); x = [0.0] * n; phase = 0.0
for i in range(n):
f0 = 120 * (1 + jitter * rng.gauss(0, 1)) if i % 66 == 0 or i == 0 else None
if f0: cur = f0
phase += 2 * math.pi * cur / FS
x[i] = sum(math.sin(k * phase) / k for k in range(1, 21))
p = sum(v * v for v in x) / n
sd = math.sqrt(p / 10 ** (noise_db / 10))
return [v + rng.gauss(0, sd) for v in x]
def hnr(x):
n = len(x); m = sum(x) / n; x = [v - m for v in x]
e0 = sum(v * v for v in x)
best = 0.0
for lag in range(int(FS / 400), int(FS / 75)): # pitch range 75-400 Hz
r = sum(x[i] * x[i + lag] for i in range(n - lag)) / math.sqrt(
sum(v * v for v in x[:n - lag]) * sum(v * v for v in x[lag:]))
best = max(best, r)
best = min(best, 0.999999)
return 10 * math.log10(best / (1 - best))
for label, nd, j in (("clear voice (noise 25 dB below)", 25, 0.0), ("slightly breathy (noise 12 dB below)", 12, 0.0),
("breathy/hoarse (noise 3 dB below)", 3, 0.0), ("clear, with 2 % jitter", 25, 0.02)):
print(f"{label:38s}: HNR estimate {hnr(vowel(nd, j)):5.1f} dB")
# clear voice (noise 25 dB below) : HNR estimate 20.3 dB
# slightly breathy (noise 12 dB below) : HNR estimate 11.6 dB
# breathy/hoarse (noise 3 dB below) : HNR estimate 2.9 dB
# clear, with 2 % jitter : HNR estimate 12.9 dB估计值大致跟随加入的噪声强度:噪声低 12 dB 时估计约 12 dB,低 3 dB 时约 3 dB;噪声很弱时(低 25 dB),估计偏低到约 20 dB,这是因为整数采样点的延迟无法精确对准基音周期。只加 2% 的周期间抖动、几乎不加噪声,谐噪比估计也降到约 13 dB:周期性的轻微不稳定在这种方法中同样表现为「噪声」。这提醒我们,谐噪比是一个综合指标,不能单独据此判断嗓音是「气声」还是「不稳」。
注
从声学到「气场」,中间隔着很多步。 阿纳尔等人的发现说明,极高的粗糙度(尖叫)会触发警觉。由此推断「温和、低粗糙度、高谐波能量的发声能避免触发听众的防御性威胁评估,从而更有说服力」,是一个合理的假说,但目前没有直接的证据:普通说话中粗糙度通常很低,在这个低水平范围内的细微差别是否影响说服,还没有被研究过。嗓音持续沙哑可能是嗓音疾病的表现,应当就医,而不是靠技巧掩盖。
假说 · 尚未验证
粗糙度与防御性评估假说(尚未确立)。在普通说话的范围内,人为加入轻度的 30–150 Hz 振幅调制(粗糙度指数提高到约 10%–15%),即使听者没有意识到声音的变化,也会使听者对说话者的威胁感评价升高、对其提议的接受度降低。如果在这一低粗糙度范围内,听者的评价没有可检测的变化,这一假说就被削弱,说明粗糙度的作用只在接近尖叫的极端水平才出现。
本章小结
尖叫的能量集中在约 30–150 Hz 的快速振幅调制区,这个区域在普通言语中几乎不被使用,粗糙的声音更强地激活杏仁核。粗糙度可以通过包络的调制谱计算;谐噪比是另一个相关但不同的综合指标。由此推断温和清亮的嗓音更有说服力,是一个合理但未经直接检验的假说。下一章从人转向设备:麦克风前的距离,怎样改变声音被听到的样子。
参考文献
Fan, Y. (2026). Acoustic Persuasion, Prosodic Information Theory and Interpersonal Physiological Synchrony: Pitch Contours, Pause Entropy and Listener Autonomic Coupling in Public Speaking and Leadership [声音说服力、韵律信息论与人际生理同步] (Version 1.0.0). 5D Library. https://doi.org/10.5281/zenodo.23753267 · Licensed under Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International (CC BY-NC-ND 4.0).