5D Library › 嗓音生物力学、非线性源-滤波耦合与听觉-运动反馈的数学模型 · English

第八章 实践与预注册试验

注

本章的核查表是教学与自我观察工具,不是嗓音检查,也不能用于诊断。 声音嘶哑持续超过两周、发声疼痛、咳血或呼吸困难,请先去耳鼻喉科或嗓音专科就医,并按医生建议接受言语治疗师的评估(见序言)。吸管与水阻练习应在舒适的音量下进行,任何头晕、喉部疼痛或不适都应立即停止。书中给出的数值范围是为了演示计算而设定的,不是经过验证的处方。

第一部分 四步嗓音生物力学与听觉反馈核查表

这份核查表供一位歌者(或一位老师和一位学生)在一段时间里观察自己的发声与监听习惯。四步分别对应前面几章的模型;每一步都只与歌者自己以前的记录比较,不与任何「标准值」比较。

  1. 起振轻松度与水化(第一章)。在低、中、高三个音高上,以固定距离(例如 30 cm)记录能稳定维持的最轻 /u/ 的声压级,并给起音轻松度打分(0–10);在不同的日子(例如正常日与长途飞行后)重复。
  2. 吸管热身(第二章)。记下吸管长度、内径与水深,估算口内背压,以几分钟轻柔的滑音与持续音为限;水深并不等于「练得越多」。
  3. 明亮共鸣还是喉部挤压(第二、三章)。同一音高与响度下录三遍:平时唱法、「明亮共鸣」意象、「用力推」意象;读出歌唱功率比(2–4 kHz 最强谐波相对于 0–2 kHz 最强谐波)与 H1–H2(第一减第二谐波),并用 Borg CR10 给用力打分。挤压往往同时降低 H1–H2、提高用力感。
  4. 监听校准(第五、六章)。两耳张开、一耳轻堵、一手在耳后拢音、两耳都堵,各唱同一组 8 个音,计算平均有符号误差(偏高或偏低)与平均绝对误差(音分)。

推导

把核查表用在一位虚构的歌者身上。所有数字都是编造的,只用来演示计算。

# The four-step checklist applied to an INVENTED singer. Every number is made up to show
# the arithmetic; none is a norm or a diagnosis.
import math

print("Step 1  softest steady /u/ (dB SPL, 30 cm) / ease 0-10: hydrated -> dry day")
for note, (l1, e1, l2, e2) in {"low A3": (52, 8, 53, 8), "mid E4": (55, 7, 55, 7),
                               "high C5": (60, 6, 64, 4)}.items():
    flag = "  <- harder onset when dry" if l2 - l1 >= 3 else ""
    print(f"  {note:7s}  {l1} dB / {e1}   ->   {l2} dB / {e2}{flag}")

print("Step 2  straw: mouth pressure at 0.15 L/s (friction + jet loss + water depth)")
for d_mm, length, depth in ((6.0, 0.14, 0), (4.0, 0.14, 0), (9.0, 0.27, 4)):
    u, r = 0.15e-3, d_mm / 2000
    dp = (8 * 1.85e-5 * length * u / (math.pi * r ** 4)
          + 1.14 * u * u / (2 * (math.pi * r * r) ** 2)) / 98.07 + depth
    ok = "within 1-5 cm H2O" if 1 <= dp <= 5 else "very light" if dp < 1 else "heavy"
    print(f"  {d_mm:.0f} mm x {length * 100:.0f} cm, {depth} cm under water: "
          f"{dp:4.1f} cm H2O -> {ok}")

print("Step 3  same note and loudness: singing power ratio, H1-H2, Borg CR10 effort")
TAKES = (("habitual", -18.0, 6.5, 5), ("'ring' image", -11.0, 5.8, 4),
         ("'push' image", -12.0, -1.5, 8))
for name, spr, h12, effort in TAKES:
    v = ("reference" if spr <= -14 else "brighter, not pressed" if h12 > 3 and effort <= 5
         else "pressed? (low H1-H2, high effort)")
    print(f"  {name:13s} SPR {spr:+5.1f}, H1-H2 {h12:+4.1f} dB, effort {effort} -> {v}")

print("Step 4  pitch error over 8 sung notes (cents): mean signed / mean absolute")
errs = {"open ears": [-14, -9, -18, -6, -12, -20, -8, -15],
        "one ear blocked": [-6, 2, -9, 4, -3, -7, 1, -5],
        "hand cupped at ear": [-4, 3, -6, 5, -2, -5, 2, -3],
        "both ears plugged": [12, 18, 9, 15, 20, 11, 16, 14]}
for name, e in errs.items():
    ms, ma = sum(e) / len(e), sum(abs(x) for x in e) / len(e)
    bias = "flat" if ms < -5 else "sharp" if ms > 5 else "no clear bias"
    print(f"  {name:18s} {ms:+6.1f} / {ma:5.1f}  ({bias})")
print(f"  lowest absolute error: {min(errs, key=lambda k: sum(map(abs, errs[k])))}")
# Step 1  softest steady /u/ (dB SPL, 30 cm) / ease 0-10: hydrated -> dry day
#   low A3   52 dB / 8   ->   53 dB / 8
#   mid E4   55 dB / 7   ->   55 dB / 7
#   high C5  60 dB / 6   ->   64 dB / 4  <- harder onset when dry
# Step 2  straw: mouth pressure at 0.15 L/s (friction + jet loss + water depth)
#   6 mm x 14 cm, 0 cm under water:  0.3 cm H2O -> very light
#   4 mm x 14 cm, 0 cm under water:  1.5 cm H2O -> within 1-5 cm H2O
#   9 mm x 27 cm, 4 cm under water:  4.1 cm H2O -> within 1-5 cm H2O
# Step 3  same note and loudness: singing power ratio, H1-H2, Borg CR10 effort
#   habitual      SPR -18.0, H1-H2 +6.5 dB, effort 5 -> reference
#   'ring' image  SPR -11.0, H1-H2 +5.8 dB, effort 4 -> brighter, not pressed
#   'push' image  SPR -12.0, H1-H2 -1.5 dB, effort 8 -> pressed? (low H1-H2, high effort)
# Step 4  pitch error over 8 sung notes (cents): mean signed / mean absolute
#   open ears           -12.8 /  12.8  (flat)
#   one ear blocked      -2.9 /   4.6  (no clear bias)
#   hand cupped at ear   -1.2 /   3.8  (no clear bias)
#   both ears plugged   +14.4 /  14.4  (sharp)
#   lowest absolute error: hand cupped at ear

第一步,这位歌者在低音与中音处,正常日与干燥日的最轻音几乎相同,高音处却从 60 dB 升到 64 dB、轻松度从 6 降到 4——与第一章「水化影响主要见于高音」的方向一致,但一位歌者的两天记录说明不了因果。第二步,6 mm 吸管的背压只有约 0.3 cm H2O,几乎没有半阻塞的作用;4 mm 吸管约 1.5 cm H2O;9 mm 管浸入水下 4 cm 约 4.1 cm H2O,背压主要来自水深。第三步,「明亮共鸣」意象把歌唱功率比从 −18 dB 提高到 −11 dB,H1–H2 与用力感基本不变;「用力推」意象同样提高了歌唱功率比(−12 dB),却使 H1–H2 降到 −1.5 dB、用力感升到 8——这一组合提示挤压,而不是共鸣。第四步,两耳张开时这位歌者平均偏低 12.8 音分,两耳都堵时反而平均偏高 14.4 音分;一手在耳后拢音时误差最小(绝对误差 3.8 音分)。对这位歌者来说,「堵耳」改变了他对自己音高的判断,值得在排练中有意识地校准。

注

一位虚构歌者的数据不是证据。 H1–H2 与歌唱功率比都受元音、音高、响度和麦克风的影响,只有在这些条件都相同时,同一个人的前后比较才有意义;它们不是「挤压」的诊断指标。核查表的价值在于让歌者把观察写下来、事后可以对照,而不在于给出一个「正确答案」。

第二部分 预注册随机对照试验方案

问题

对嗓音健康的成年人,做 10 分钟「吸管发声(含水阻管)+ 骨导自我监听校准」,与做 10 分钟常规开嗓朗读相比,能否在练习结束后立即提高朗读时嗓音的周期性(以 CPPS 衡量)?

证据

为什么选 CPPS。 倒谱峰显著度(CPP)由希伦布兰德等人提出,用于衡量气息声:周期性越强、噪声越少,倒谱中对应基音周期的峰越突出 (Hillenbrand et al. 1994);其平滑版本 CPPS 在连续语流中同样有效,这使得可以直接分析朗读而不只是持续元音 (Hillenbrand and Houde 1996)。马林与魏宁克在免费软件 Praat 中实现了 CPPS 的计算 (Maryn and Weenink 2015)。默顿、希尔曼与梅塔汇总的文献显示,CPPS 区分正常与嗓音障碍的临界值随软件与参数设置差别很大,同一研究中两种 Praat 设置给出的持续元音临界值分别约为 23.6 dB 与 14.0 dB (Murton et al. 2020)。自评费力。 范李尔与范默斯贝亨在 36 名嗓音障碍患者中发现,带锚点的 Borg CR10 量表能区分治疗前后的自评发声费力 (Leer and Mersbergen 2017);这一量表源自 Borg 的类别—比例量表 (Borg 1982)。半阻塞练习的短期效果。 已有的自身对照研究显示短期声学变化小而不一致,水中吸管发声后听者评定的紧张度甚至升高 (Ford et al. 2024)。

下面的程序从头计算合成元音的 CPPS,说明这一指标的含义与对设置的敏感性。

推导

# Smoothed cepstral peak prominence (CPPS), the Chapter 8 primary outcome, from scratch on
# synthetic vowels. Cepstrum = spectrum of the dB power spectrum; a periodic voice gives a
# peak at the quefrency of its period. CPP = peak height (dB) above a regression line;
# CPPS first smooths over time and quefrency (after Hillenbrand et al. 1994; Hillenbrand &
# Houde 1996). The settings here are simplified ones.
import cmath, math, random

FS, N = 16000, 1024

def fft(x):
    if len(x) == 1:
        return x
    e, o, n = fft(x[0::2]), fft(x[1::2]), len(x)
    t = [cmath.exp(-2j * math.pi * k / n) * o[k] for k in range(n // 2)]
    return [e[k] + t[k] for k in range(n // 2)] + [e[k] - t[k] for k in range(n // 2)]

def vowel(breath, f0=200.0, jitter=0.002, dur=0.6, seed=3):
    rnd, x, ph = random.Random(seed), [], 0.0
    for _ in range(int(dur * FS)):
        ph += 2 * math.pi * f0 * (1 + rnd.gauss(0, jitter)) / FS
        harmonics = sum(math.sin(h * ph) / h ** 1.5 for h in range(1, 20))
        x.append(harmonics + rnd.gauss(0, 3 * breath))
    return x

def smooth(v, w):                                   # centred moving average, window w
    h = w // 2
    return [sum(v[max(0, i - h):i + h + 1]) / len(v[max(0, i - h):i + h + 1])
            for i in range(len(v))]

def cpp(x, smoothed=True, hop=320):
    win = [0.5 - 0.5 * math.cos(2 * math.pi * i / (N - 1)) for i in range(N)]
    ceps = []
    for s in range(0, len(x) - N, hop):
        spec = fft([x[s + i] * win[i] for i in range(N)])
        logp = [10 * math.log10(abs(v) ** 2 + 1e-12) for v in spec]
        ceps.append([20 * math.log10(abs(v) / N + 1e-9) for v in fft(logp)[:N // 2]])
    # 3 frames in time, 3 bins in quefrency
    if smoothed:
        cols = [smooth([c[q] for c in ceps], 3) for q in range(N // 2)]
        ceps = [smooth([cols[q][i] for q in range(N // 2)], 3) for i in range(len(ceps))]
    qs, vals = list(range(16, N // 2)), []          # regression line from 1 ms upward
    mq = sum(qs) / len(qs)
    for c in ceps:
        mc = sum(c[q] for q in qs) / len(qs)
        b = sum((q - mq) * (c[q] - mc) for q in qs) / sum((q - mq) ** 2 for q in qs)
        qp = max(range(FS // 330, FS // 60), key=lambda q: c[q])      # search 60-330 Hz
        vals.append(c[qp] - (mc + b * (qp - mq)))
    return sum(vals) / len(vals)

print("synthetic 200 Hz vowels | CPPS (smoothed) | CPP (unsmoothed)")
for name, b in (("clear", 0.02), ("mildly breathy", 0.08), ("breathy", 0.25)):
    x = vowel(b)
    print(f"  {name:21s} | {cpp(x):11.2f} dB  | {cpp(x, smoothed=False):12.2f} dB")
print("values depend on the settings: a trial must fix software, version and settings")
# synthetic 200 Hz vowels | CPPS (smoothed) | CPP (unsmoothed)
#   clear                 |       21.52 dB  |        23.03 dB
#   mildly breathy        |       15.54 dB  |        17.56 dB
#   breathy               |        9.06 dB  |        14.92 dB
# values depend on the settings: a trial must fix software, version and settings

三个 200 Hz 的合成元音,气息噪声从少到多,CPPS 从约 21.5 dB 降到 15.5 dB 再降到 9.1 dB,方向符合预期。但同一段信号,不做平滑的 CPP 比 CPPS 高 1.5–5.9 dB,而且噪声越多差得越大。这正是默顿等人指出的问题:CPPS 的数值依赖软件与设置,所以试验必须在登记时写定软件、版本和每一个参数,并且只比较同一套设置下的结果。

设计

要素 规定
参与者 18–65 岁成年人,自述嗓音正常,能流利朗读试验所用语言的标准段落;通过大学被试库、社区与在线广告招募;不从作者在 vocal.guru 与 singingasia.com 的学员、「耳根圆通法」课程学员、作者的社群、牌卡用户或客户中招募
排除 筛查时声音嘶哑或研究人员听感评估有明显嗓音障碍;正在接受嗓音治疗,或 12 个月内做过喉部手术;2 周内上呼吸道感染;过去 3 个月每周规律做吸管或水阻练习;不能耐受轻度口内压(如近期口腔、面部手术)
随机化 1:1,可变区组,按性别与有无系统声乐训练分层;由独立统计人员生成的隐蔽序列,基线录音完成后才揭示分组
A 组 10 分钟:吸管发声 4 分钟(14 cm × 4 mm 吸管,轻柔滑音与持续音);水阻管发声 3 分钟(27 cm × 9 mm 管,管口没入水下 2–4 cm,轻柔起泡);骨导自我监听校准 3 分钟(短句哼唱与朗读,先两耳张开,再一手轻堵一耳,按脚本比较听到的声音与面部、胸腔的振动感)
B 组(积极对照) 10 分钟常规开嗓朗读:以舒适音量朗读中性文本,穿插常规的放松(打哈欠—叹气)与音量渐强,不含任何半阻塞;同一批引导者、相同的接触时间与鼓励用语
测量时点 T0(基线)、T1(练习结束后立即)、T2(结束后 30 分钟):标准朗读段落(约 30 秒)与持续 /a/ 三遍;头戴式麦克风距唇固定距离,隔音室,每次同时记录声压级与平均基频
主要结局(唯一) T1 朗读段落的 CPPS(dB),以 T0 的同一指标为协变量
CPPS 的计算 Praat(版本在登记时固定),按 Maryn & Weenink 2015 的实现;基频搜索范围、时间与倒频率平滑窗、回归线类型与拟合方法全部在登记时写定,分析脚本公开;自动计算,分析者只做预先规定的录音质量检查
次要结局 T1 朗读后的自评发声费力(带锚点的 Borg CR10);T1 持续 /a/ 的 CPPS 与谐噪比;T2 朗读段落 CPPS;不适事件(头晕、喉部疼痛、紧张感)
设盲 参与者与引导者无法设盲;声学分析者不知分组:录音以随机编码命名,T0、T1、T2 的顺序被打乱,分析脚本在揭盲前锁定
分析 按随机分组分析(修正的意向性分析:所有随机化后有可用 T1 录音者,不论是否完成练习;样本量已按 10% 无法分析计入);协方差分析:T1 CPPS ~ 分组 + T0 CPPS + 分层因素;双侧 α=0.05\alpha = 0.05;预先设定的敏感性分析:加入 T1 声压级与平均基频为协变量(排除「只是唱得更响」的解释)

注

为什么只设一项主要结局,而且是 CPPS 而不是自评费力。 参与者知道自己在做什么练习,无法设盲;自评的发声费力最容易受期望影响,因此列为次要结局。CPPS 可以由不知分组的分析者用锁定的脚本计算,受期望的直接影响较小,并且在连续语流中有效。它的弱点是会随响度与基频变化,所以分析计划预先加入了声压级与基频的敏感性分析。作者框架中提到的两项结局里,CPPS 作主要结局、Borg CR10 作次要结局,正是出于这个考虑。

样本量

推导

# Sample size for the Chapter 8 trial: two parallel arms, 1:1, ANCOVA. Primary outcome:
# read-passage CPPS (dB) right after the session, adjusted for baseline (variance x
# 1-rho^2):
#   n per arm = 2 (z_a + z_b)^2 sd^2 (1 - rho^2) / delta^2 + z_a^2 / 4   (normal approx.)
# Assumptions, to be checked in a pilot used for nothing else: between-person SD 1.2 dB,
# pre-post correlation 0.7 (cautious), smallest effect worth acting on 0.4 dB.
import math
from statistics import NormalDist

z = NormalDist().inv_cdf

def per_arm(delta, sd, rho, alpha=0.05, power=0.90):
    za, zb = z(1 - alpha / 2), z(power)
    n = 2 * (za + zb) ** 2 * sd ** 2 * (1 - rho ** 2) / delta ** 2 + za ** 2 / 4
    return math.ceil(n)

SD, RHO, SESOI, LOSS = 1.2, 0.7, 0.4, 0.10
print(f"sd {SD} dB, alpha 0.05 two-sided, 90 % power; analysable participants per arm")
print("  SESOI (dB) | rho = 0.6 | rho = 0.7 | rho = 0.8")
for d in (0.3, 0.4, 0.5):
    cells = "   |   ".join(f"{per_arm(d, SD, r):5d}" for r in (0.6, 0.7, 0.8))
    print(f"     {d:.1f}     |   {cells}")
n = per_arm(SESOI, SD, RHO)
rec = math.ceil(n / (1 - LOSS))
print(f"chosen: SESOI {SESOI} dB, rho {RHO} -> {n} analysable per arm, {2 * n} in all")
print(f"allowing {LOSS:.0%} loss (unusable recordings, withdrawal): "
      f"recruit {rec} per arm, {2 * rec} in all")
print(f"if rho were only 0.6: {per_arm(SESOI, SD, 0.6)} per arm would be needed")
# sd 1.2 dB, alpha 0.05 two-sided, 90 % power; analysable participants per arm
#   SESOI (dB) | rho = 0.6 | rho = 0.7 | rho = 0.8
#      0.3     |     217   |     173   |     123
#      0.4     |     123   |      98   |      70
#      0.5     |      79   |      63   |      45
# chosen: SESOI 0.4 dB, rho 0.7 -> 98 analysable per arm, 196 in all
# allowing 10% loss (unusable recordings, withdrawal): recruit 109 per arm, 218 in all
# if rho were only 0.6: 123 per arm would be needed

以 0.4 dB 为最小关注效应(对健康说话者,目前没有公认的 CPPS 最小重要差值,这是一个需要作者确认的假设)、个体间标准差 1.2 dB、基线与结局的相关取较保守的 0.7、90% 把握度,每组需要 98 名可分析的参与者,共 196 人;考虑约 10% 因录音不合格或退出而无法分析,每组招募 109 人,共 218 人。如果相关只有 0.6,每组需要 123 人。标准差与相关将在一个只用于此目的、不并入正式分析的预试验中核对。

判定规则

推导

# Decision rule for the Chapter 8 trial, fixed before any data are collected. diff =
# (straw + monitoring) minus (usual reading warm-up) in read-passage CPPS (dB),
# ANCOVA-adjusted, with 95 % CI; positive = more periodic, less noisy voice. SESOI 0.4 dB.
# Checked first: protocol fidelity and blinding of the acoustic analyst.
SESOI = 0.4

def verdict(diff, lo, hi, fidelity_ok=True, analyst_blind=True, harms=0):
    if not analyst_blind:
        return "NOT INTERPRETABLE: the acoustic analyst learned the allocation"
    if not fidelity_ok:
        return "NOT INTERPRETABLE: < 80 % of sessions delivered as scripted"
    if lo >= SESOI:
        v = "improves CPPS by at least the SESOI (0.4 dB)"
    elif lo > 0:
        v = "improves CPPS; size not shown to reach 0.4 dB"
    elif hi < 0:
        v = "LOWERS CPPS"
    elif lo >= -SESOI and hi <= SESOI:
        v = "no difference worth acting on (within +/- 0.4 dB)"
    else:
        v = "unclear: the interval is too wide to decide"
    if harms:
        v += f"; {harms} discomfort reports shown prominently"
    return v

for case in ((0.70, 0.45, 0.95), (0.30, 0.05, 0.55), (0.05, -0.20, 0.30),
             (-0.35, -0.60, -0.10), (0.20, -0.35, 0.75)):
    print(f"{case[0]:+.2f} dB ({case[1]:+.2f} to {case[2]:+.2f}): {verdict(*case)}")
print("+0.60 dB (+0.35 to +0.85), blinding broken:")
print("   " + verdict(0.6, 0.35, 0.85, analyst_blind=False))
print("+0.50 dB (+0.42 to +0.58), 3 reports of strain:")
print("   " + verdict(0.5, 0.42, 0.58, harms=3))
print("secondary outcomes (Borg CR10 effort, sustained-vowel CPPS, HNR): estimates with")
print("intervals only; they never change the verdict on the primary outcome")
# +0.70 dB (+0.45 to +0.95): improves CPPS by at least the SESOI (0.4 dB)
# +0.30 dB (+0.05 to +0.55): improves CPPS; size not shown to reach 0.4 dB
# +0.05 dB (-0.20 to +0.30): no difference worth acting on (within +/- 0.4 dB)
# -0.35 dB (-0.60 to -0.10): LOWERS CPPS
# +0.20 dB (-0.35 to +0.75): unclear: the interval is too wide to decide
# +0.60 dB (+0.35 to +0.85), blinding broken:
#    NOT INTERPRETABLE: the acoustic analyst learned the allocation
# +0.50 dB (+0.42 to +0.58), 3 reports of strain:
#    improves CPPS by at least the SESOI (0.4 dB); 3 discomfort reports shown prominently
# secondary outcomes (Borg CR10 effort, sustained-vowel CPPS, HNR): estimates with
# intervals only; they never change the verdict on the primary outcome

示例结果是编造的。只有当效应的 95% 置信区间下限不低于 0.4 dB 时,报告才写「A 组的练习使朗读 CPPS 提高了至少最小关注的幅度」;区间落在 ±0.4 dB 以内,写「没有值得据以行动的差别」,而不是「没有效果」;声学分析者得知分组,或者 A 组按脚本完成练习的比例低于 80%,无论结果如何都写「不可解释」。任何不适事件都在报告中突出列出。

这项试验不能说明什么

第一,它检验的是一次练习后立即的效果,不是长期训练或演唱表现。第二,A 组包含三个成分,即使结果为阳性也不能说明是哪一个起作用(需要析因试验)。第三,CPPS 提高不等于听者听到「更好的嗓音」,0.4 dB 能否被听出需要听感研究。第四,参与者嗓音健康,结果不能外推到嗓音障碍,也不能作为治疗建议。第五,对照组的朗读本身也是热身,试验比较的是两种热身,而不是「练习与什么都不做」。

伦理与利益冲突

试验须经独立伦理委员会批准,参与者签署知情同意,并在第一名参与者入组之前公开登记方案与分析计划 (Nosek et al. 2018)。练习温和而简短;引导者按脚本在参与者报告头晕、喉部疼痛或明显不适时立即停止练习,所有不适事件都记录并报告。筛查中发现可能的嗓音问题时,参与者会得到就医建议,并不入组。任何人可以随时退出而无需说明理由。

利益披露

作者在 vocal.guru 和 singingasia.com 教授声乐,并创立了「耳根圆通法」听觉反馈声乐训练体系,因此与本书主题及本章试验的结果有直接的商业利益关系。此外,作者以 5D Library 的著作(包括本书)作为其社群课程、升维牌卡(5D Ascension Cards,Dimensional Shift Card Decks)与 Yafu AI 知识库的方法论基础,因此与本书主题有商业利益关系。本书不推销任何课程、牌卡或服务;本章的试验设计为由独立于作者企业的人员实施和分析,不从作者的学员、社群或客户中招募;书中所有代码与研究方案均公开,供任何人检验。为限制利益的影响:练习脚本、录音规程与分析代码在入组前公开;引导者、声学分析者与统计人员都独立于作者的企业;无论结果如何,结果、匿名数据和代码都将公开。

参考文献

Borg, Gunnar A. V. 1982. “Psychophysical Bases of Perceived Exertion.” Medicine and Science in Sports and Exercise 14 (5): 377–81.
Ford, D. S., Eric J. Hunter, and Dimitar D. Deliyski. 2024. “Immediate Effects of Semi-Occluded Vocal Tract Exercises on Acoustic, Auditory-Perceptual, and Self-Perceptual Measures of Voice Production.” Folia Phoniatrica Et Logopaedica 76 (5): 467–81. https://doi.org/10.1159/000536002.
Hillenbrand, James, Ronald A. Cleveland, and Robert L. Erickson. 1994. “Acoustic Correlates of Breathy Vocal Quality.” Journal of Speech and Hearing Research 37 (4): 769–78. https://doi.org/10.1044/jshr.3704.769.
Hillenbrand, James, and Robert A. Houde. 1996. “Acoustic Correlates of Breathy Vocal Quality: Dysphonic Voices and Continuous Speech.” Journal of Speech and Hearing Research 39 (2): 311–21. https://doi.org/10.1044/jshr.3902.311.
Leer, Eva van, and Miriam van Mersbergen. 2017. “Using the Borg CR10 Physical Exertion Scale to Measure Patient-Perceived Vocal Effort Pre and Post Treatment.” Journal of Voice 31 (3): 389.e19–25. https://doi.org/10.1016/j.jvoice.2016.09.023.
Maryn, Youri, and David Weenink. 2015. “Objective Dysphonia Measures in the Program Praat: Smoothed Cepstral Peak Prominence and Acoustic Voice Quality Index.” Journal of Voice 29 (1): 35–43.
Murton, Olivia, Robert Hillman, and Daryush Mehta. 2020. “Cepstral Peak Prominence Values for Clinical Voice Evaluation.” American Journal of Speech-Language Pathology 29 (3): 1596–607. https://doi.org/10.1044/2020_AJSLP-20-00001.
Nosek, Brian A., Charles R. Ebersole, Alexander C. DeHaven, and David T. Mellor. 2018. “The Preregistration Revolution.” Proceedings of the National Academy of Sciences 115 (11): 2600–2606. https://doi.org/10.1073/pnas.1708274114.

Fan, Y. (2026). Vocal Biomechanics, Non-Linear Source-Filter Coupling and Auditory-Motor Feedback: From Titze's Self-Sustained Vocal Fold Oscillation and Vocal-Tract Inertance to the Lombard Effect, Read Beside Classical Chinese Vocal Aesthetics [嗓音生物力学、非线性源-滤波耦合与听觉-运动反馈的数学模型] (Version 1.0.0). 5D Library. https://doi.org/10.5281/zenodo.23770084 · Licensed under Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International (CC BY-NC-ND 4.0).