舌尖的慢电势 — UniCA 味觉电生理图谱

39 人 / 26 秒单通道 / 三类味觉表型

来源 https://physionet.org/content/unicaprop/1.0.0/发布时间: 2026-10-28最后更新: 2026-10-28 阅读 10
舌尖的慢电势 — UniCA 味觉电生理图谱

信息速览

数据集名称舌尖的慢电势 — UniCA 味觉电生理图谱
数据类型时序信号,波形,元数据,文献引用
规模39 名健康志愿者(三组各 13 名)
接入方式https://physionet.org/content/unicaprop/1.0.0/
AI 就绪度

舌尖能发电。把一片柔性电极贴上去、再滴一滴苦味溶液,舌面就会在几秒内出现一段缓慢的电位偏移——这个现象在文献里被讨论了半个多世纪,却长期缺少一套能公开复核的记录。UniCA ElectroTastegram Database (PROP) 就是为补这个缺口而建的一份小库:意大利卡利亚里大学的两组研究者,工程侧与生物医学侧各出数人,把三十九名健康志愿者的舌部差分生物电位逐条录下来,配上性别与尝味者类别,2017 年 7 月挂到 PhysioNet 上,采用开放数据共享署名许可。

它和麻醉、镇静、脑电都没有关系。名字里的 PROP 不是丙泊酚(propofol),而是 6-n-丙基硫氧嘧啶(6-n-propylthiouracil),一种在味觉遗传学里用了七八十年的标准苦味刺激物;UniCA 是卡利亚里大学(Università degli Studi di Cagliari)的缩写。整份数据里没有任何药物输注记录,没有意识水平标签,也没有一帧脑电。把它归到麻醉类里去,是这份库最容易被犯的第一个错。

规模小得近乎朴素:三十九条记录,每条二十六秒,单通道,压缩包不到十兆。但它的价值不在体量,而在于它是少数几份把「味觉刺激 → 舌面电位」这条链路完整公开的数据之一,且带一个三分类标签,可以直接拿来做小样本分类的可行性验证。一屏速览见下表。

维度 内容
官方全名 UniCA ElectroTastegram Database (PROP)
发布平台 PhysioNet,v1.0.0,2017-07-19 上线
DOI 10.13026/C2BH3H
采集机构 卡利亚里大学电气与电子工程系 + 生物医学科学系(意大利)
受试者 39 名健康志愿者,16 男 23 女
分组 非尝味者 / 中等尝味者 / 超级尝味者,各 13 人
记录数 39 条,每人一条
单条时长 26 秒(刺激前约 6 秒 + 刺激后约 20 秒)
信号 舌部差分生物电位,单通道
采样与量化 2048 Hz,22 bit,分辨率 1.43 µV
预处理 86 阶等波纹 FIR 低通,截止 6 Hz
刺激 30 µL、3.2 mmol/L 的 PROP 溶液
格式 WFDB(dN.dat + dN.hea),另附 RECORDS 与 info.txt
体量 未压缩约 7.9 MB
许可 Open Data Commons Attribution License v1.0
关联论文 Scientific Reports 7:40353 (2017)

§1 它要解决的具体麻烦

1.1 味觉敏感度长期只能靠「说出来」,这份库想换成「量出来」

味觉敏感度的常规测法是人尝、人报、人记:给受试者含一口 PROP 溶液,让他按苦味强度打分,或者让他判断两个浓度里哪个更苦,然后按阈值把人分进非尝味者、中等尝味者、超级尝味者三档。这套流程便宜、成熟、被大量文献沿用,但它有一个绕不过去的性质——最终数据是主观报告,受注意力、期待、语言描述习惯和当天状态影响。

电生理测法提供了另一条路。舌面上皮本身就是可兴奋组织,味觉物质与味蕾受体结合后引起局部去极化,在舌背与舌腹之间形成可测量的电位差。如果这条电位差能稳定反映敏感度差异,那么敏感度就可以在不依赖受试者作答的情况下读出来。这份库收集的就是这批电位差记录,并在每条记录上附带一份常规测法给出的分档结果,让两条路可以在同一批人身上对照。

这个动机决定了库的形态:它不是要覆盖味觉的全貌,而是要把「一个刺激、一段反应、一个分档」这条最小链路固定下来,供后来者检验电生理测法到底能走多远。理解这一点,后面所有的设计取舍——单浓度、单通道、短窗口——就都顺理成章了。

1.2 三条常见的错误期待

第一条是把 PROP 当成丙泊酚。这两个词的前四个字母相同,中文音译也常被混作一处,但在药理学上毫无关系:丙泊酚是静脉麻醉药,PROP 是苦味刺激物,在本库中的总量按微升计。搜到这份库时如果按麻醉数据预期打开,会立刻发现没有血压、没有输注速率、没有镇静评分。

第二条是把「生物电位」当成脑电。舌部的差分电位与头皮脑电共用「生物电位」这个词,采集设备甚至可以是同一台多通道生理记录仪,但信号来源、频段、幅值量级和生理含义都不同。这份库的信号在 6 Hz 以下,是缓慢的去极化趋势;脑电分析里常用的 α 频段、γ 频段,在这里根本不存在。

第三条是把标签当成金标准。三个类别来自定性尝味测试,是行为学分组,而不是对这批电生理信号的判读。用这批数据训练分类器去区分三类,本质上是问「电生理信号是否携带了行为学分档的信息」,而不是问「电生理能否替代行为学测试」。

1.3 它能给到的与给不到的

你的需求 它给的 够不够
一段真实可复核的味觉刺激电生理记录 39 条 26 秒单通道波形 够,但只够看形态
每段记录对应的人群分档 头文件与 info.txt 里的 NT/MT/ST 够,三分类直接可用
受试者的基本人口学信息 仅性别 不够,无年龄、族裔、体质指数
多浓度剂量反应 单一浓度 3.2 mmol/L、单一剂量 30 µL 不够,无法建剂量曲线
原始未滤波信号 只有 6 Hz 低通后的版本 不够,高频信息已不可恢复
同步的肌电、呼吸、皮肤电参考 无 不够,伪迹无法从其他通道反推
多次重复测量以估计个体内变异 每人一条 不够,无重复
味觉适应与恢复过程 刺激后仅约 20 秒 不够,长时程过程看不到
训练或验证编码器-解码器模型 无此类任务的地面真值 不够,只适合小样本分类
一套可复现的读取代码 WFDB 标准格式,通用工具可直接读 够,零定制成本

1.4 你的处境与它能帮到的事

你的处境 它能帮你什么 下一步该做什么
在做柔性电极或可穿戴传感器,需要一个真实的人体黏膜电生理样例 提供舌背共形电极 + 舌腹银球电极的真实记录,能看出接触稳定性与缓慢漂移长什么样 先只读头文件核对增益与单位,再看一两条波形确定基线漂移的量级
想验证「电生理能否分开味觉分档」这个假设 提供 39 条带三分类标签的记录,正好是一个小样本二分类/三分类的起步集 用留一法而不是固定划分,并把结果写成可行性结论而非泛化指标
需要一份公开数据来复现某篇味觉电生理文献的图 该库正是那篇 2017 年论文的数据来源 对照论文的方法段确认滤波与窗口口径后,再复现具体图
在清洗一份生理信号数据集,想找一份「小而完整」的样板工程 39 条记录、一套 WFDB 头文件、一份 SHA256 校验清单,结构完整到可以逐文件讲清 拿它的目录结构作为自己数据集的组织脚手架
只想找一份能训深度模型的时序数据 患者级样本量只有 39,无法支撑 换库,或把它当作少样本/元学习的方法演示素材
在做麻醉或镇静监测,想找丙泊酚相关信号 与本库无关,PROP 不是丙泊酚 转查丙泊酚麻醉与镇静类记录,见 §6

1.5 一句话判断

这是目前公开渠道里极少数把「味觉刺激—舌面电位—行为学分档」三件事同时挂在一份可下载文件里的数据集;它的意义是立标杆,不是供算力。

1.6 不适合谁:四条边界

不适合需要统计功效的人。 每组十三人,任何组间比较的置信区间都会宽到难以解释。做统计检验时,十三对十三的样本量在非参数方法下临界值附近的功效极低,轻易得到「不显著」的结果,而那更可能反映样本不足而非效应不存在。

不适合要做剂量反应的人。 只有一档浓度和一档剂量。味觉电生理最有意思的部分之一,正是随浓度变化的响应幅度与潜伏期,而这需要至少三到五档浓度。

不适合把舌部信号当脑信号用的人。 舌面电位与中枢神经活动之间隔着感受器转导、外周传入与多个中继核团,时间尺度完全不同。任何想用它推断中枢机制的做法都超出了数据能支撑的范围。

不适合需要长时程或重复测量的人。 每人一条、每条二十六秒,既看不到个体内的重复性,也看不到习惯化。

§2 数据构成与规格

2.1 目录与文件层级

这份库的结构在生理信号类数据集里属于最简的一档:没有子目录,没有按受试者分文件夹,所有文件平铺在同一层。

文件或文件族 数量 作用
dN.dat 39 第 N 条记录的采样数据,WFDB 二进制
dN.hea 39 第 N 条记录的头文件,纯文本
info.txt 1 按记录顺序列出每条的尝味者类别
RECORDS 1 列出全部记录名,供批处理工具遍历
SHA256SUMS.txt 1 全部文件的校验和

这个结构的直接后果是:记录编号即受试者编号,一号记录对应一位受试者,两者之间没有多对一或多对多的映射。这在小库里是优点,省掉了一层表连接;但它也意味着无法表达「同一个人在不同日期被记录多次」这种情形,因为数据里根本没有这种情形。

RECORDS 与 SHA256SUMS.txt 的存在值得单独说一句。前者让 wfdb 工具链可以一行命令遍历全部记录而不必手工拼路径,后者让下载后的完整性校验可以自动化。这两件小事在九十年代的数据库设计里并不常见,它们出现在一份 2017 年发布的小库上,说明整理者在工程细节上是认真的。

2.2 逐字段的完整字典

由于库的表结构极简,字段可以一次列全。头文件字段遵循 WFDB 标准的十六进制存储格式,这里按语义而不是按字符位置说明。

字段 所在位置 取值或范围 含义
记录名 .hea 首行 d1 至 d39 记录标识,同时是文件名前缀
信号条数 .hea 首行 恒为 1 单通道
采样点数 .hea 首行 由 26 秒与采样率决定 一条记录的样本总量
采样率 .hea 首行 2048 每秒采样点数
信号文件名 .hea 第二行 dN.dat 实际数据载体
存储格式 .hea 第二行 WFDB 数字格式码 二进制编码方式
ADC 增益 .hea 第二行 每毫伏对应的整数 数字值与物理量的换算系数
ADC 分辨率 .hea 第二行 与 22 bit 对应 最小可分辨电压
ADC 零点 .hea 第二行 数字化零点偏移 换算时须一并代入
信号初值 .hea 第二行 整数 便于快速核对读入是否正确
通道名 .hea 第二行 单一通道描述 无多导联命名
单位 .hea 第二行 mV 幅值物理单位
受试者性别 .hea 注释行 男 / 女 唯一的人口学字段
尝味者类别 .hea 注释行 NT / MT / ST 三分类标签
记录顺序与类别 info.txt 每行一条 全库标签的集中版
过程描述注释 .hea 注释行 自由文本 记录当时的采集说明

有一点需要注意:头文件的注释行在不同版本、不同厂商导出的 WFDB 文件里,字段位置并不严格固定。稳妥的读法是按关键字匹配,而不是按行号取值。这一点在 §5 的代码里有体现。

2.3 一条记录的完整解剖

拿一条记录从下载到读出,经过的环节如下。

unicaprop-1.0.0/
├── RECORDS
├── SHA256SUMS.txt
├── info.txt
├── d1.dat        #-- 26 s × 2048 Hz 的采样点
├── d1.hea        #-- 采样率/增益/单位/性别/类别
├── d2.dat
├── d2.hea
│   其余略
├── d39.dat
└── d39.hea

一条 26 秒、2048 Hz 的记录,按每秒两万零四百八十个采样点计算,样本总量在两万六千余点这个量级,单文件约两百千字节。全库三十九条,未压缩合计不到十兆字节——这也是为什么官方页面可以把总体量写得如此精确。

头文件的可读部分大致长这样:

d1 1 53248 2048
d1.dat 16 0.000285 1433 0 0 mV
#-- subject sex: female; taster status: ST
#-- differential biopotential from tongue surface

第一行给出记录名、通道数、采样点数、采样率;第二行给出文件名、格式码、增益、分辨率、零点、初值、单位;其后的注释行承载性别与类别。增益与分辨率的两个数相乘,应当得到满量程附近的一个合理值,交叉核对可以及早发现单位误读。

值得注意的是,这份文件被 6 Hz 低通滤过之后,波形已经非常平滑。对于习惯了看到脑电那种细密高频纹理的人,第一眼会以为数据被压得太狠。实际上这正是味觉电生理信号的本相:去极化是一个以秒为单位的生理过程,6 Hz 的截止对它有充足的余量。

2.4 组成结构表

由于三类标签是均分的,库在分组维度上是完全平衡的。

维度 分组 人数 记录数
尝味者类别 非尝味者 NT 13 13
尝味者类别 中等尝味者 MT 13 13
尝味者类别 超级尝味者 ST 13 13
性别 女 23 23
性别 男 16 16
时间轴 刺激前 — 约 6 秒
时间轴 刺激后 — 约 20 秒

分类维度与性别维度并不独立:三类各十三人是刻意平衡的结果,而性别分布是自然形成的。因此性别与类别之间存在一定程度的混杂,任何以性别为协变量的分析都需要显式声明这一点。

2.5 与同类资源的字段差异

味觉电生理在公开数据里属于稀疏地带,最常被拿来比较的是几类相邻资源:用于味觉的行为学心理物理数据、用于一般黏膜或皮肤电生理的开放记录、以及用于吞咽与口腔功能的肌电数据。

比较项 UniCA PROP 本库 典型味觉行为学数据 典型口腔肌电数据
信号来源 舌面差分电位 无信号,只有评分 咀嚼与吞咽肌群肌电
频段 6 Hz 以下 不适用 数十至数百 Hz
标签 三档尝味者类别 多条强度量表 吞咽事件或咬牙段
刺激 单一浓度 PROP 多浓度序列 食物或指令
单次时长 26 秒 数分钟到数十分钟 数分钟
人群 39 名健康志愿者 因研究而异 常含患者
可复现性 记录与标签同库 常只有汇总表 常只有特征

这张表要说明的差别只有一条:本库把「原始记录」与「分组标签」放在同一份下载里,而很多味觉研究只公开汇总后的统计量。这决定了它能被用来做信号级的建模,而不仅是做文献综述的素材。

§3 它是什么:一份以舌面为传感器的刺激-响应微型库

3.1 三个词拆开看

「ElectroTastegram」是研究者自造的词,构词法很明显:electro(电)+ taste(味)+ gram(记录),与 electrocardiogram、electroencephalogram 同一句法。它指的是一类记录方式,而不是一个标准化的临床检查——这一点很重要,因为没有任何共识文件规定电味觉图该怎么测、该看哪些指标。本库是这一自造概念在公开数据层面的一次落地。

「PROP」指 6-n-丙基硫氧嘧啶。这个化合物在甲状腺药理史上曾作为抗甲状腺药物使用,但在味觉遗传学里,它的角色完全不同:它是一种含硫脲基的苦味物质,人群对它的敏感度呈明显分层,其中相当一部分人几乎尝不出味道,称为非尝味者。敏感度的个体差异与特定味觉受体基因的变异相关,这使得 PROP 成为研究味觉遗传学的经典工具。

「UniCA」是卡利亚里大学的意大利语缩写。学校位于撒丁岛,本库的受试者招募与全部采集都在该校完成,这一点在空间覆盖上写得明确,但在族裔构成上官方没有给出细节,只在背景段提到高加索人群中非尝味者的比例区间。

3.2 一份「刺激-响应」库的最小完备形态

一份能被称为完整的刺激-响应数据,至少需要三件事:刺激是什么、响应在哪里测、两者在时间上如何对齐。本库三件都给了。

刺激是明确的:30 µL、3.2 mmol/L 的溶液,滴在舌面。体积与浓度都写死,没有变动。

响应位置是明确的:舌背贴共形电极,舌腹置银球丝电极,面颊接地,取两者之间的差分。差分结构的好处是把远离电极对的共模干扰大幅压低,这在口腔这种湿润、导电、易受运动影响的环境里尤其重要。

时间对齐给了相对量:一条记录 26 秒,刺激前约 6 秒、刺激后约 20 秒。但官方没有写「第几秒滴液」这个绝对时刻,只写了两个窗口的相对长度。这意味着时间零点需要使用者自己从波形上判断,或者在研究设计上只比较窗口统计量而不比较逐点时刻。这是本库一个需要提前知道的接口特性。

3.3 为什么用 ±3 V 的辅助通道

官方描述里有一句容易被略过的细节:记录用的是 Porti7 便携生理测量系统的辅助通道,其动态范围为正负 3 伏,宽于标准双极生理通道的 150 毫伏,目的是防止模拟放大器饱和。

这句话透露了采集时的一个真实困难。舌头在口腔内的位置、接触压力、唾液膜的厚薄,都会让电极与组织之间的半电池电位发生大幅漂移,其量级可以远超声称的味觉响应本身。如果用电生理常用的 150 毫伏通道,前级放大器很可能被漂移顶到饱和,整段信号削顶。改用动态范围大得多的辅助通道,虽然牺牲了一部分信噪比,但保住了不饱和。

代价是它对共模抑制与前置滤波的规格不如专用生理通道。这一点在数据里留下的痕迹,就是基线漂移较大,以及后续必须依赖较强的数字低通来清理。理解这个硬件取舍,就能理解为什么最终的滤波器要开到 86 阶。

3.4 与麻醉/镇静数据的关系:没有关系

库里的「刺激」不是药物,「响应」不是脑电,「标签」不是意识水平。三个关键要素全部与麻醉类数据不同。名字上的相似纯属字母巧合,而中文语境下「丙基硫氧嘧啶」与「丙泊酚」都带一个「丙」字,更容易让人在快速浏览时误连。

3.5 三个易混词的正本清源

查这份库的人,很多是在检索时撞上了几个形近词,需要当场分清。

第一个是 propofol。它在临床上指丙泊酚,一种起效快、代谢快的静脉全身麻醉药,剂型是乳剂,按毫克每千克给药,监测指标是脑电双频指数或靶控浓度。本库的 PROP 是 6-n-丙基硫氧嘧啶,剂型是水溶液,按微升每人给药,监测指标是舌面电位。两者除了前四个字母,没有任何交集。

第二个是 PTC,即丙基硫氧嘧啶本身在甲状腺领域的另一个简称,也常被写成 PTU。它作为抗甲状腺药时按毫克每天口服,疗程以月计;作为味觉刺激物时只在舌面停留数十秒,随后漱口清除。同一化合物在两种用途下的剂量、途径与关注点完全不同,引用时应当写明是哪一种用途。

第三个是 taster 这个词。在一般英语里它指品酒或食品行业的试味员,是一个职业身份;在味觉遗传学里它指对 PROP 苦味具备感知能力的人,是一个按阈值划分的分组。本库标签里的拼音缩写 NT、MT、ST 对应的是后者,与职业、训练或经验无关。

把这三个词分清,后面读标签和读剂量时就不会出方向性错误。这也是为什么 §1.2 把「PROP 就是丙泊酚」列为第一条错误期待——它不只是一个词义问题,而是会导致整份数据被放错类别的问题。

3.6 这份库声明了什么、没有声明什么

官方页面在「它是什么」这件事上有一份相当清晰的声明清单,值得逐条对照。

官方声明的事项 是否明确写出 说明
测量部位 是 舌背与舌腹的差分,接地在面颊
受试者健康状态 是 健康志愿者,无患者
刺激物与剂量 是 一种化合物、一个浓度、一个体积
分组依据 是 定性尝味测试,分三档
采集设备 是 型号与厂商都给出
采样与量化 是 采样率、位深、分辨率
预处理流程 是 滤波类型、阶数、截止频率
文件格式与大小 是 WFDB,未压缩体积
采集年份 否 只写了发布年份
受试者年龄 否 无逐人记录
刺激投放的绝对时刻 否 只给了窗口相对长度
未滤波原始信号 否 未随库发布
行为学测试的原始分值 否 只给了分档结果
分类性能基线 否 论文有,库没有

左列的十四项里,前八项齐全,后六项缺失。这六项的缺失并不是疏漏,而是符合「把最小可用集合公开」这一取向:凡是做信号级分析所必需的,都给了;凡是需要额外背景信息才能用的,都留给论文。使用者的判断也很简单——如果你的分析依赖后六项中的任何一项,就必须另找来源,而不能指望从这份文件里推出来。

§4 信号形态与三类人群:这份库真正想证明的事

4.1 波形长什么样

一条记录的形态大致分三段。刺激前的一段接近稳态,有缓慢起伏,幅度取决于电极接触的稳定程度。刺激落下后的数秒内出现一次或数次偏转,方向与幅度因人而异。此后信号进入恢复段,逐渐回到接近基线的水平,但往往带一个残余偏移。

这种形态与「味觉受体被激活 → 局部去极化 → 离子通道开放 → 电位差改变」这条链条是吻合的,但吻合不等于证明。同一段波形也可以由舌体轻微移动、吞咽、唾液分泌变化产生。库没有同步的运动通道,因此无法在数据层面排除这些替代解释。官方的立场也是谨慎的:它主张这是「首次客观评估」的尝试,而不是已经确立的检测方法。

4.2 三类人群的区分假设

研究的基本假设是:非尝味者对 PROP 的响应弱,超级尝味者的响应强,中等尝味者居中。如果这条假设成立,那么响应幅度、潜伏期或曲线下面积之类的特征就应该在三组之间呈现单调的次序。

这个假设在生理上是合理的,因为敏感度差异被认为部分源于受体层面的差异,而受体层面的差异理应反映在外周电活动中。但从「合理」到「可测」之间隔着若干环节:响应幅度可能被接触阻抗掩盖,潜伏期可能被唾液扩散时间主导,而个体间的解剖差异(舌乳头密度、上皮厚度)会引入与敏感度无关的方差。三十九人的样本,正处在「能看出趋势但难以确证」的边缘。

4.3 案例:一条标为超级尝味者的记录

设想一条编号靠后的记录,头文件里写着女性、ST。把它的 26 秒波形画出来,最先看到的是刺激前那六秒里一段不算小的缓慢下坡——这是基线漂移,不是生理响应。刺激之后,曲线先出现一次明显偏转,随后在十几秒里缓慢回摆,末端仍略低于起点。

按 §4.1 的分段思路,如果直接在整段上取均值或做频谱,这段漂移会主导结果,三组之间的差异会被淹没。稳妥的做法是先做去趋势,再在刺激后窗口内取特征。这个案例说明的不是「ST 的响应更大」,而是「不做去趋势的三分类会学到一个与标签无关的量」。

这个案例在后面还会被提到:§5 的读取流程里,它决定了必须先估基线;§7 的评分里,它解释了为什么「信号质量」一项不能给高分;§9 的最短流程里,它决定了特征提取要分窗。

4.4 滤波为什么开到 86 阶、截止 6 Hz

味觉去极化的时间尺度在秒级,其有效频率成分集中在极低频。截止定在 6 Hz,对生理成分几乎没有损失,却能把肌电、工频残留、接触抖动这些高频干扰一次清掉。阶数开到 86,是为了让过渡带足够陡——低截止频率配低阶滤波器,过渡带会宽到把有用成分也削掉一部分。

代价是相位失真与边缘效应。高阶等波纹滤波器在通带内相位非线性,若做过零相位处理会引入前后端点的瞬态;若不处理,波形的峰位会有轻微偏移。这一点在做潜伏期测量时必须留意。库本身不发布滤波前的版本,所以使用者无法自行选择滤波器参数——这是一次不可逆的处理。

4.5 官方立场:有效性与局限并存

论文标题里「首次客观评估」这几个字容易被读成宣告成功,但同组作者在后续表述中同时强调了分类器的局限。这份库的定位因此是双重的:它既是数据,也是一次方法学检验的原始材料。把它读成「味觉敏感度已经被电生理解决」会严重高估;把它读成「一次小规模可行性演示」则贴近原意。

§5 怎么把它取下来并用起来

5.1 取数路径

官方提供两种取法:整包下载与逐文件访问。整包是压缩文件,约十兆,适合一次性取全;逐文件适合只要一两条做快速试验。两条路径指向同一份内容,校验和可以用来确认一致性。

#-- 取整包并校验
cd /tmp
curl -fLO https://physionet.org/static/published-projects/unicaprop/unicaprop-1.0.0.zip
curl -fLO https://physionet.org/static/published-projects/unicaprop/SHA256SUMS.txt
shasum -a 256 -c SHA256SUMS.txt
unzip -q unicaprop-1.0.0.zip
ls unicaprop-1.0.0 | head

这段脚本的四步各自解决一个问题:下载、取校验清单、比对、解包。第三步在 CI 里应当作为硬性前置,因为文件一旦被静默截断,后续所有分析都会基于不完整数据而毫无察觉。

5.2 用 WFDB 工具读一条记录

WFDB 是一个老资格的标准,Python 侧有成熟的 wfdb 包。它的好处是不需要自己解析二进制格式,也不需要考虑字节序。

#-- 读一条记录并打印头信息
import wfdb

rec = wfdb.rdrecord("/tmp/unicaprop-1.0.0/d1")
print(rec.fs)                 #-- 采样率
print(rec.sig_name)           #-- 通道名列表
print(rec.units)              #-- 物理单位
print(rec.p_signal.shape)     #-- 物理量数组形状
print(rec.comments)           #-- 注释行,含性别与类别

p_signal 是已经按增益与零点换算过的物理量,单位由 units 给出;d_signal 是原始整数。读数时用前者更方便,做增益核对时用后者更安全。comments 里就是性别与类别两行,这是本库标签进入代码的唯一入口。

5.3 批量取标签并建索引

库的表结构极简,索引可以在一分钟内建完。关键是不要依赖注释行的行号,而是按关键字析出。

#-- 遍历全部记录,建一张 记录-性别-类别 表
import re
import pathlib
import pandas as pd
import wfdb

root = pathlib.Path("/tmp/unicaprop-1.0.0")
rows = []
for hea in sorted(root.glob("d*.hea")):
    rid = hea.stem
    rec = wfdb.rdheader(str(root / rid))
    text = " ".join(rec.comments)
    sex = re.search(r"sex:\s*(\w+)", text, re.I)
    cls = re.search(r"(?:taster|status)[^A-Za-z]*(\w{2})", text, re.I)
    rows.append({
        "record": rid,
        "sex": sex.group(1).lower() if sex else None,
        "taster": cls.group(1).upper() if cls else None,
        "fs": rec.fs,
        "n_sig": rec.n_sig,
    })

idx = pd.DataFrame(rows)
print(idx["taster"].value_counts())
print(idx.head())

跑完之后,应当看到三类的计数各为十三。如果某一类为零,说明正则没有匹配上注释行的实际写法,应当先打印一条原始注释再调整,而不是硬编码位置。

5.4 去趋势与分窗特征

§4.3 的案例已经说明,漂移不去掉,特征就会被它主导。最省事的做法是在刺激前窗口上拟合一条低阶多项式,然后从全程减去。

#-- 去趋势 + 分窗取面积
import numpy as np
import wfdb

rec = wfdb.rdrecord("/tmp/unicaprop-1.0.0/d1")
x = rec.p_signal[:, 0].astype(float)
fs = rec.fs

pre_end = int(6 * fs)                    #-- 刺激前窗口末端
t = np.arange(len(x)) / fs

coef = np.polyfit(t[:pre_end], x[:pre_end], 2)
x_detr = x - np.polyval(coef, t)

pre_area = np.trapz(x_detr[:pre_end], dx=1 / fs)
post_area = np.trapz(x_detr[pre_end:], dx=1 / fs)
print(pre_area, post_area)

pre_end 取六秒是一个工作假设,官方只说了「约」。如果你的分析对时间零点敏感,应当写一个小循环扫过四到八秒这个区间,看结论是否稳定;结论随零点大幅摆动,本身就是一条应当写进限制说明的发现。

5.5 小样本三分类的正确评估方式

三十九条记录、三个类别,任何固定划分的测试集都会小到没有统计意义。合理的做法是留一法,并且把结果写成可行性判断而非泛化指标。

#-- 留一法三分类,特征只用去趋势后的四个标量
import numpy as np
import pandas as pd
import wfdb
from sklearn.discriminant_analysis import LinearDiscriminantAnalysis
from sklearn.model_selection import LeaveOneOut, cross_val_predict
from sklearn.metrics import confusion_matrix

root = "/tmp/unicaprop-1.0.0/"
rows, feats = [], []
for rid in idx["record"]:
    rec = wfdb.rdrecord(root + rid)
    x = rec.p_signal[:, 0].astype(float)
    fs = rec.fs
    pre_end = int(6 * fs)
    t = np.arange(len(x)) / fs
    xd = x - np.polyval(np.polyfit(t[:pre_end], x[:pre_end], 2), t)
    feats.append([xd[pre_end:].max(), xd[pre_end:].min(),
                  np.trapz(xd[pre_end:], dx=1 / fs),
                  np.abs(xd[pre_end:]).sum() / max(len(xd) - pre_end, 1)])

X = np.array(feats)
y = idx["taster"].values
clf = LinearDiscriminantAnalysis()
pred = cross_val_predict(clf, X, y, cv=LeaveOneOut())
print(confusion_matrix(y, pred))

这套流程的重点不在准确率,而在两件事:其一,特征全部是去趋势后的标量,可解释;其二,留一法避免了「随机划分恰好把同类都分到一边」这种在小样本上极常见的偶然。混淆矩阵的对角线之外有什么,才是真正需要讨论的内容。

5.6 何时应该停下

如果做完上述流程,三类的特征分布几乎完全重叠,不要急着换更复杂的模型。更可能的原因是:六秒窗口的选择不合适,或漂移估计不准,或这批数据本就不携带足够的分档信息。第三种情况是科学结论,而不是失败,值得如实写出。

§6 与库内条目的关系

6.1 与麻醉/镇静六篇的逐项区隔

库内麻醉与镇静题材已有六份记录,逐一核对的结果如下。结论先说:本库与六篇均无实质重合,最需要防的误连是 propofol-anesthesia-dynamics,因为 PROP 与 propofol 在字面上太近。

库内 slug 该篇是什么 与本库的关系 重合判定
eeg-power-anesthesia 麻省总医院十名志愿者加四十四台手术的麻醉脑电多锥谱,含逐两秒意识标签与信号质量标记 信号是头皮脑电,标签是意识水平,场景是麻醉 无重合:信号来源、频段、标签体系全不同
propofol-anesthesia-dynamics 九名受试者丙泊酚靶控输注,逐拍心率变异性、皮电脉冲与意识消失恢复时刻 名字最近,药名最容易混 无重合:丙泊酚是静脉麻醉药,本库的 PROP 是苦味刺激物;该篇无舌部电位
eeg-gaba-anesthesia 麻醉相关 GABA 能机制方向的脑电记录 同为麻醉机制题材 无重合:本库不涉及任何麻醉药,也不含脑电
multimodal-surgery-anesthesia 一百零一台全麻手术的逐五秒生理特征、给药记录与伤害性刺激标注 多模态术中记录 无重合:本库无手术、无给药、无多模态
eda-rest-sedation 清醒静坐与丙泊酚镇静两组各十一名,只发布皮肤电脉冲时刻与幅度 同属「体表电活动」大类,均强调外周 无重合:本库是舌面差分电位,无镇静组,发布的是原始波形而非事件表
eeg-dash 三十二个脑电运动想象数据集的重打包镜像 同属脑电/电生理题材 无重合:本库为单数据集、单通道、非脑源信号

判定依据不是题材标签,而是四个要素:信号来源器官、信号频段、标签含义、场景是否有药物介入。四项里本库与六篇没有一项相同。因此不存在「实质重合」,可以独立成篇。

6.2 检索路径

按用途找过来的人,通常走三条路径。

第一条从「味觉」入手。库内与口腔、舌相关的记录有不少,但绝大多数是舌象图片、口腔影像或牙科影像,与本库的电位记录不是一类。检索时应当以「电位」「电生理」而非「舌」为核心词。

第二条从「生物电位」入手。这条路径会撞上大量脑电、心电、肌电记录。区分的办法是看频段与器官:本库在 6 Hz 以下、来源于舌面,与任何头皮或胸腔记录都不同源。

第三条从「小样本分类」入手。库内不少记录是评测基准,本库不是基准,也不附官方划分文件。若被当作基准使用,会犯「用未定义的划分比较不同方法」的错。

§7 质量评估与局限性

7.0 阅读本节前的一个前置校正

先说一句可能反直觉的话:本库的「质量」不应按大数据的标准衡量,否则会被错判为低质。三十九条记录在任何以样本量论短长的评价体系里都会垫底,但它的目标从来不是覆盖人群,而是提供一个可复核的方法学样板。评价它,要看它是否把「刺激-响应-标签」这条链路的每一环都交代清楚,而不是看它能训多大的模型。带着这个校正往前读,下面的分数才有意义。

7.1 五维评分

采用 DAIMS 框架的五个维度做粗评,每项十分制。评分反映的是「用它做它声明要做的事」的适配度,不是绝对优劣。

维度 分数 理由
数据完备性 7 每条记录都有头文件、都有标签,无缺失;缺的是人口学与重复测量
标注可信度 6 标签来自成熟的定性测试,但仅有单次评定,无重复与评分者间一致性
采集规范度 8 电极位置、设备型号、通道选择、量化位深、滤波参数全部写明
可复现性 9 WFDB 标准格式、校验和清单、开放许可,任何人可完整复现同一份文件
规模适用性 2 患者级样本量过小,只能做可行性验证
综合 6.4 小而完整,适合方法学验证,不适合规模建模

7.2 与文献口径的对照

论文报告的是同一批受试者的结果,库发布的是原始记录。两者在受试者人数上一致,在分组方式上一致,在刺激参数上一致。不一致之处在于:论文会给出具体的分类性能数字,而库本身不附带任何性能基线文件。这意味着引用库的人如果直接写「该方法准确率多少」,实际上引用的是论文而不是数据;两者应当分别标注。

另一个需要留意的点是「首次」二字。论文标题用了「首次客观评估」,这是作者对其文献综述范围的判断,不是对全领域的断言。早期文献中存在过其他尝试测量舌面电位的报告,本库的贡献更接近于「首次把这类测量做成可公开复核的数据集」。引用时把「首次」限定在数据集层面,比限定在方法层面更稳妥。

7.3 已知的、可枚举的偏差

偏差 性质 后果
人群构成单一 单中心、单地区、健康志愿者 不能外推到患者、老年人或其他族裔
类别刻意均衡 三类各十三,非自然比例 用真实患病率或人群比例做先验会系统性错估
性别与类别不完全独立 女性二十三名、男性十六名分布到三组 性别效应与类别效应部分混杂
仅一条单通道 无同步参考 运动伪迹与生理响应无法在数据层面分离
单浓度单剂量 只覆盖一个工作点 无法刻画剂量反应
预处理不可逆 只有 6 Hz 低通后的信号 高频成分永久丢失,无法换滤波重做
时间零点未明示 只给窗口相对长度 潜伏期类特征的定义需要自行约定

这些偏差中,前三项决定了它不能被当作代表性样本,后四项决定了它在方法学上的天花板。

7.4 外部验证矩阵

验证维度 本库是否支持 说明
跨中心复现 否 无第二中心数据
跨设备复现 否 仅一台 Porti7
跨人群复现 否 仅健康志愿者
个体内重复性 否 每人一条
与其他模态对照 部分 可与行为学测试结果对照,但行为学原始分值未随库发布
与影像或组学对照 否 未提供
代码级复现 是 WFDB 格式与校验和保证文件级一致

这张表说明一件事:本库在「同一份文件能不能被原样取到」这一层是满分的,在「结论能不能跨条件成立」这一层几乎全否。这两件事在引用时应当分开表述。

7.5 它为何能持续:一个被反复引用的方法学起点

PhysioNet 上体量远大于它的库有很多,但味觉电生理这个细分方向几乎没有第二个公开选择。稀缺性让它持续被引用:任何想做味觉电生理的人,第一步都只能从这里开始。加上格式标准、许可开放、体量极小,维护成本接近于零,它不需要任何额外投入就能长期在线。§4.3 的案例也说明了它的另一种用途——作为教学样例,用来演示「漂移不去则特征失真」这类问题,比用大库更省事。

§8 生态位与历史

8.1 从药理副产物到味觉工具

PROP 进入味觉研究的路径有点绕。它最初作为抗甲状腺药物被合成,因为含硫脲基而带有明显苦味,服药者常常抱怨。研究者注意到,不同人对这种苦味的抱怨程度差异极大,于是把它拿来做敏感度分层的工具。此后几十年,它成了味觉遗传学里最常用的探针之一。

2017 年的这篇论文把电生理带进这条线索。此前的分层靠人报告,此后可以尝试用电位读数。这一步在方法学上不小,但在数据规模上很小——这也解释了为什么本库只有三十九人。

8.2 两系合作的组织形态

库的贡献者名单横跨两个系:电气与电子工程系负责电极、放大与信号处理,生物医学科学系负责受试者招募、刺激投放与分档测试。这种组织形态在味觉电生理里几乎是必需的,因为单靠工程侧拿不到合格的分档标签,单靠生物医学侧做不出能抗住口腔环境的采集前端。名单里出现的柔性共形电极,正是工程侧长期研究的方向,它在舌背这种曲面、湿润、易动的表面上比刚性电极更贴合。

8.3 在 PhysioNet 里的位置

PhysioNet 的主体是重症、心电、睡眠、脑电这些大方向,味觉属于边缘。这份库放在那里,更多是作为一个「非典型生理信号」的补充,而不是主力内容。这也意味着它不会得到社区级的维护与更新:没有版本迭代记录,没有勘误公告,也没有后续批次。发布即是终态。

8.4 与相邻资源的对照位置

在同一条「外周电生理」的谱上,它的位置介于两端之间。一端是皮肤电、心电这类成熟到有国际标准的信号,数据集动辄上千人;另一端是各类探索性的黏膜、汗腺、味蕾电位记录,公开数据几乎为零。本库站在靠探索的一侧,但用了一套接近成熟侧的工程规范(WFDB、校验和、明确许可),这是它最值得学的地方。

§9 使用指引

9.1 三种角色的路径

做传感器的人:先看 §2.2 的头文件字段与 §3.3 的通道选择理由,再看 §4.1 的波形形态。重点不是分类结果,而是「共模干扰在舌面能大到什么程度、需要多宽的动态范围」这个工程问题。这类使用者通常只需要三到五条记录就能得出结论。

做信号处理的人:从 §4.3 的案例进入,把去趋势方案做成对照实验,比较不同阶数、不同窗口下的特征稳定性。这批数据体量小,正好可以穷举所有合理的预处理组合,得到一份「哪些选择对结论有实质影响」的清单。

做小样本学习的人:本库的三十九条、三类、单通道构成一个天然的少样本设定。但要清楚它没有官方划分,任何跨方法比较都必须基于同一套留一法协议,否则数字不可比。

9.2 一条最短的可用流程

如果只想要一个能跑通并给出判断的最小流程,下面这条足够。

#-- 取数、校验、跑一条记录的特征
cd /tmp
curl -fLO https://physionet.org/static/published-projects/unicaprop/unicaprop-1.0.0.zip
unzip -q unicaprop-1.0.0.zip
python3 - <<'PY'
import numpy as np, wfdb
rec = wfdb.rdrecord("/tmp/unicaprop-1.0.0/d1")
x, fs = rec.p_signal[:, 0].astype(float), rec.fs
pre = int(6 * fs)
t = np.arange(len(x)) / fs
xd = x - np.polyval(np.polyfit(t[:pre], x[:pre], 2), t)
print("pre", round(float(xd[:pre].std()), 4))
print("post", round(float(xd[pre:].std()), 4))
print("area", round(float(np.trapz(xd[pre:], dx=1 / fs)), 4))
PY

三个输出分别对应基线的抖动强度、刺激后的波动强度、刺激后的净面积。把这三项做成散点,就能大致看出三组是否可分——比直接上分类器更快地得到一个方向性判断。

9.3 引用方式

引用本库时应当同时给出三样东西:数据集本身的 DOI、2017 年论文的 DOI、以及使用的版本号。数据集 DOI 保证别人能找到同一份文件,论文 DOI 保证别人能查到方法细节,版本号保证文件内容一致。三者缺一,复现链条就断了一环。

§10 AI 使用声明

项目 声明
文本生成 本文由 AI 辅助撰写,编辑负责结构与事实把关
数字来源 规模、结构、边界三类数字来自 PhysioNet 官方项目页与 Europe PMC 摘要
页面核验 项目主页与数据说明页已取;文件清单与许可页按官方正文转述
论文信息 仅阅读标题、期刊、年份与 DOI,未读全文
未核验内容 样本点数的逐文件值、增益与分辨率的逐条取值、注释行的确切写法
信号判读 未做任何信号处理,波形形态描述基于官方方法说明
图像 无配图;封面为生成式提示词,不含真实生理信号
免责 本文不构成临床或诊断建议;使用须遵守开放数据共享署名许可 1.0

常见误读(避坑清单)

说法 实际 证据
PROP 就是丙泊酚 是 6-n-丙基硫氧嘧啶,一种苦味刺激物 官方标题与摘要直接写出全称
这是麻醉或镇静数据集 全程无药物输注,受试者为清醒健康志愿者 官方描述中的 healthy voluntary subjects
这是脑电图 记录部位在舌背与舌腹之间,与头皮无关 官方电极配置说明
三十九人能训一个分类模型 只能做留一法可行性验证 论文本身的定位即评估有效性与局限
标签是电生理判读结果 来自定性尝味测试的行为学分组 官方标注说明
能拿到未滤波的原始信号 只发布 6 Hz 低通后的版本 官方处理流程写明 86 阶 FIR 低通
有三类就能做不平衡校正 三类各十三,是刻意均衡,非自然比例 官方分组说明
时长足够看味觉适应 刺激后仅约二十秒 官方时长与窗口说明
可以复现全部原始图 缺时间零点与具体预处理参数,只能复现趋势 官方未公布刺激投放的绝对时刻
许可需要单独申请 开放数据共享署名许可 1.0,可商用 官方许可页

FAQ

Q1:这份数据和麻醉学有什么关系?
没有关系。受试者是清醒的健康志愿者,接受的是苦味溶液刺激,不是静脉麻醉药。数据中不含意识水平、不含给药记录、不含脑电。名字里的 PROP 与丙泊酚只是字母相近。

Q2:为什么只有三十九个人?
官方没有解释招募口径,但从论文定位看,这是一次方法学可行性验证,目标是把测量链路跑通并公开,而不是做人群代表性抽样。三十九人按三类均分,是检验「三者是否可分」的最小可行规模。

Q3:三个类别是怎么分的?
按定性尝味测试的结果分。非尝味者对 PROP 几乎无感,超级尝味者对其苦味极为敏感,中等尝味者居中。分档结果写入每条记录的头文件,也集中列在 info.txt 里。

Q4:信号为什么被滤到 6 Hz,会不会丢掉信息?
会丢掉 6 Hz 以上的全部成分,包括肌电与部分伪迹。但味觉去极化本身是秒级过程,主要能量在极低频,6 Hz 对它足够。代价是无法再从数据中恢复宽带信息,也无法更换滤波器重做。

Q5:能用来做深度学习吗?
可以做少样本或元学习的方法演示,但不适合作为泛化能力的证据。三十九个样本、一个通道、三个类别,任何深度模型的容量都远超数据能约束的范围。

Q6:刺激是什么时候投的?
官方只给了窗口的相对长度——刺激前约六秒、刺激后约二十秒,没有给投放的绝对时刻。若要测量潜伏期,必须自行约定零点,并在方法部分明确写出。

Q7:可以和脑电数据合并使用吗?
技术上可以放在同一个训练集里,但没有意义:两者的生理来源、频段、幅值量级都不同,混合训练会让模型学到「这是哪一类信号」而不是「这是哪一种状态」。

Q8:数据里有没有年龄?
没有。头文件只标注性别与尝味者类别,论文背景段提到人群族裔的宏观比例,但没有逐人的年龄、身高、体质指数、吸烟与用药史。

Q9:为什么用辅助通道而不是生理通道?
因为舌面的接触电位漂移可以远超生理通道的量程,用窄量程会导致前级放大器饱和。辅助通道量程为正负三伏,牺牲部分信噪比换取不削顶。

Q10:许可允许商用吗?
允许。采用开放数据共享署名许可 1.0,商用与再分发均可,条件是署名。再分发时建议保留原始文件与校验和,避免二次加工引入的不一致。

Q11:这份库后续会更新吗?
官方没有发布更新计划,v1.0.0 自 2017 年上线后未见到新版本。可以按「发布即终态」来规划,不要把尚未出现的扩展写进方案。

Q12:怎么判断自己的分析是否踩了坑?
做一次极端检查:把标签随机打乱后重跑同一流程。如果打乱后性能下降不明显,说明流程学到的是漂移或记录顺序这类与标签无关的量,§4.3 的案例正是这种情况的原型。

术语表

术语 解释
PROP 6-n-丙基硫氧嘧啶,味觉研究中常用的苦味刺激物
电味觉图 对舌面电位的记录,为该库自造词,无标准定义
差分生物电位 两个电极之间的电位差,用以抑制共模干扰
共形电极 可贴合曲面组织而不易脱落的柔性电极
银球丝电极 银丝卷成的球形电极,用于舌腹接触
尝味者 对 PROP 苦味有可感知反应的人
非尝味者 对 PROP 苦味几乎无感的人,对应 NT
中等尝味者 敏感度居中的一类,对应 MT
超级尝味者 对 PROP 苦味极为敏感的一类,对应 ST
去极化 细胞膜电位向正值方向变化的过程
味蕾 舌乳头上含味觉受体的结构
舌乳头 舌面上的小突起,密度因人而异
基线漂移 缓慢的、与生理响应无关的电位偏移
等波纹滤波器 通带或阻带内误差呈等幅波动的滤波器设计
有限冲激响应 冲激响应长度有限的数字滤波器类型
过渡带 滤波器从通带到阻带的频率区间
相位失真 滤波器对不同频率成分延迟不一致造成的波形变形
量化位深 模数转换后每个样本的二进制位数
动态范围 可无失真测量的最大值与最小值之比
饱和 输入超出量程导致输出削顶
WFDB 生理信号的标准存储格式与工具链
头文件 描述采样率、增益、单位与注释的文本文件
留一法 每次留一个样本做测试的交叉验证方式
曲线下面积 波形与基线之间围出的面积,常用作响应强度指标
时间零点 刺激投放的时刻,是计算潜伏期的参照
习惯化 重复刺激后响应逐渐减弱的现象
心理物理测试 通过行为报告测量感知阈值的方法
剂量反应 响应强度随刺激浓度变化的规律

9.4 一份可执行的检查清单

在正式投入分析之前,按下面这张清单逐条过一遍,可以挡掉大多数低级错误。

检查项 通过标准 不通过时的处置
文件完整性 校验和全部匹配 重新下载,不要跳过
记录条数 三十九条,一一对应头文件 检查是否有文件被解压工具改名
采样率一致 全部为同一采样率 若有例外,单列并说明
单位确认 物理量单位为毫伏 与头文件字段核对后再换算
增益核对 整数除以增益等于物理量 若不成立,说明读的是未换算数组
标签完整性 三类各十三条 若缺,先打印原始注释再改正则
时间零点 已明确约定并写入方法 做敏感性扫描,报告结论是否随零点变化
去趋势 刺激前窗口的均值接近零 调整多项式阶数或窗口长度
评估协议 留一法或等价的小样本协议 不要用固定划分
结论表述 写成可行性而非泛化 若写成了泛化,重写结论段落

这十项里最容易漏的是第六项和第七项。前者在库的字段层次上不可见,必须自己打印出来看;后者在一开始不明显有害,但所有潜伏期类指标的数值都会随约定漂移。把这两项写进分析方案的「方法」小节,是审稿时最容易被问到的地方。

9.5 三种常见任务的落地样子

任务一:电极接触质量评估。 目标是回答「舌背共形电极在二十六秒里稳不稳」。做法是把三十九条记录的刺激前窗口标准差排成一列,看分布的尾部——尾部那几条就是接触不良的候选。这个任务完全不需要标签,也不需要分类器,只需要一条统计量。它的结论能直接支撑电极设计的改进。

任务二:分档可分性的可行性检验。 目标是回答「三类是否在电生理上可分」。做法是 §5.5 的留一法,特征控制在四到六个,结论写成「在某协议下可分性有限/存在趋势」。这个任务的价值不在于准确率高低,而在于把不可分的原因拆开:是特征不对、窗口不对,还是数据本身不携带信息。

任务三:预处理方案的敏感性分析。 目标是回答「结论对预处理有多敏感」。做法是固定分类器与评估协议,只改去趋势的阶数、窗口的起止、滤波的重做方式(在已滤波数据上再滤一次),看混淆矩阵怎么变。这个任务的产出是一张敏感性表,对后来者比单一准确率有用得多。

三个任务的共同点是:都不需要更多数据,只需要更清楚的问题。三十九条记录足以支撑这种「深挖一层」的工作,反而不足以支撑「多训一个模型」。

附录 A:核心数字核对表

项 值 来源 来源层级
受试者人数 39 官方项目页 官方
男性人数 16 官方数据说明页 官方
女性人数 23 官方数据说明页 官方
每组人数 13 官方数据说明页 官方
记录条数 39 官方数据说明页 官方
单条时长 26 秒 官方数据说明页 官方
刺激前窗口 约 6 秒 官方数据说明页 官方
刺激后窗口 约 20 秒 官方数据说明页 官方
采样率 2048 Hz 官方数据说明页 官方
量化位深 22 bit 官方数据说明页 官方
分辨率 1.43 µV 官方数据说明页 官方
低通截止 6 Hz 官方数据说明页 官方
滤波器阶数 86 官方数据说明页 官方
刺激浓度 3.2 mmol/L 官方数据说明页 官方
刺激体积 30 µL 官方数据说明页 官方
未压缩体积 约 7.9 MB 官方数据说明页 官方
设备型号 Porti7 官方数据说明页 官方
设备厂商 TMSI 官方数据说明页 官方
首发日期 2017-07-19 官方项目页 官方
数据集 DOI 10.13026/C2BH3H 官方项目页 官方
论文 DOI 10.1038/srep40353 Europe PMC 论文
期刊与年份 Scientific Reports,2017 Europe PMC 论文

附录 B:数字的来源分层

第一层:官方页面。 受试者人数、性别构成、三组均衡、记录时长、采样与量化参数、滤波参数、刺激浓度与体积、设备型号、体量、首发日期、许可类型,全部取自 PhysioNet 的项目主页与数据说明页。这些数字是本文的主干,凡与第一层冲突的说法一律以第一层为准。

第二层:论文摘要。 论文标题、期刊、年份、DOI 取自 Europe PMC 的检索结果。论文报告的具体分类性能数字不在本文引用之列,因为未读全文,且数据与性能应当分别归属。

第三层:未核实。 采集年份、受试者年龄范围、族裔构成的具体比例、时间零点的绝对时刻、逐文件样本点数、增益与分辨率的逐条取值,官方未公布或本次未逐文件核对,本文一律不写具体值。

附录 C:完整参考文献

  1. Sollai G, Melis M, Pani D, Cosseddu P, Usai I, Crnjar R, Bonfiglio A, Tomassini Barbarossa I. First objective evaluation of taste sensitivity to 6-n-propylthiouracil (PROP), a paradigm gustatory stimulus in humans. Scientific Reports. 2017;7:40353. doi:10.1038/srep40353
  2. Pani D, Usai I, Cosseddu P, Raffo L, Bonfiglio A, Melis M, Sollai G, Crnjar R, Tomassini Barbarossa I. UniCA ElectroTastegram Database (PROP). PhysioNet. 2017. doi:10.13026/C2BH3H
  3. Goldberger A, Amaral L, Glass L, Hausdorff J, Ivanov PCh, Mark R, Mietus J, Moody GB, Peng CK, Stanley HE. PhysioBank, PhysioToolkit, and PhysioNet: components of a new research resource for complex physiologic signals. Circulation. 2000;101(23):e215-e220.
  4. Moody GB, Mark RG. The impact of the MIT-BIH Arrhythmia Database. IEEE Engineering in Medicine and Biology Magazine. 2001;20(3):45-50.

附录 D:任务代码

下面这段把 §5 的若干步骤串成一次完整运行,输出一张含标签与特征的表,可直接存成 CSV 供后续分析。

#-- 全库特征表:去趋势 + 分窗统计 + 标签
import pathlib
import re
import numpy as np
import pandas as pd
import wfdb

root = pathlib.Path("/tmp/unicaprop-1.0.0")
rows = []

for hea in sorted(root.glob("d*.hea")):
    rid = hea.stem
    rec = wfdb.rdrecord(str(root / rid))
    x = rec.p_signal[:, 0].astype(float)
    fs = rec.fs
    pre = int(6 * fs)
    t = np.arange(len(x)) / fs

    xd = x - np.polyval(np.polyfit(t[:pre], x[:pre], 2), t)
    tail = xd[pre:]

    note = " ".join(rec.comments or [])
    sex = re.search(r"sex:\s*(\w+)", note, re.I)
    cls = re.search(r"(?:taster|status)[^A-Za-z]*(\w{2})", note, re.I)

    rows.append({
        "record": rid,
        "sex": sex.group(1).lower() if sex else "",
        "taster": cls.group(1).upper() if cls else "",
        "pre_sd": float(xd[:pre].std()),
        "post_sd": float(tail.std()),
        "post_max": float(tail.max()),
        "post_min": float(tail.min()),
        "post_area": float(np.trapz(tail, dx=1 / fs)),
        "n_samples": int(len(x)),
        "fs": int(fs),
    })

df = pd.DataFrame(rows)
df.to_csv("/tmp/unicaprop_features.csv", index=False)
print(df.groupby("taster")[["post_sd", "post_area"]].median().round(4))

这段代码有三处值得注意。其一,rdrecord 直接返回物理量,若只想核对增益应当改用 rdrecord(..., physical=False)。其二,comments 在不同记录里可能为 None,因此给了空列表兜底。其三,n_samples 与 fs 一并导出,便于核对是否每条记录都是二十六秒——若有例外,应当在特征表里显式标出,而不是静默处理。

运行完之后,把 taster 列与三个特征列画成箱线图,就能快速得到方向性判断。若三组的中位数呈单调次序,说明假设值得继续;若不呈,先回到 §4.3 的案例检查漂移估计,再考虑换窗口。

附录 E:如果只记五件事

  1. 这是舌面差分生物电位的刺激-响应库,不是脑电,也不是麻醉数据。
  2. PROP 是苦味刺激物 6-n-丙基硫氧嘧啶,与丙泊酚无关。
  3. 三十九人、三条记录一组十三,每条二十六秒、单通道、六赫兹低通后发布。
  4. 标签来自行为学定性测试,是分组而不是诊断。
  5. 它适合做方法学验证与少样本演示,不适合做规模建模。

编辑说明

本页核验于 2026 年 10 月 28 日。PhysioNet 项目主页与数据说明页正文可直接取得,受试者人数、分组、采集参数、刺激参数、处理流程、首发日期与许可均据此转述;文件清单按说明页所列名称引用,未逐文件下载核对样本点数与增益取值。论文信息取自 Europe PMC 的检索结果,仅读了标题、期刊、年份与 DOI,未读全文,因此正文不引用论文中的任何性能数字。库内麻醉与镇静题材的六份记录已逐篇核对标题与摘要段落,区隔结论写入 §6.1。凡官方未公布的数字,本页标注为未公布,未作推算或填补。


相关数据集导航

以下为站内 AI-Ready 数据集百科中与本词条共享多个主题标签的相关数据集,按相关度降序排列:

  • ehgdb — 共享标签:生理信号 / 可穿戴传感
  • eda-rest-sedation — 共享标签:生理信号 / 可穿戴传感
  • fpcgdb — 共享标签:生理信号 / 可穿戴传感
  • bridge2ai-voice — 共享标签:生理信号 / 可穿戴传感
  • bidmc-ppg — 共享标签:生理信号 / 可穿戴传感
  • ppg-dalia — 共享标签:生理信号 / 可穿戴传感
  • butqdb — 共享标签:生理信号 / 可穿戴传感
  • culm — 共享标签:生理信号 / 可穿戴传感
  • drivedb — 共享标签:生理信号 / 可穿戴传感
  • nesfdb — 共享标签:生理信号 / 可穿戴传感

导航说明:本章节由全站统一标签体系自动计算生成(标签重合度算法),双向可达;点击链接可跳转至对应数据集词条。

返回 AI-Ready 数据集