52matlab技术网站,matlab教程,matlab安装教程,matlab下载

标题: 基于移动终端麦克风的音频信号在健康方面的应用探索 [打印本页]

作者: matlab的旋律    时间: 2021-12-16 01:07
标题: 基于移动终端麦克风的音频信号在健康方面的应用探索
本帖最后由 matlab的旋律 于 2021-12-17 03:36 编辑

    前面介绍了基于移动终端麦克风的睡眠监测功能,本文试图通过移动终端采集的人体睡眠过程中产生的音频信号进行分析,从而实现人体异常情况筛查,如如常见的睡眠监测系统包括人体音频信号的监测。
[attach]350[/attach]
下面首先介绍一下音频信号基本参数的应用范围,具体包括:
通过上面参数的分析,可以得出比较适合人体相关的音频信号参数以及存储方法,具体如下:
对于需要进行实时监测的音频信号,如此设置的参数量
方法流程:
其中音频信号端点检测的效果如下图所示:
[attach]351[/attach]
      不过这样的监测方法方法也存在缺点,虽然端点检测可以在下位机进行实时计算,但相关的传统实时分类目前还没有一个被行业认可的高精度算法,从零开始研究费时费力。
      常见实现语音信号分类识别的有基于机器学习和深度学习网络等方法。如在AudioSet 数据集上训练的YAMNet模型可以识别521种声音。通过长度25毫秒,步长为10毫秒,且具有周期性Hann时间窗的短时傅里叶变换计算出声谱图作为模型输入,然后使用YAMNet进行分类。其中YAMNet进行分类效果如图所示:
[attach]352[/attach]
其中对应代码如下:
  1. [audioIn,fs] = audioread('shuohua.wav');%读取原始音频信号
  2. audioIn = audioIn(:,1);%只需要保留单声道
  3. [sounds,timeStamps] = classifySound(audioIn,fs);%分类,输出类别和对应的时间戳

  4. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  5. %绘制原始信号
  6. t = (0:numel(audioIn)-1)/fs;
  7. plot(t,audioIn)
  8. xlabel('Time (s)')
  9. axis([t(1),t(end),-1,1])
  10. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

  11. textHeight = 1.1;
  12. for idx = 1:numel(sounds)%绘制对应类别的位置
  13.     patch([timeStamps(idx,1),timeStamps(idx,1),timeStamps(idx,2),timeStamps(idx,2)], ...
  14.         [-1,1,1,-1], [0.3010 0.7450 0.9330], 'FaceAlpha',0.2);
  15.     text(timeStamps(idx,1),textHeight+0.05*(-1)^idx,sounds(idx))
  16. end
复制代码
当然直接使用这种方法也存在明显的不足之处,就是计算量大,不宜在下位机进行实时运算。一种较好解决运算量较大的方法具体步骤如下:
第一步:通过端点检测法识别可能为信号的位置,并保存,同时计算噪声分贝数;
第二步:上传保存的信号到APP端;
第三步:对保存的信号进行分类,这一步包括两部分,短时傅里叶变换和输入迁移后的YAMNET分类;
第四步:应用。
具体流程图​如下所示:
[attach]353[/attach]







欢迎光临 52matlab技术网站,matlab教程,matlab安装教程,matlab下载 (http://www.52matlab.com/) Powered by Discuz! X3.2