主要内容

侦探讲话

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

描述

实例

idx=检测语音(音频素,财政司司长)收益指数音频素对应于语音信号的边界。

实例

idx=检测语音(音频素,财政司司长,名称、值)指定使用一个或多个选项的选项名称、值对论点。

例子:detectSpeech(音频输入,fs,'Window',hann(512,'periodic'),'OverlapseLength',256)使用具有256点重叠的512点周期Hann窗口检测语音。

实例

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

实例

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

例子

全部崩溃

读入音频信号。将音频信号缩短至20秒。

[audioIn,fs]=音频读取(“彩虹-16-8-mono-114s.wav”); audioIn=audioIn(1:20*fs);

呼叫侦探讲话.指定没有输出参数以显示检测到的语音区域的曲线。

detectSpeech(音频输入,fs);

图包含轴对象。具有标题检测到的语音的轴对象包含37个类型的类型线,Constanlline,Patch。

这个侦探讲话函数使用基于每个分析帧的能量和频谱扩展的阈值算法。您可以修改,overtaplenth合并距离根据您的具体需要对算法进行微调。

窗口持续时间=0.074;%秒numwindowsamples = round(windowduration * fs);Win =汉明(NumWindowsamples,“周期性”);百分比=35;重叠= round(numwindowsamples * perciencoverlap / 100);mergeduration =.0.44;mergeDist=圆形(mergeDuration*fs);detectSpeech(audioIn,fs,“窗口”,赢,“重叠长度”,重叠,“合并距离”,合并主义者)

图中包含axes对象。标题为Detected Speech的axes对象包含19个line、constantline和patch类型的对象。

读入包含语音的音频文件。将音频信号分为前半部分和后半部分。

[audioIn,fs]=音频读取(“计数-16-44p1-mono-15秒波形”);上半部分=音频输入(1:楼层(numel(audioIn)/2));下半部分=音频输入(numel(上半部分):结束);

呼叫侦探讲话在音频信号的前半部分。指定两个输出参数以返回与检测到的语音区域相对应的索引和用于决策的阈值。

[SpeechIndex,thresholds]=detectSpeech(前半部分,fs);

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

detectSpeech(第二部分,fs,'门槛',阈值)

使用大型数据集

当您使用大型数据集时,或者当您部署用于实时推理的深度学习或机器学习管道时,重用语音检测阈值可提供显著的计算效率。下载并提取数据集[1].

URL =.'https://storage.googleapis.com/download.tensorflow.org/data/speech_commands_v0.01.tar.gz'; downloadFolder=tempdir;datasetFolder=fullfile(下载文件夹,'google_speech');如果~exist(datasetFolder,'dir')disp('正在下载数据集(1.9 GB)…')untar(url,数据集文件夹)终止

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

ads=音频数据存储(数据集文件夹,“包含子文件夹”符合事实的“标签源”,“foldernames”);

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

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

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

[adsTrain,adsTest]=拆分每个标签(ads,0.8);

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

阈值=零(numel(adsTrain.Files),2);对于ii=1:numel(adsTrain.Files)[audioIn,adsInfo]=read(adsTrain);[~,thresholds(ii,:)]=detectSpeech(audioIn,adsInfo.SampleRate);终止阈值平均值=平均值(阈值,1);

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

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

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

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

参考

[1] 语音命令:单词语音识别的公共数据集〉,由TensorFlow发布。知识共享署名4.0许可证。

读入一个音频文件并听它。绘制光谱图.

[audioIn,fs]=音频读取(“计数-16-44p1-mono-15秒波形”); 声音(音频输入,fs)频谱图(音频输入,汉恩(1024,“周期性”),512,1024,FS,“亚克斯”)

Figure包含axes对象。axes对象包含image类型的对象。

对于机器学习应用程序,通常需要从音频信号中提取特征光谱性在音频信号上的功能,然后绘制直方图显示光谱熵的分布。

熵=光谱性(audioIn,fs);numBins=40;直方图(熵,numBins,'正常化',“概率”) 标题(“音频信号的谱熵”)

图中包含一个Axis对象。标题为音频信号频谱熵的Axis对象包含一个直方图类型的对象。

根据您的应用程序,您可能希望仅从语音区域提取频谱熵。生成的统计信息更多地具有说话人的特征,而较少具有频道的特征。调用侦探讲话然后创建一个只包含检测到的语音区域的新信号。

SpeechIndex=检测语音(音频输入,fs);speechSignal=[];对于ii=1:size(speechindexes,1)speechSignal=[speechSignal;audioIn(speechindexes(ii,1):speechindexes(ii,2));终止

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

声音(speechSignal,fs)频谱图(speechSignal,hann(1024,“周期性”),512,1024,FS,“亚克斯”)

Figure包含axes对象。axes对象包含image类型的对象。

打电话给光谱性函数,然后绘制直方图显示光谱熵的分布。

熵=频谱特性(语音信号,fs);直方图(熵,numBins,'正常化',“概率”) 标题(“语音信号的谱熵”)

图中包含一个Axis对象。标题为语音信号谱熵的Axis对象包含一个直方图类型的对象。

输入参数

全部崩溃

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

数据类型:仅有一个的|双倍的

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

数据类型:仅有一个的|双倍的

名称值参数

指定可选的逗号分隔的字符对名称、值论点。名称是参数名和价值是对应的值。名称必须出现在引号内。您可以按任意顺序指定多个名称和值对参数,如下所示:name1,value1,...,namen,valuen.

例子:detectSpeech(音频输入,fs,'MergeDistance',100)

应用于时域的窗口,指定为逗号分隔对,由''和实向量。向量中的元素数必须在[2,大小(音频素1)]。矢量中的元素数量也必须大于overtaplenth.

数据类型:仅有一个的|双倍的

相邻窗口之间重叠的样本数,指定为逗号分隔对,由'overtaplenth'和范围为[0]的整数,大小(1)).

数据类型:仅有一个的|双倍的

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

笔记

语音检测的分辨率由跳长给出,其中跳长等于努梅尔() -overtaplenth.

数据类型:仅有一个的|双倍的

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

  • 如果您没有指定阈值这个侦探讲话函数使用在当前输入帧上计算的特征直方图来导出阈值。

  • 如果您指定阈值这个侦探讲话函数跳过新决策阈值的推导。当您使用大型数据集时,或者当您部署用于实时推理的深度学习或机器学习管道时,重用语音决策阈值可提供显著的计算效率。

数据类型:仅有一个的|双倍的

输出参数

全部崩溃

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

数据类型:仅有一个的|双倍的

用于决策的阈值,作为两个元素向量返回。阈值的顺序如下[能量阈值,频谱扩展阈值]。

数据类型:仅有一个的|双倍的

算法

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

算法中的阶段序列。

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

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

  3. 为短期能量和光谱扩展分布创建直方图。

  4. 对于每个直方图,根据 T = W × M 1. + M 2. W + 1. , 在哪里M1.M2.分别是第一个和第二个局部极大值。W被设定为5..

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

  6. 通过将短期能量和频谱扩展与其各自的阈值进行比较来创建掩码。若要将帧声明为包含语音,特征必须高于其阈值。

  7. 掩码是组合在一起的。对于要声明为语音的帧,短期能量和频谱扩展必须高于各自的阈值。

  8. 如果声明为语音的区域之间的距离小于合并距离.

参考

[1] Theodoros Giannakopoulos,“语音信号的静音消除和分割方法,在MATLAB中实现”,(雅典大学,雅典,2009年)。

扩展能力

C / C ++代码生成
使用Matlab®编码器生成C和C++代码™.

在R2020a中引入