主要内容

检测

检测音频信号中的语音边界

描述

例子

idx.=检测expeech(奥地策FS.返回指数奥地策对应于语音信号的边界。

例子

idx.=检测expeech(奥地策FS.名称,价值使用一个或多个指定选项名称,价值对论点。

例子:检测echech(AudioIn,FS,'窗口',HANN(512,'定期'),'overlaplenth',256)使用具有256点重叠的512点周期Hann窗口来检测语音。

例子

[idx.阈值] =检测坐下(___还返回用于计算语音边界的阈值。

例子

检测echech(___没有输出参数在输入信号中显示检测到的语音区域的曲线图。

例子

全部收缩

读取音频信号。将音频信号剪辑到20秒。

[AudioIn,FS] = audioread('rainbow-16-8-mono-114secs.wav');AudioIn = AudioIn(1:20 * FS);

称呼检测。指定没有输出参数以显示检测到的语音区域的曲线。

检测expeech(AudioIn,FS);

图包含轴。具有标题检测的语音的轴包含37个类型的类型线,响应下的补丁。

检测函数使用基于能量和频谱传播的阈值算法。你可以修改窗户overtaplenth, 和合作微调算法以满足您的特定需求。

WindowDuration =.0.074;%秒numwindowsamples = round(windowduration * fs);Win =汉明(Numwindowsamples,'定期');百分比=35.;重叠= round(numwindowsamples * perciencoverlap / 100);mergeduration =.0.44;Mergedist = round(Mergeduration * FS);检测echeech(AudioIn,FS,“窗户”,赢,“overlaplength”,交叠,“Mergedistance”,合并主义者)

图包含轴。具有标题检测到的语音的轴包含19个类型的线,响应条件,块。

阅读包含语音的音频文件。将音频信号拆分为上半部和下半部分。

[AudioIn,FS] = audioread('Counting-16-44p1-mono-15secs.wav');FirstHalf = AudioIn(1:楼层(Numel(AudioIn)/ 2));secondhalf = audioin(numel(firsthalf):结束);

称呼检测在音频信号的前半部分。指定两个输出参数以返回对应于检测到的语音区域的索引以及用于该决定的阈值。

[语音indices,阈值] =检测echech(FirstHalf,FS);

称呼检测在下半部分,没有输出参数来绘制检测到的语音区域。指定从前一个呼叫确定的阈值检测

检测expeech(第二个,FS,'门槛',阈值)

使用大数据集

重用语音检测阈值在使用大数据集时提供显着的计算效率,或者在部署深度学习或机器学习管道以进行实时推断时。下载并提取数据集[1]

URL =.'https://storage.googleapis.com/download.tensorflow.org/data/speech_commands_v0.01.tar.gz';downloadfolder = tempdir;datasetfolder = fullfile(DownloadFolder,'google_speech');如果〜存在(DataSetFolder,'dir')disp('下载数据集(1.9 GB)...')Untar(URL,DataSetFolder)结尾

创建一个音频数据存储来指向录制。使用文件夹名称作为标签。

广告= audiodataStore(DataSetFolder,'insertumbfolders',真的,'labelsource''foldernames');

为此示例的目的,将数据集减少95%。

广告= SpliteachLabel(广告,0.05,'排除''_背景噪音');

创建两个数据存储:一个用于培训和一个用于测试。

[adstrain,adstest] = splitheachlabel(广告,0.8);

计算训练数据集的平均阈值。

阈值=零(Numel(adstrain.files),2);为了II = 1:numel(adstrain.files)[isausin,adsinfo] =读取(adstrain);[〜,阈值(ii,:)] =检测echech(AudioIn,Adsinfo.Samplevere);结尾阈值verage =平均值(阈值,1);

使用预先计算的阈值从测试数据集中检测文件上的语音区域。为三个文件绘制检测到的区域。

[Acioin,Adsinfo] =读(adstest);检测echech(AudioIn,Adsinfo.Samplerate,'门槛',阈值verage);

[Acioin,Adsinfo] =读(adstest);检测echech(AudioIn,Adsinfo.Samplerate,'门槛',阈值verage);

[Acioin,Adsinfo] =读(adstest);检测echech(AudioIn,Adsinfo.Samplerate,'门槛',阈值verage);

参考

[1]守望者,皮特。“语音命令:单词语音识别的公共数据集。”分布到Tensorflow。Creative Commons归因4.0许可证。

阅读音频文件并收听它。绘图谱图

[AudioIn,FS] = audioread('Counting-16-44p1-mono-15secs.wav');声音(AudioIn,FS)谱图(AudioIn,Hann(1024,'定期'),512,1024,FS,'yaxis'

图包含轴。轴包含类型图像的对象。

对于机器学习应用程序,您通常希望从音频信号中提取功能。打电话给光谱产物在音频信号上的功能,然后绘制直方图显示光谱熵的分布。

熵= Spectralentropy(AudioIn,FS);numbins = 40;直方图(熵,酸尼斯,'正常化''可能性') 标题(“音频信号的光谱熵”

图包含轴。具有音频信号标题谱熵的轴包含类型直方图的对象。

根据您的应用程序,您可能希望仅从语音区域中提取光谱熵。由此产生的统计数据是扬声器的更具特征,并且频道的特征更少。称呼检测在音频信号中,然后创建一个仅包含检测到的语音区域的新信号。

语音indices =检测echech(AudioIn,FS);SpeemSignal = [];为了II = 1:尺寸(语音indices,1)SpeechSignal = [SpeemSignal; AudioIn(SpeepIndices(II,1):语音indices(II,2))];结尾

听听语音信号并绘制频谱图。

声音(SpeemSignal,FS)频谱图(SpeechSignal,Hann(1024,'定期'),512,1024,FS,'yaxis'

图包含轴。轴包含类型图像的对象。

打电话给光谱产物在语音信号上的功能,然后绘制直方图显示光谱熵的分布。

熵= Spectralentropy(SpeechSignal,FS);直方图(熵,酸尼斯,'正常化''可能性') 标题(“语音信号的光谱熵”

图包含轴。具有标题光谱熵的语音信号的轴包含类型直方图的对象。

输入参数

全部收缩

音频输入,指定为列向量。

数据类型:单身的|双倍的

Hz的采样率,指定为标量。

数据类型:单身的|双倍的

名称值对参数

指定可选的逗号分离对名称,价值论点。名称是参数名称和价值是相应的价值。名称必须出现在引号内。您可以以任何顺序指定多个名称和值对参数name1,value1,...,namen,valuen

例子:检测echech(AudioIn,FS,'Mergedistance',100)

应用于时域的窗口,指定为逗号分隔的配对组成窗户'和一个真正的矢量。向量中的元素数必须在范围[2,尺寸(奥地策1)]。矢量中的元素数量也必须大于overtaplenth

数据类型:单身的|双倍的

相邻窗口之间重叠的样本数,指定为由“逗号分隔的对”组成“overtaplenth'范围内的整数[0,尺寸(窗户1))。

数据类型:单身的|双倍的

合并正面语音检测决策的样本数量,指定为由'逗号分隔的对合作'和一个非负标量。

笔记

语音检测的分辨率由跳长表示,其中跳长度等于numel(窗户) -overtaplenth

数据类型:单身的|双倍的

决定的阈值,指定为逗号分隔的配对组成阈值'和一个双元素矢量。

  • 如果您未指定阈值, 这检测函数通过使用通过当前输入帧计算的特征的直方图来衍生阈值。

  • 如果您指定阈值, 这检测函数跳过新决策阈值的推导。重用语音判决阈值在使用大数据集时提供了显着的计算效率,或者在部署深度学习或机器学习管道以实时推理时提供了显着的计算效率。

数据类型:单身的|双倍的

输出参数

全部收缩

讲话区的开始和结束指数,作为一个返回N- 2矩阵。N对应于检测到的各个语音区域的数量。第一列对应于语音区域的起始指标,第二列对应于语音区域的结束索引。

数据类型:单身的|双倍的

用于决策的阈值,作为两个元素向量返回。阈值是顺序[能量门槛光谱传播阈值]。

数据类型:单身的|双倍的

算法

检测算法基于[1],虽然修改使得阈值的统计数据是短期能量和光谱传播,而不是短期能量和光谱质心。图和步骤提供了算法的高级概述。有关详细信息,请参阅[1]

算法中的阶段序列。

  1. 使用指定的音频信号将音频信号转换为时频表示窗户overtaplenth

  2. 为每个帧计算短期能量和光谱扩展。根据条件计算光谱差距光谱覆盖

  3. 为短期能量和光谱传播分布而创建直方图。

  4. 对于每个直方图,根据阈值 T. = W. × m 1 + m 2 W. + 1 , 在哪里m1m2是第一和第二局最大的最大值。W.设定为5.

  5. 通过连续的五元素移动中值过滤器通过连续的五元件,横跨频谱扩散和短期能量都是平滑的。

  6. 通过将短期能量和光谱传播与各自的阈值进行比较来创建掩模。要将帧声明为包含语音,则必须高于其阈值。

  7. 掩模组合。对于被宣布为语音的帧,短期能量和光谱扩展必须高于它们各自的阈值。

  8. 由于它们之间的距离小于合作

参考

[1] Giannakopoulos,Theodoros。“2009年雅典大学在Matlab实施的沉默去除和演讲信号分割的方法。

扩展能力

C / C ++代码生成
使用MATLAB®Coder™生成C和C ++代码。

在R2020A中介​​绍