主要内容

classifySound

在音频信号进行分类

描述

例子

听起来= classifySound (audioIn,fs)返回音频输入声音类发现随着时间的推移,audioIn,采样率fs

例子

听起来= classifySound (audioIn,fs,名称,值)使用一个或多个指定选项名称,值对参数。

例子:听起来= classifySound (audioIn、fs“SpecificityLevel”,“低”)使用低特异性分类的声音。

例子

(听起来,时间戳)= classifySound (___)还返回时间戳与每个检测到的声音。

例子

(听起来,时间戳,resultsTable)= classifySound (___)还返回一个表,其中包含结果的细节。

例子

classifySound (___)没有输出参数创建一个词云识别声音的音频信号。

这个函数需要音频工具箱™和深度学习工具箱™。

例子

全部折叠

下载并解压缩音频工具箱™YAMNet支持。金宝app

如果音频工具箱支持YAMNet没有安装,然金宝app后第一次调用函数提供了一个链接到下载位置。下载模式,点击链接。将文件解压缩到一个位置在MATLAB的道路。

另外,执行以下命令来下载并解压缩YAMNet模型到你的临时目录中。

downloadFolder = fullfile (tempdir,“YAMNetDownload”);loc = websave (downloadFolder,“https://ssd.mathworks.com/金宝appsupportfiles/audio/yamnet.zip”);YAMNetLocation = tempdir;YAMNetLocation解压(loc)目录(fullfile (YAMNetLocation,“yamnet”))

产生1秒的粉红噪声假设16千赫采样率。

fs = 16 e3;x = pinknoise (fs);

调用classifySound粉红噪声信号和采样率。

identifiedSound = classifySound (x, fs)
identifiedSound =“粉红噪声”

读入一个音频信号。调用classifySound返回检测到声音和对应的时间戳。

[audioIn, fs] = audioread (“multipleSounds-16-16-mono-18secs.wav”);(声音、时间戳)= classifySound (audioIn fs);

画出音频信号和标签检测到声音的地区。

t =(0:元素个数(audioIn) 1) / fs;情节(t, audioIn)包含(“时间(s)”)轴([t(1),(结束),1,1])textHeight = 1.1;idx = 1:元素个数(声音)补丁([时间戳(idx, 1),时间戳(idx, 1),时间戳(idx, 2),时间戳(idx, 2)),(1,1,1,1),(0.3010 0.7450 0.9330),“FaceAlpha”,0.2);文本(时间戳(idx, 1), textHeight + 0.05 * (1) ^ idx,声音(idx))结束

选择一个区域,只听选定的区域。

sampleStamps =地板(时间戳* fs) + 1;soundEvent =3;isolatedSoundEvent = audioIn (sampleStamps (soundEvent 1): sampleStamps (soundEvent 2));声音(isolatedSoundEvent, fs);显示器(“检测到声音= '+声音(soundEvent))
“检测到声音=打鼾”

读入一个音频信号包含多个不同的声音事件。

[audioIn, fs] = audioread (“multipleSounds-16-16-mono-18secs.wav”);

调用classifySound音频信号和采样率。

(声音,~,soundTable) = classifySound (audioIn fs);

听起来字符串数组包含在每个地区最有可能的声音事件。

听起来
听起来=1×5弦“流”“机关枪”“打鼾”“树皮”“喵喵”

soundTable包含详细的信息在每个区域中发现,包括得分手段和分析信号最大值。

soundTable
soundTable =5×2表时间戳结果___________ ___________ 0 3.92}{4×3表4.0425 - 6.0025}{3×3表10.658 - 12.373 6.86 - 9.1875{表2×3}}{4×3表12.985 - 16.66{4×3表}

查看最后的检测区域。

soundTable.Results{结束}
ans =4×3表“动物”听起来AverageScores MaxScores ________________________ _________________ ____ 0.80243 - 0.99831 0.79514 - 0.99941“家畜、宠物”“猫”0.8048 - 0.99046 0.6342 - 0.90177“喵喵”

调用classifySound一次。这一次,IncludedSounds动物这样的函数只保留区域动物声音检测到类。

(声音、时间戳、soundTable) = classifySound (audioIn fs,“IncludedSounds”,“动物”);

听起来数组只返回指定为包含时发出的声音。的听起来现在包含的两个实例数组动物声明为相对应的区域树皮猫叫之前。

听起来
听起来=1×2字符串“动物”“动物”

声表只包括地区指定的声音类检测。

soundTable
soundTable =2×2表时间戳结果___________ ___________ 12.985 - 16.66 10.658 - 12.373{4×3桌}{4×3表}

查看最后一个检测到的地区soundTable。结果表还包括统计在该地区的所有检测到的声音。

soundTable.Results{结束}
ans =4×3表“动物”听起来AverageScores MaxScores ________________________ _________________ ____ 0.80243 - 0.99831 0.79514 - 0.99941“家畜、宠物”“猫”0.8048 - 0.99046 0.6342 - 0.90177“喵喵”

探索这类支持的声音金宝appclassifySound,使用yamnetGraph

读入一个音频信号和电话classifySound检查最可能听起来按时间顺序安排检测。

[audioIn, fs] = audioread (“multipleSounds-16-16-mono-18secs.wav”);听起来= classifySound (audioIn fs)
听起来=1×5弦“流”“机关枪”“打鼾”“树皮”“喵喵”

调用classifySound再次,ExcludedSounds猫叫排除的声音猫叫从结果。以前分为部分猫叫现在是归类为,这是其前任AudioSet本体。

听起来= classifySound (audioIn fs,“ExcludedSounds”,“喵喵”)
听起来=1×5弦“流”“机关枪”“打鼾”“树皮”“猫”

调用classifySound再次,ExcludedSounds。当你排除声音,所有的继任者也排除在外。这意味着扣除的声音也排除了声音猫叫。最初分为部分猫叫现在是归类为家畜、宠物,这是前任AudioSet本体。

听起来= classifySound (audioIn fs,“ExcludedSounds”,“猫”)
听起来=1×5弦“流”“机关枪”“打鼾”“树皮”“家畜、宠物”

调用classifySound再次,ExcludedSounds家畜、宠物。声音类,家畜、宠物是前任两个树皮猫叫,所以排除,先前确定的声音树皮猫叫现在都是确定为的前身吗家畜、宠物,这是动物

听起来= classifySound (audioIn fs,“ExcludedSounds”,“国内的动物,宠物”)
听起来=1×5弦“流”“机关枪”“打鼾”“动物”“动物”

调用classifySound再次,ExcludedSounds动物。声音类动物没有前辈。

听起来= classifySound (audioIn fs,“ExcludedSounds”,“动物”)
听起来=1×3的字符串“流”“机关枪”“打鼾”

如果你想避免检测猫叫和它的前辈,但继续检测的继任者在同样的前辈,使用IncludedSounds选择。调用yamnetGraph所有支持的类的列表。金宝app删除猫叫和它的前辈从数组中所有的类,然后调用classifySound一次。

(~、类)= yamnetGraph;classesToInclude = setxor(类,“喵喵”,“猫”,“国内的动物,宠物”,“动物”]);听起来= classifySound (audioIn fs,“IncludedSounds”classesToInclude)
听起来=1×4弦“流”“机关枪”“打鼾”“树皮”

读入一个音频信号,听它。

[audioIn, fs] = audioread (“multipleSounds-16-16-mono-18secs.wav”);声音(audioIn fs)

调用classifySound没有输出参数来生成一个词云检测的声音。

classifySound (audioIn fs);

修改默认的参数classifySound探讨影响“云”这个词。

阈值=0.1;minimumSoundSeparation =0.92;minimumSoundDuration =1.02;classifySound (audioIn fs,“阈值”阈值,“MinimumSoundSeparation”minimumSoundSeparation,“MinimumSoundDuration”,minimumSoundDuration);

输入参数

全部折叠

音频输入,指定为一个一个频道的信号(列向量)。

数据类型:|

采样率在赫兹,指定为一个积极的标量。

数据类型:|

名称-值对的观点

指定可选的逗号分隔条名称,值参数。的名字参数名称和吗价值相应的价值。的名字必须出现在引号。您可以指定几个名称和值对参数在任何顺序Name1, Value1,…,的家

例子:“阈值”,0.1

报告听起来,信心阈值指定为逗号分隔组成的“阈值”和一个标量范围(0,1)。

数据类型:|

最小连续分离地区检测到相同的声音在几秒钟内,指定为逗号分隔组成的“MinimumSoundSeparation”和积极的标量。区域小于最小声音分离合并。

数据类型:|

最小时间秒,发现声音地区指定为逗号分隔组成的“MinimumSoundDuration”和积极的标量。地区比最低的声音短持续时间被丢弃。

数据类型:|

听起来包括在结果,指定为逗号分隔组成的“IncludedSounds”一个特征向量,单元阵列特征向量,标量字符串或字符串数组。使用yamnetGraph检查和分析支持的声音金宝appclassifySound。默认情况下,所有支持的声音。金宝app

这个选项不能被使用的ExcludedSounds选择。

数据类型:字符|字符串|细胞

声音从结果,排除指定为逗号分隔组成的“ExcludedSounds”一个特征向量,单元阵列特征向量,标量字符串或字符串数组。当你指定一个排除声音,排除的任何继任者声音也排除在外。使用yamnetGraph检查有效声音类和他们的前辈们根据AudioSet本体和接班人。默认情况下,不排除声音。

这个选项不能被使用的IncludedSounds选择。

数据类型:字符|字符串|细胞

特异性的报道声音,指定为逗号分隔组成的“SpecificityLevel”“高”,“低”,或“没有”。集SpecificityLevel“高”使函数强调特定声音类而不是一般类别。集SpecificityLevel“低”函数返回的特定声音的最一般的声音类别而不是类。集SpecificityLevel“没有”函数返回最可能的声音,无论其特异性。

数据类型:字符|字符串

输出参数

全部折叠

听起来发现随着时间的推移在音频输入,返回一个字符串数组,其中包含按时间顺序检测到的声音。

时间戳与发现听起来在几秒钟内,作为一个返回N2矩阵。N是检测到的数量的声音。每一行的时间戳包含检测到声音的开始和结束时间。

详细的声音分类的结果,作为一个表返回。表中的行数等于良好的地区发现的数量。列如下。

  • 时间戳——时间戳相应区域分析。

  • 结果——表与三个变量:

    • 听起来——听起来在每个地区发现。

    • AverageScores——意味着网络分数对应于每个检测到声音类。

    • MaxScores——最大网络分数对应于该地区的每个检测到声音类。

算法

全部折叠

classifySound函数使用YAMNet分类音频段划分为类AudioSet本体所描述的声音。的classifySound函数进行预处理的音频,在YAMNet所需的格式和后处理YAMNet的预测与常见的任务,使结果更解释。

进行预处理

  1. 重新取样audioIn16千赫,单精度。

  2. 缓冲到l重叠的部分。每一段0.98秒和0.8575秒的片段重叠。

  3. 每一部分通过一个片面的短时傅里叶变换使用25 ms周期性损害窗口10 ms跳和DFT 512点。音频目前由一个257 - - - 96l数组,其中257是片面的光谱和96的箱子数量的光谱谱图。

  4. 把复杂的光谱值大小和丢弃相位信息。

  5. 片面的级频谱穿过64 -带mel-spaced滤波器银行然后和每个乐队的大小。音频现在代表由96 - 64 - 1 - - - - - - -l数组,其中96是梅尔的光谱谱图的数量,64是梅尔乐队的数量,谱图现在是间隔在第四维兼容YAMNet模型。

  6. 梅尔·色转换为对数尺度。

预测

通过96 - 64 - 1 - - - - - - -l返回一个数组通过YAMNet梅尔·色的l521年——矩阵。YAMNet对应的输出信心得分为每个521声音类。

后处理

声音事件检测区域
  1. 通过每个521信心的信号通过一个移动平均滤波器的窗口长度7。

  2. 的信号通过一个移动的中值滤波窗口长度为3。

  3. 信心的信号转换为二进制面具使用指定的阈值

  4. 短于丢弃任何声音MinimumSoundDuration

  5. 合并区域拉近MinimumSoundSeparation

巩固区域重叠的声音

巩固了良好的区域重叠50%以上为单一的地区。该地区开始时间是最小的开始时间的声音。该地区结束时间是最大的所有声音的结束时间。函数返回时间戳、声音类和均值和最大信心的声音类内的地区resultsTable

选择特异性的声音

你可以设置你的声音的特异性水平分类使用SpecificityLevel选择。例如,假设有四个声音类健康组与下列相应的平均成绩在声音地区:

  • - - -0.82817

  • - - -0.81266

  • 细流,运球- - -0.23102

  • - - -0.20732

声音类,,,细流,运球,位于AudioSet本体所表示的图:

图AudioSet本体的水,流,倒,细流,运球。流是一个继任者的水自然声音的继任者。细流,运球的继任者倒液体的继任者的继任者听起来的东西。

函数返回的声音类组的声音听起来输出参数依据SpecificityLevel:

  • “高”(默认),在这种模式下,是首选,细流,运球是首选对该地区平均评分更高,那么函数返回听起来输出为该地区。

  • “低”,在这种模式下,声音类的最一般的本体论范畴的意思是最高的信心在返回该地区。为细流,运球,最一般的类别声音的东西。为,最一般的类别自然的声音。因为意味着最高信心声音地区,函数返回自然的声音

  • “没有”——在这种模式下,函数返回的声音类意味着信心得分最高,而在这个例子中

引用

[1]Gemmeke, Jort F。,et al. “Audio Set: An Ontology and Human-Labeled Dataset for Audio Events.”2017年IEEE国际会议音响、演讲和信号处理(ICASSP)IEEE 2017,页776 - 80。DOI.org (Crossref),doi: 10.1109 / ICASSP.2017.7952261。

[2]好时,肖恩,et al。”CNN大规模的音频分类架构。”2017年IEEE国际会议音响、演讲和信号处理(ICASSP),2017岁的IEEE 131 - 35页。DOI.org (Crossref),doi: 10.1109 / ICASSP.2017.7952132。

介绍了R2020b