You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

音频特征提取异常求助:帕金森病声音检测数值不符

帕金森病声音特征提取修正方案

核心问题排查方向

  • 特征单位不匹配:比如Jitter/Shimmer常存在绝对值与百分比的差异,数据集大概率采用百分比形式
  • 音频预处理缺失:未统一采样率、转换单声道、去除静音段,导致原始音频数据与数据集基准不一致
  • 非线性特征参数偏差:RPDE/DFA/D2等特征的计算窗口、嵌入维度等参数未对齐数据集采用的标准

修正后的特征提取代码

import librosa
import numpy as np
from pyAudioAnalysis import audioBasicIO as aIO
from pyAudioAnalysis import audioFeatureExtraction as aF

def extract_parkinson_features(audio_path):
    # 标准化音频预处理
    [Fs, x] = aIO.read_audio_file(audio_path)
    x = aIO.stereo_to_mono(x)
    # 去除静音段(匹配数据集预处理逻辑,阈值可调整)
    x = aF.remove_silence(x, Fs, 0.02, 0.02)[0]
    
    # 频率特征:MDVP:Fo(Hz), Fhi(Hz), Flo(Hz)
    f0, _, _ = librosa.pyin(x, fmin=80, fmax=600, sr=Fs)  # 限定帕金森患者发声频率范围提升精度
    fo = np.nanmean(f0)
    fhi = np.nanmax(f0)
    flo = np.nanmin(f0)
    
    # 声音变异特征:Jitter(%), Shimmer(%)
    features, _ = aF.stFeatureExtraction(x, Fs, 0.05*Fs, 0.025*Fs)
    jitter = features[1] * 100  # 转换为百分比,对齐数据集单位
    shimmer = features[9] * 100
    
    # 噪声谐波比:NHR, HNR
    nhr = features[13]
    # 用librosa计算标准HNR,替代工具默认实现
    harmonic = librosa.effects.harmonic(x, margin=8)
    hnr = np.mean(librosa.amplitude_to_db(np.abs(librosa.stft(harmonic))) - 
                  librosa.amplitude_to_db(np.abs(librosa.stft(x - harmonic))))
    
    # 非线性特征:RPDE, DFA, spread1, spread2, D2, PPE
    rpde = aF.feature_rpde(x, Fs, 0.2, 0.2, 100)[0]
    dfa = aF.feature_dfa(x)[0]
    spread1, spread2 = aF.feature_spread(x, Fs, 0.2, 0.2)
    d2 = aF.feature_correlation_dimension(x, Fs, 0.2, 0.2, 100)[0]
    ppe = aF.feature_ppe(x, Fs, 0.2, 0.2)[0]
    
    # 按指定顺序输出特征数组
    return np.array([fo, fhi, flo, jitter, shimmer, nhr, hnr, rpde, dfa, spread1, spread2, d2, ppe])

# 测试示例
test_audio = "sample_parkinson.wav"
extracted_features = extract_parkinson_features(test_audio)
print(extracted_features)

校准与验证步骤

  1. 基准对比:选取数据集中带标注的音频文件,用上述代码提取特征,逐维度对比数据集的标注值
  2. 参数微调:若某特征差异明显,单独调整对应计算参数(比如F0检测的频率范围、静音段阈值)
  3. 归一化对齐:采用数据集训练集的均值和标准差做归一化,而非单样本归一化,公式为:normalized_feature = (feature - train_mean) / train_std

内容的提问来源于stack exchange,提问作者Mina Emad

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 05:22:39