5D Library › 嗓音生物力学、非线性源-滤波耦合与听觉-运动反馈的数学模型 · English
第八章 实践与预注册试验
注
本章的核查表是教学与自我观察工具,不是嗓音检查,也不能用于诊断。 声音嘶哑持续超过两周、发声疼痛、咳血或呼吸困难,请先去耳鼻喉科或嗓音专科就医,并按医生建议接受言语治疗师的评估(见序言)。吸管与水阻练习应在舒适的音量下进行,任何头晕、喉部疼痛或不适都应立即停止。书中给出的数值范围是为了演示计算而设定的,不是经过验证的处方。
第一部分 四步嗓音生物力学与听觉反馈核查表
这份核查表供一位歌者(或一位老师和一位学生)在一段时间里观察自己的发声与监听习惯。四步分别对应前面几章的模型;每一步都只与歌者自己以前的记录比较,不与任何「标准值」比较。
- 起振轻松度与水化(第一章)。在低、中、高三个音高上,以固定距离(例如 30 cm)记录能稳定维持的最轻 /u/ 的声压级,并给起音轻松度打分(0–10);在不同的日子(例如正常日与长途飞行后)重复。
- 吸管热身(第二章)。记下吸管长度、内径与水深,估算口内背压,以几分钟轻柔的滑音与持续音为限;水深并不等于「练得越多」。
- 明亮共鸣还是喉部挤压(第二、三章)。同一音高与响度下录三遍:平时唱法、「明亮共鸣」意象、「用力推」意象;读出歌唱功率比(2–4 kHz 最强谐波相对于 0–2 kHz 最强谐波)与 H1–H2(第一减第二谐波),并用 Borg CR10 给用力打分。挤压往往同时降低 H1–H2、提高用力感。
- 监听校准(第五、六章)。两耳张开、一耳轻堵、一手在耳后拢音、两耳都堵,各唱同一组 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 + 分层因素;双侧 ;预先设定的敏感性分析:加入 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 知识库的方法论基础,因此与本书主题有商业利益关系。本书不推销任何课程、牌卡或服务;本章的试验设计为由独立于作者企业的人员实施和分析,不从作者的学员、社群或客户中招募;书中所有代码与研究方案均公开,供任何人检验。为限制利益的影响:练习脚本、录音规程与分析代码在入组前公开;引导者、声学分析者与统计人员都独立于作者的企业;无论结果如何,结果、匿名数据和代码都将公开。
参考文献
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).