主要内容

voiceActivityDetector

检测音频信号中语音的存在

描述

voiceActivityDetector系统对象™检测音频段中是否存在语音。你也可以用thevoiceActivityDetector系统对象输出每个频率单元的噪声方差估计值。

检测言语的存在:

  1. 创建voiceActivityDetector对象,并设置其属性。

  2. 使用参数调用对象,就像调用函数一样。

要了解更多关于System对象如何工作的信息,请参见什么是系统对象?

创建

描述

VAD = voiceActivityDetector创建一个System对象,VAD,它通过每个输入通道独立地检测语音的存在。

VAD = voiceActivityDetector (名称,值每个属性集的名字到指定的价值.未指定的属性具有默认值。

例子:通过采用= voiceActivityDetector(“InputDomain”、“频率”)创建一个System对象,VAD,它接受频域输入。

性质

全部展开

除非另有说明,否则属性为不能,这意味着您不能在调用对象后更改其值。对象在调用时锁定,并且释放函数打开它们。

如果一个属性是可调,您可以随时更改它的值。

有关更改属性值的更多信息,请参见在MATLAB中使用系统对象进行系统设计

输入信号的域,指定为“时间”“频率”

可调:没有

数据类型:烧焦|一串

FFT长度,指定为正标量。默认值为[],这意味着FFT长度等于输入的行数。

可调:没有

依赖关系

要启用此属性,请设置InputDomain“时间”

数据类型:|双重的

计算离散时间傅里叶变换(DTFT)前应用的时域窗口函数,记为“损害”“矩形”“平顶”“汉明”“切比雪夫”,或“凯撒”

使用以下函数的算法设计窗口函数:

可调:没有

依赖关系

要启用此属性,请设置InputDomain“时间”

数据类型:烧焦|一串

窗口的旁瓣衰减,单位为dB,指定为实正标量。

可调:没有

依赖关系

要启用此属性,请设置InputDomain“时间”窗口“切比雪夫”“凯撒”

数据类型:|双重的

从一帧沉默到一帧语音的转换概率,指定为范围[0,1]内的标量。

可调:

数据类型:|双重的

从语音帧转换到静默帧的概率,指定为[0,1]范围内的标量。

可调:

数据类型:|双重的

使用

描述

例子

可能性noiseEstimate) = VAD (音频素在输入端应用语音活动检测器,音频素,并返回语音存在的概率。它还返回每个频率单元的估计噪声方差。

输入参数

全部展开

声音活动检测器的音频输入,指定为标量、矢量或矩阵。如果音频素是一个矩阵,列被视为独立的音频通道。

第一次调用后,音频输入的大小被锁定voiceActivityDetector对象。改变…的大小音频素,叫释放在对象上。

如果InputDomain设置为“时间”音频素必须是实值。如果InputDomain设置为“频率”音频素可以是实值或复值。

数据类型:|双重的
复数的支持:金宝app

输出参数

全部展开

语音存在的概率,作为具有相同列数的标量或行向量返回音频素

数据类型:|双重的

估计每个频率单元的噪声方差,作为列向量或矩阵返回,列数与音频素

数据类型:|双重的

对象的功能

要使用对象函数,请指定System对象作为第一个输入参数。例如,释放名为system的对象的系统资源obj,请使用以下语法:

发行版(obj)

全部展开

克隆 创建副本系统对象
isLocked 确定是否系统对象正在使用中
释放 释放资源并允许更改系统对象属性值和输入特征
重置 重置的内部状态系统对象
运行系统对象算法

例子

全部折叠

使用默认的voiceActivityDetector系统对象™用于检测流音频信号中是否存在语音。

创建音频文件读取器以流化音频文件进行处理。定义参数将音频信号分成10毫秒非重叠帧。

fileReader = dsp。AudioFileReader (“Counting-16-44p1-mono-15secs.wav”);fs = fileReader.SampleRate;fileReader。SamplesPerFrame =装天花板(10 e - 3 * fs);

创建一个默认的voiceActivityDetector对象,用于检测音频文件中是否存在语音。

VAD = voiceActivityDetector;

创建一个范围,以绘制音频信号和语音活动检测器检测到的相应语音存在概率。创建音频设备编写器以通过声卡播放音频。

范围= timescope (...“NumInputPorts”2....“采样器”fs,...“TimeSpanSource”“财产”“时间跨度”3....“缓冲长度”,3*fs,...“YLimits”(-1.5 - 1.5),...“TimeSpanOverrunAction”“滚动”...“ShowLegend”,真的,...“频道名称”, {“音频”"语言存在的概率"});deviceWriter = audioDeviceWriter (“采样器”fs);

在音频流循环中:

  1. 从音频文件中读取。

  2. 计算语音存在的概率。

  3. 可视化音频信号和语音存在概率。

  4. 通过声卡播放音频信号。

~isDone(fileReader)audioIn=fileReader();probability=VAD(audioIn);scope(audioIn,probability*ones(fileReader.sampleperframe,1))deviceWriter(audioIn);结束

使用语音活动检测器检测音频信号中是否存在语音。用音频样本绘制语音存在的概率。

创建一个dsp。AudioFileReader系统对象™读取语音文件。

误判率= dsp。AudioFileReader (“Counting-16-44p1-mono-15secs.wav”);fs = afr.SampleRate;

将音频分块为20毫秒的帧,连续帧之间有75%的重叠。将以秒为单位的帧时间转换为采样。确定跃点大小(新采样的增量)。在音频文件读取器中,将每帧采样数设置为跃点大小。创建默认值异步缓冲器对象来管理音频帧之间的重叠。

frameSize =装天花板(20 e - 3 * fs);overlapSize =装天花板(0.75 * frameSize);hopSize = frameSize - overlapSize;误判率。SamplesPerFrame = hopSize;inputBuffer = dsp。AsyncBuffer (“容量”, frameSize);

创建一个voiceActivityDetector系统对象。指定1024的FFT长度。

VAD = voiceActivityDetector (“FFTLength”, 1024);

创建一个范围,以绘制音频信号和语音活动检测器检测到的相应语音存在概率。创建一个范围audioDeviceWriter系统对象通过声卡播放音频。

范围= timescope (“NumInputPorts”2....“采样器”fs,...“TimeSpanSource”“财产”“时间跨度”3....“缓冲长度”,3*fs,...“YLimits”[-1.5, 1.5],...“TimeSpanOverrunAction”“滚动”...“ShowLegend”,真的,...“频道名称”, {“音频”"语言存在的概率"}); 播放器=音频设备编写器(“采样器”fs);

初始化向量以保存概率值。

pHold = 1 (hopSize, 1);

在音频流循环中:

  1. 从音频文件中读取一个跃点的样本,并将样本保存到缓冲区中。

  2. 从缓冲区中读取与前一帧具有指定重叠的帧。

  3. 调用语音活动检测器来获取被分析帧的语音概率。

  4. 将概率向量的最后一个元素设置为新的概率决策。使用时间范围可视化音频和语音存在概率。

  5. 通过声卡播放音频。

  6. 将概率向量设置为下一个循环中绘制的最新结果。

~isDone(afr) x = afr();n =写(inputBuffer x);overlappedInput =阅读(inputBuffer frameSize overlapSize);p = VAD (overlappedInput);pHold(结束)= p;范围(x, pHold)球员(x);pHold (:) = p;结束

释放游戏者一旦音频结束播放。

发行版(球员)

许多特征提取技术都是在频域上进行的。仅将音频信号转换到频域一次是有效的。在本例中,将流式音频信号转换为频域,并将该信号输入语音活动检测器。如果存在语音,则使用倒谱特征提取系统对象™

创建一个dsp。AudioFileReader要从音频文件中读取的系统对象。

fileReader = dsp。AudioFileReader (“Counting-16-44p1-mono-15secs.wav”);fs = fileReader.SampleRate;

以10毫秒的跳跃时间处理30毫秒帧中的音频。创建默认值异步缓冲器对象来管理音频帧之间的重叠。

samplesPerFrame =装天花板(0.03 * fs);samplesPerHop =装天花板(0.01 * fs);samplesPerOverlap = samplesPerFrame - samplesPerHop;fileReader。SamplesPerFrame = samplesPerHop;缓冲= dsp.AsyncBuffer;

创建一个voiceActivityDetector系统对象和倒谱特征提取器系统对象。指定它们在频域内工作。创建一个信号接收器记录提取的倒谱特征。

VAD = voiceActivityDetector (“InputDomain”“频率”);cepFeatures = cepstralFeatureExtractor (“InputDomain”“频率”“采样器”fs,“LogEnergy”“替换”);水槽= dsp.SignalSink;

在音频流循环中:

  1. 从音频文件中读取一跳的样本并将样本保存到缓冲区中。

  2. 读一帧从缓冲与前一帧的指定重叠。

  3. 调用语音活动检测器来获取被分析帧的语音概率。

  4. 如果被分析的帧有大于0.75的语音概率,提取倒谱特征并使用信号接收器记录特征。如果被分析帧的语音概率小于0.75,则向sink写入一个nan向量。

阈值=0.75;nanVector=nan(1,13);~isDone(fileReader) audioIn = fileReader();写(缓冲区,audioIn);overlappedAudio =阅读(缓冲区,samplesPerFrame samplesPerOverlap);X = fft (overlappedAudio, 2048);probabilityOfSpeech = VAD (X);如果语音概率>阈值X特征=CEP特征(X);水槽(xFeatures')其他的水槽(nanVector)结束结束

可视化随时间变化的倒谱系数。

timeVector = linspace(0 15大小(sink.Buffer, 1));情节(timeVector sink.Buffer)包含(“时间(s)”) ylabel (“MFCC振幅”)传奇(“对数能量”“c1”c2的“c3”“c4”“c5”“c6”“c7”“c8”“制备”“10大”“c11”“c12”

图中包含一个坐标轴。轴包含13个线型对象。这些对象代表Log-Energy, c1, c2, c3, c4, c5, c6, c7, c8, c9, c10, c11, c12。

创建一个dsp。AudioFileReader对象以逐帧读取音频。

fileReader = dsp。AudioFileReader (“唱a大调,ogg”);

创建一个voiceActivityDetector对象,以检测流音频中是否存在声音。

VAD = voiceActivityDetector;

当存在未读示例时,从文件中读取并确定帧包含语音活动的概率。如果帧包含语音活动,请拨打球场估计音频帧的基频。如果帧不包含声音活动,则声明基频为

f0=[];~isDone(fileReader)x=fileReader();如果VAD(x) > 0.99 decision = pitch(x,fileReader. x)SampleRate,...“WindowLength”、大小(x, 1),...“OverlapLength”,0,...“范围”[200340]);其他的决策=NaN;结束f0 = (f0;决定);结束

绘制随时间变化的检测到的俯仰轮廓。

t=linspace(0,(长度(f0)*fileReader.SamplesPerFrame)/fileReader.SampleRate,长度(f0));plot(t,f0)ylabel(“基本频率(赫兹)”)包含(“时间(s)”)网格

图中包含一个坐标轴。轴包含一个线型对象。

算法

voiceActivityDetector实现中描述的算法[1]

如果InputDomain被指定为“时间”时,对输入信号加窗,然后根据窗口旁瓣衰减,FFT长度属性。如果InputDomain为频率,输入为音频信号的加窗离散时间傅里叶变换(DTFT)。然后信号被转换到功率域。噪声方差估计根据[2].根据最小均方误差(MMSE)公式估计后验信噪比和先验信噪比[3].基于对数似然比检验和隐马尔可夫模型(HMM)的延迟方案确定当前帧包含语音的概率,根据[1]

工具书类

[1] Sohn,Jongseo.,Nam-Soo Kim和Wonyong Sung.“基于统计模型的语音活动检测。”信号处理字母IEEE.1999年第6卷第1期。

[2]马丁,R。基于最优平滑和最小统计量的噪声功率谱密度估计。IEEE语音和音频处理汇刊.第9卷第5期,2001年,第504-512页。

以法莲,Y.和D.玛拉。用最小均方误差短时谱振幅估计器增强语音。声学、语音和信号处理IEEE交易.1984年第32卷第6期,1109-1121页。

扩展能力

介绍了R2018a