主要内容

detectSpeech

检测音频信号的言论边界

自从R2020a

描述

例子

idx= detectSpeech (audioIn,fs)返回索引audioIn对应于语音信号的边界。

例子

idx= detectSpeech (audioIn,fs,名称,值)使用一个或多个指定选项名称,值对参数。

例子:detectSpeech (audioIn、fs、“窗口”,损害(512年,“周期性”)、“OverlapLength”, 256年)检测语音使用与256点512点周期性损害窗口重叠。

例子

(idx,阈值)= detectSpeech (___)还返回阈值用于计算的边界的演讲。

例子

detectSpeech (___)没有输出参数显示检测到的情节演讲地区输入信号。

例子

全部折叠

读入一个音频信号。剪辑20秒的音频信号。

[audioIn, fs] = audioread (“彩虹- 16 - 8 mono - 114 secs.wav”);audioIn = audioIn (1:20 * fs);

调用detectSpeech。没有指定输出参数显示检测到的情节演讲区域。

detectSpeech (audioIn fs);

图包含一个坐标轴对象。坐标轴对象与标题发现演讲,包含时间(s)包含37个对象类型的线,constantline补丁。

detectSpeech函数使用一个基于能量阈值算法和光谱传播的分析框架。您可以修改窗口,OverlapLength,MergeDistance为您的特定需求调整算法。

windowDuration =0.074;%秒numWindowSamples =圆(windowDuration * fs);赢得=汉明(numWindowSamples,“周期”);percentOverlap =35;重叠=圆(numWindowSamples * percentOverlap / 100);mergeDuration =0.44;mergeDist =圆(mergeDuration * fs);detectSpeech (audioIn fs,“窗口”,赢了,“OverlapLength”重叠,“MergeDistance”mergeDist)

图包含一个坐标轴对象。坐标轴对象与标题发现演讲,包含时间(s)包含19线类型的对象,constantline补丁。

读入一个包含演讲的音频文件。将音频信号分为上半年和下半年。

[audioIn, fs] = audioread (“Counting-16-44p1-mono-15secs.wav”);库= audioIn(1:地板(元素个数(audioIn) / 2));后半叶= audioIn(元素个数(库):结束);

调用detectSpeech上半年的音频信号。指定两个输出参数返回相对应的指数区域检测到演讲和所用的阈值决定。

[speechIndices,阈值]= detectSpeech(库,fs);

调用detectSpeech在下半年没有输出参数绘制的区域检测到演讲。从先前的调用指定的阈值确定detectSpeech

detectSpeech(后半叶,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)…”解压(url, datasetFolder)结束

创建一个音频数据存储录音。使用文件夹名称标签。

广告= audioDatastore (datasetFolder,“IncludeSubfolders”,真的,“LabelSource”,“foldernames”);

减少95%的数据集对于本示例。

广告= splitEachLabel(广告,0.05,“排除”,“_background_noise”);

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

[adsTrain, adsTest] = splitEachLabel(广告,0.8);

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

阈值= 0(元素个数(adsTrain.Files), 2);2 = 1:元素个数(adsTrain.Files) [audioIn adsInfo] =阅读(adsTrain);[~,阈值(ii)): = detectSpeech (audioIn adsInfo.SampleRate);结束thresholdAverage =意味着(阈值,1);

使用预先计算的阈值来检测语音从测试数据集区域文件。情节三个文件的检测区域。

[audioIn, adsInfo] =阅读(adsTest);detectSpeech (audioIn adsInfo.SampleRate,“阈值”,thresholdAverage);

[audioIn, adsInfo] =阅读(adsTest);detectSpeech (audioIn adsInfo.SampleRate,“阈值”,thresholdAverage);

[audioIn, adsInfo] =阅读(adsTest);detectSpeech (audioIn adsInfo.SampleRate,“阈值”,thresholdAverage);

引用

[1]监狱长,皮特。“语音命令:一个公共数据集对单个词语音识别”。Distributed by TensorFlow. Creative Commons Attribution 4.0 License.

读入一个音频文件,听它。画出光谱图

[audioIn, fs] = audioread (“Counting-16-44p1-mono-15secs.wav”);声音(audioIn fs)谱图(audioIn损害(1024年“周期”fs), 512年,1024年,“桠溪”)

图包含一个坐标轴对象。坐标轴对象包含时间(s), ylabel频率(赫兹)包含一个类型的对象的形象。

对于机器学习应用程序,你经常想从音频信号中提取特征。调用spectralEntropy功能的音频信号,然后画出柱状图显示谱熵的分布。

熵= spectralEntropy (audioIn, fs);numBins = 40;直方图(熵,numBins“归一化”,“概率”)标题(音频信号的谱熵)

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

根据您的应用程序中,您可能希望从演讲的区域提取谱熵。所得的统计特征的演讲者和更少的特征通道。调用detectSpeech在音频信号,然后创建一个新的信号只包含检测到演讲的地区。

speechIndices = detectSpeech (audioIn, fs);speechSignal = [];2 = 1:尺寸(speechIndices 1) speechSignal = [speechSignal; audioIn (speechIndices (2, 1): speechIndices (2, 2)));结束

听语音信号,绘制光谱图。

声音(speechSignal fs)谱图(speechSignal损害(1024年“周期”fs), 512年,1024年,“桠溪”)

图包含一个坐标轴对象。坐标轴对象包含时间(s), ylabel频率(赫兹)包含一个类型的对象的形象。

调用spectralEntropy函数对语音信号,然后画出柱状图显示谱熵的分布。

熵= spectralEntropy (speechSignal, fs);直方图(熵,numBins“归一化”,“概率”)标题(语音信号的谱熵)

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

输入参数

全部折叠

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

数据类型:|

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

数据类型:|

名称-值参数

指定可选的双参数作为Name1 = Value1,…,以=家,在那里的名字参数名称和吗价值相应的价值。名称-值参数必须出现在其他参数,但对的顺序无关紧要。

R2021a之前,用逗号来分隔每一个名称和值,并附上的名字在报价。

例子:detectSpeech (fs, audioIn MergeDistance, 100)

应用于时域窗口,指定为逗号分隔两人组成的窗口”,一个真正的向量。向量中的元素的数量必须在[2,大小(audioIn,1)]。向量中的元素的数量也必须大于OverlapLength

数据类型:|

数量的样本之间的重叠相邻窗口,指定为逗号分隔两人组成的“OverlapLength”和一个整数范围在[0,大小(窗口,1))。

数据类型:|

样本的数量合并积极演讲检测决定,指定为逗号分隔两人组成的MergeDistance和一个负的标量。

请注意

语音检测的分辨率是由啤酒花长度、跳长度等于元素个数(窗口)−OverlapLength

数据类型:|

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

  • 如果你不指定阈值,detectSpeech利用直方图阈值的函数计算的特性在当前的输入框。

  • 如果您指定阈值,detectSpeech阈值函数跳过派生新的决定。重用演讲决定阈值提供了重要的计算效率处理大型数据集时,或当你部署一个深度学习机器学习管道实时推理。

数据类型:|

输出参数

全部折叠

开始和结束指数的言论地区,作为一个返回N2矩阵。N对应于个别演讲地区发现的数量。第一列对应于言论开始指数区域和第二列对应于结束演讲区域的指标。

数据类型:|

阈值用于决定,作为双元素返回向量。的阈值的顺序(能量阈值,光谱传播阈值]。

数据类型:|

算法

detectSpeech算法是基于[1],尽管修改,以便统计阈值是短期能源和光谱扩散,而不是短期的能量和频谱质心。图和步骤提供一个算法的高级概述。有关详细信息,请参见[1]

的阶段序列的算法。

  1. 音频信号转换为使用指定的时频表示窗口OverlapLength

  2. 短期能源和光谱分布计算出每一帧。光谱计算根据传播spectralSpread

  3. 直方图的创建短期能源和光谱扩散分布。

  4. 对于每一个柱状图,一个阈值是根据确定的 T = W × 1 + 2 W + 1 ,在那里12分别是第一和第二局部极大值。W被设置为5

  5. 光谱扩散和短期能源被连续通过五行移动平滑跨越时间中位数过滤器。

  6. 面具是由比较短期能源和光谱分布和各自的阈值。声明一个框架包含演讲,必须超出阈值特性。

  7. 面具的总和。为一个框架声明为演讲,短期能源和光谱传播必须高于各自的阈值。

  8. 区域声明为演讲是如果它们之间的距离小于合并MergeDistance

引用

[1]Giannakopoulos,塞奥佐罗斯•。“沉默的方法去除语音信号分割,在MATLAB中实现”,(2009年雅典,雅典大学)。

扩展功能

C / c++代码生成
生成C和c++代码使用MATLAB®编码器™。

版本历史

介绍了R2020a