audioFeatureExtractor
流线音频特征提取
描述
audioFeatureExtractor
封装多个音频特征提取到一个流线型和模块化的实现。
创建
描述
使用默认属性值创建音频特征提取器。aFE
= audioFeatureExtractor ()
的非默认属性aFE
= audioFeatureExtractor (名称=值
)aFE
使用一个或多个名称-值参数。
属性
主要特性
窗口
- - - - - -分析窗口
汉明(1024年,“周期性”)
(默认)|真正的向量
分析窗口,指定为实向量。
数据类型:单
|双
OverlapLength
- - - - - -相邻分析窗口重叠长度
512
(默认)|范围为[0,元素个数(窗口
)
)
窗口
)相邻分析窗口的重叠长度,指定为范围为[0,元素个数(窗口)
).
数据类型:单
|双
FFTLength
- - - - - -FFT长度
[]
(默认)|正整数
FFT长度,指定为整数。的默认值[]
表示FFT长度等于窗口长度元素个数(窗口)
.
数据类型:单
|双
SampleRate
- - - - - -输入采样率(Hz)
44100
(默认)|积极的标量
输入采样率(以Hz为单位),指定为正标量。
数据类型:单
|双
SpectralDescriptorInput
- - - - - -输入光谱描述符
“linearSpectrum”
(默认)|“melSpectrum”
|“barkSpectrum”
|“erbSpectrum”
谱描述符的输入,指定为“linearSpectrum”
,“melSpectrum”
,“barkSpectrum”
,或“erbSpectrum”
.
受此属性影响的谱描述符有:
频谱描述符的频谱输入与对应特征的输出相同:
例如,如果你设置SpectralDescriptorInput
来“barkSpectrum”
,spectralCentroid
来真正的
,然后aFE
返回默认Bark谱的质心。
[audioIn,fs] = audioread(“Counting-16-44p1-mono-15secs.wav”);aFE = audioFeatureExtractor(SampleRate=fs,...SpectralDescriptorInput =“barkSpectrum”,...spectralCentroid = true);barkSpectralCentroid = extract(aFE,audioIn);
barkSpectrum
使用setExtractorParameters
,则非默认Bark谱作为谱描述符的输入。例如,如果你打电话setExtractorParameters (aFE“barkSpectrum NumBands = 40)
,然后aFE
返回40波段Bark谱的质心。
setExtractorParameters (aFE“barkSpectrum”,NumBands=40) bark40SpectralCentroid = extract(aFE,audioIn);
数据类型:字符
|字符串
FeatureVectorLength
- - - - - -从提取中输出的特征数
正整数
需要提取的特征
linearSpectrum
- - - - - -提取线性谱
假
(默认)|真正的
提取单边线性谱,指定为真正的
或假
.
设置线性谱提取参数,使用setExtractorParameters
:
setExtractorParameters (aFE“linearSpectrum”名称=值)
FrequencyRange
——提取频谱的频率范围,以Hz为单位,指定为范围[0,SampleRate/ 2)。如果未指定的,FrequencyRange
默认为[0,
.SampleRate
/ 2)SpectrumType
——频谱类型,指定为“权力”
或“级”
.如果未指定的,SpectrumType
默认为“权力”
.WindowNormalization
——应用窗口规范化,指定为真正的
或假
.如果未指定的,WindowNormalization
默认为真正的
.
数据类型:逻辑
melSpectrum
- - - - - -提取mel光谱
假
(默认)|真正的
提取单侧梅尔光谱,指定为真正的
或假
.
设置mel光谱提取参数,使用setExtractorParameters
:
setExtractorParameters (aFE“melSpectrum”名称=值)
FrequencyRange
——提取频谱的频率范围,以Hz为单位,指定为范围[0,SampleRate/ 2)。如果未指定的,FrequencyRange
默认为[0,
.SampleRate
/ 2)SpectrumType
——频谱类型,指定为“权力”
或“级”
.如果未指定的,SpectrumType
默认为“权力”
.NumBands
——mel波段的个数,指定为整数。如果未指定的,NumBands
默认为32
.FilterBankNormalization
——应用于带通滤波器的归一化,指定为“带宽”
,“区域”
,或“没有”
.如果未指定的,FilterBankNormalization
默认为“带宽”
.WindowNormalization
——应用窗口规范化,指定为真正的
或假
.如果未指定的,WindowNormalization
默认为真正的
.FilterBankDesignDomain
——设计滤波器组的域,指定为任意一个“线性”
或“扭曲”
.如果未指定的,FilterBankDesignDomain
默认为“线性”
.
数据类型:逻辑
barkSpectrum
- - - - - -提取树皮光谱
假
(默认)|真正的
提取单边树皮谱,指定为真正的
或假
.
如需设置Bark谱提取参数,请使用setExtractorParameters
:
setExtractorParameters (aFE“barkSpectrum”名称=值)
FrequencyRange
——提取频谱的频率范围,以Hz为单位,指定为范围[0,SampleRate/ 2)。如果未指定的,FrequencyRange
默认为[0,
.SampleRate
/ 2)SpectrumType
——频谱类型,指定为“权力”
或“级”
.如果未指定的,SpectrumType
默认为“权力”
.NumBands
——Bark频带的个数,指定为整数。如果未指定的,NumBands
默认为32
.FilterBankNormalization
——应用于带通滤波器的归一化,指定为“带宽”
,“区域”
,或“没有”
.如果未指定的,FilterBankNormalization
默认为“带宽”
.WindowNormalization
——应用窗口规范化,指定为真正的
或假
.如果未指定的,WindowNormalization
默认为真正的
.FilterBankDesignDomain
——设计滤波器组的域,指定为任意一个“线性”
或“扭曲”
.如果未指定的,FilterBankDesignDomain
默认为“线性”
.
数据类型:逻辑
erbSpectrum
- - - - - -提取ERB频谱
假
(默认)|真正的
提取单边ERB谱,指定为真正的
或假
.
如果需要设置ERB频谱提取参数,请使用setExtractorParameters
:
setExtractorParameters (aFE“erbSpectrum”名称=值)
FrequencyRange
——提取频谱的频率范围,以Hz为单位,指定为范围[0,SampleRate/ 2)。如果未指定的,FrequencyRange
默认为[0,
.SampleRate
/ 2)SpectrumType
——频谱类型,指定为“权力”
或“级”
.如果未指定的,SpectrumType
默认为“权力”
.NumBands
——ERB带的个数,以整数形式指定。如果未指定的,NumBands
默认为(即:
.hz2erb
(FrequencyRange (2))hz2erb
(FrequencyRange (1)))FilterBankNormalization
——应用于带通滤波器的归一化,指定为“带宽”
,“区域”
,或“没有”
.如果未指定的,FilterBankNormalization
默认为“带宽”
.WindowNormalization
——应用窗口规范化,指定为真正的
或假
.如果未指定的,WindowNormalization
默认为真正的
.
数据类型:逻辑
mfcc
- - - - - -提取梅尔频率倒谱系数(MFCC)
假
(默认)|真正的
提取梅尔频率倒谱系数(MFCC),指定为真正的
或假
.
设置MFCC提取参数,使用setExtractorParameters
:
setExtractorParameters (aFE“mfcc”名称=值)
NumCoeffs
——为每个窗口返回的系数数,指定为正整数。如果未指定的,NumCoeffs
默认为13
.DeltaWindowLength
——Delta窗口长度,指定为大于2的奇数。如果未指定的,DeltaWindowLength
默认为9
.此参数影响mfccDelta
而且mfccDeltaDelta
特性。整改
——非线性整流类型,指定为“日志”
或“立方根”
.
计算了梅尔频率倒谱系数melSpectrum.
数据类型:逻辑
mfccDelta
- - - - - -提取MFCC的delta
假
(默认)|真正的
提取MFCC的delta,指定为真正的
或假
.
在提取的MFCC的基础上计算了delta MFCC。参数设置mfcc
影响mfccDelta
.
数据类型:逻辑
mfccDeltaDelta
- - - - - -提取MFCC的delta-delta
假
(默认)|真正的
提取MFCC的delta-delta,指定为真正的
或假
.
在提取MFCC的基础上计算delta-delta MFCC。参数设置mfcc
影响mfccDeltaDelta
.
数据类型:逻辑
gtcc
- - - - - -提取伽马酮倒谱系数(GTCC)
假
(默认)|真正的
提取伽马酮倒谱系数(GTCC),指定为真正的
或假
.
如需设置GTCC提取参数,请使用setExtractorParameters
:
setExtractorParameters (aFE“gtcc”名称=值)
NumCoeffs
——为每个窗口返回的系数数,指定为正整数。如果未指定的,NumCoeffs
默认为13
.DeltaWindowLength
——Delta窗口长度,指定为大于2的奇数。如果未指定的,DeltaWindowLength
默认为9
.此参数影响gtccDelta
而且gtccDeltaDelta
特性。
整改
——非线性整流类型,指定为“日志”
或“立方根”
.
γ谱倒谱系数是用erbSpectrum.
数据类型:逻辑
gtccDelta
- - - - - -提取GTCC的delta
假
(默认)|真正的
提取GTCC的delta,指定为真正的
或假
.
基于提取的GTCC计算δ GTCC。参数设置gtcc
影响gtccDelta
.
数据类型:逻辑
gtccDeltaDelta
- - - - - -提取GTCC的delta-delta
假
(默认)|真正的
提取GTCC的delta-delta,指定为真正的
或假
.
基于提取的GTCC计算delta-delta GTCC。参数设置gtcc
影响gtccDeltaDelta
.
数据类型:逻辑
spectralCentroid
- - - - - -提取光谱质心
假
(默认)|真正的
spectralCrest
- - - - - -提取谱峰
假
(默认)|真正的
spectralDecrease
- - - - - -提取光谱衰减
假
(默认)|真正的
spectralEntropy
- - - - - -提取谱熵
假
(默认)|真正的
spectralFlatness
- - - - - -提取谱平坦度
假
(默认)|真正的
spectralFlux
- - - - - -提取谱通量
假
(默认)|真正的
提取光谱通量,指定为真正的
或假
.
谱通量是根据下列谱表示法之一计算的SpectralDescriptorInput属性:
若要设置光谱通量提取的参数,请使用setExtractorParameters
:
setExtractorParameters (aFE“spectralFlux”名称=值)
NormType
——用于计算光谱通量的Norm类型,指定为1
或2
.如果未指定的,NormType
默认为2
.
数据类型:逻辑
spectralKurtosis
- - - - - -提取谱峰度
假
(默认)|真正的
spectralRolloffPoint
- - - - - -提取光谱滚转点
假
(默认)|真正的
提取光谱滚转点,指定为真正的
或假
.
属性所指定的下列光谱表示之一上计算光谱滚落点SpectralDescriptorInput属性:
要设置光谱滚转点提取的参数,请使用setExtractorParameters
:
setExtractorParameters (aFE“spectralRolloffPoint”名称=值)
阈值
——滚出点的阈值,指定为范围(0,1)中的标量。如果未指定,阈值
默认为0.95
.
数据类型:逻辑
spectralSkewness
- - - - - -提取光谱偏度
假
(默认)|真正的
spectralSlope
- - - - - -提取谱斜率
假
(默认)|真正的
spectralSpread
- - - - - -提取谱展
假
(默认)|真正的
球场
- - - - - -提取音高
假
(默认)|真正的
提取螺距,指定为真正的
或假
.
要设置基音提取参数,请使用setExtractorParameters
:
setExtractorParameters (aFE“节”名称=值)
方法
——用于计算螺距的方法,指定为“PEF”
,“NCF”
,“CEP”
,“韩”
,或“SRH”
.如果未指定的,方法
默认为“NCF”
.有关可用的音调提取方法的说明,请参见球场
.范围
——Range within用于搜索以Hz为单位的音调,指定为递增值的两元素行向量。如果未指定的,范围
默认为[50400]
.MedianFilterLength
—用于平滑基音估计的中值滤波器长度,指定为正整数。如果未指定的,MedianFilterLength
默认为1
(没有中值过滤)。
数据类型:逻辑
harmonicRatio
- - - - - -提取谐波比
假
(默认)|真正的
提取谐波比,指定为真正的
或假
.
数据类型:逻辑
zerocrossrate
- - - - - -提取过零率
假
(默认)|真正的
提取过零率,指定为真正的
或假
.
要设置过零率提取的参数,使用setExtractorParameters
:
setExtractorParameters (aFE“zerocrossrate”名称=值)
方法
——计算过零率的方法,指定为“差异”
或“比较”
.如果未指定的,方法
,默认为“差异”
.有关更多信息,请参见zerocrossrate
.水平
——计算交叉率的信号电平,指定为实标量。audioFeatureExtractor
减去的水平
值,然后找到零交叉点。如果未指定的,水平
默认为0
.阈值
阈值高于和低于水平
用于计算交叉速率的值,指定为实标量。audioFeatureExtractor
设置范围内输入的所有值(- - - - - -
来阈值
,阈值
]0
然后求零交点。如果未指定的,阈值
默认为0
.TransitionEdge
-计算零交叉时要包括的过渡,指定为“下降”
,“上升”
,或“两个”
.如果你指定“下降”
,只计算负向转换。如果你指定“上升”
,只计算正向的转换。如果未指定的,TransitionEdge
默认为“两个”
.ZeroPositive
-符号约定,指定为逻辑标量。如果你指定ZeroPositive
作为真正的
,然后0
被认为是积极的。如果你指定ZeroPositive
作为假
,然后audioFeatureExtractor
认为0
,1
,+1
有明显的标志遵循的惯例标志
函数。如果未指定的,ZeroPositive
默认为假
.
数据类型:逻辑
shortTimeEnergy
- - - - - -提取短时能量
假
(默认)|真正的
提取短时间能量,指定为真正的
或假
.短时能量计算采用
sTE = sum(xbw.^2,1)
,
在哪里xbw
是缓冲和窗口信号。
[示例]Chirp函数
产生一个啁啾采样在1千赫3秒。瞬时频率为100hz 超过200hz 第二。将信号划分为103个样本段,相邻片段之间重叠的样本为43个。用周期性的汉明窗口对每个片段进行窗口操作。
Fs = 1e3;X = chirp(0:1/fs: 3,100,1200)';温=汉明(103,“周期”);Nover = 43;[xb,~] = buffer(x,length(win),nover,“nodelay”);XBW = xb.*win;
利用定义计算短时能量。
Edef = sum(xbw.^2,1)';
使用audioFeatureExtractor
计算短时能量。
EaFE = extract(audioFeatureExtractor(shortTimeEnergy=true,...SampleRate = fs,窗口=赢,OverlapLength =也不要),x);
验证两个程序提供相同的短时间能量。
dff = max(abs(EaFE-Edef))
DFF = 0
数据类型:逻辑
对象的功能
提取 |
提取音频特征 |
setExtractorParameters |
为各个特征提取器设置非默认参数值 |
信息 |
输出映射和单独的特征提取器参数 |
generateMATLABFunction |
创建MATLAB函数兼容C/ c++代码生成 |
plotFeatures |
Plot提取音频特征 |
例子
提取多个音频特征
读入音频信号。
[audioIn,fs] = audioread(“Counting-16-44p1-mono-15secs.wav”);
创建一个audioFeatureExtractor
对象,提取信号的MFCC、δ MFCC、δ - δ MFCC、基音、谱质心、过零率和短时能量。使用30毫秒的分析窗口和20毫秒的重叠。
aFE = audioFeatureExtractor(...SampleRate = fs,...窗口=汉明(圆(0.03 * fs),“周期”),...OverlapLength = (0.02 * fs),...mfcc = true,...mfccDelta = true,...mfccDeltaDelta = true,...= true,...spectralCentroid = true,...zerocrossrate = true,...shortTimeEnergy = true);
调用提取
从音频信号中提取音频特征。
features = extract(aFE,audioIn);
使用信息
以确定特征提取矩阵的哪一列对应于所请求的基音提取。
idx = info(aFE)
idx =带字段的结构:mfcc: [1 23 4 5 6 7 8 9 10 11 12 13] mfccDelta: [14 15 16 17 18 19 20 21 22 23 24 25 26] mfccDeltaDelta: [27 28 29 30 31 32 33 34 35 36 37 38 39] spectralCentroid: 40 pitch: 41 zerocrossrate: 42 shortTimeEnergy: 43
绘制检测到的音调随时间的变化。
t = linspace(0,size(audioIn,1)/fs,size(features,1));情节(t)特性(:,idx.pitch))标题(“节”)包含(“时间(s)”) ylabel (“频率(赫兹)”)
绘制随时间变化的过零率。
情节(t)特性(:,idx.zerocrossrate))标题(“零点交叉率”)包含(“时间(s)”)
画出短期能量随时间的变化。
情节(t)特性(:,idx.shortTimeEnergy))标题(“短时能量”)包含(“时间(s)”)
从数据集中提取特征
创建音频数据存储,指向音频工具箱®中包含的音频样本。
文件夹= fullfile(matlabroot,“工具箱”,“音频”,“样本”);ads = audioDatastore(文件夹);
找到所有符合44.1 kHz采样率的文件,然后子集
数据存储。
keepFile = cellfun(@(x)包含(x,“44 p1”), ads.Files);ads =子集(广告,keepFile);
将数据转换为a高
数组中。高
数组只有在显式地使用收集
.MATLAB®通过最小化通过数据的次数自动优化队列计算。如果您有并行计算工具箱™,您可以将计算分散到多个工作人员。音频数据表示为米-by-1高单元格数组,其中米音频数据存储中的文件数。
adsTall =高(广告)
使用“本地”配置文件启动并行池(parpool)…连接到平行池(工人数量:6)。adsTall = M×1高细胞数组{539648×1双}{227497×1双}{8000×1双}{685056×1双}{882688×2双}{1115760×2双}{505200×2双}{3195904×2双}::::
创建一个audioFeatureExtractor
对象从每个音频文件中提取mel谱、Bark谱、ERB谱和线性谱。使用默认的分析窗口和重叠长度进行频谱提取。
aFE = audioFeatureExtractor(SampleRate= 44.11 e3,...melSpectrum = true,...barkSpectrum = true,...erbSpectrum = true,...linearSpectrum = true);
定义一个cellfun
函数,以便从tall数组的每个单元格中提取音频特征。调用收集
计算tall数组。
specsTall = cellfun(@(x)extract(aFE,x),adsTall,UniformOutput=false);specs = gather(specsTall);
使用并行池“本地”评估tall表达式:-通过1 / 1:在14秒内完成评估
的规格
从gather返回的变量是numFiles-by-1单元格数组,其中numFiles数据存储中的文件数。单元格数组的每个元素都是anumHops——- - - - - -numFeatures——- - - - - -numChannels数组,其中跳数和通道数取决于音频文件的长度和通道数,特征数是音频数据请求的特征数。
numFiles = numel(specs)
numFiles = 12
[numHops1,numFeaturesFile1,numChanelsFile1] = size(specs{1})
numHops1 = 1053
numFeaturesFile1 = 620
numChanelsFile1 = 1
[numHops2,numFeaturesFile2,numChanelsFile2] = size(specs{2})
numHops2 = 443
numFeaturesFile2 = 620
numChanelsFile2 = 1
可视化提取的音频特征
使用plotFeatures
可视化音频特征提取与audioFeatureExtractor
对象。
从文件中读入音频信号。
[audioIn,fs] = audioread(“Counting-16-44p1-mono-15secs.wav”);
创建一个audioFeatureExtractor
对象,提取伽玛酮倒谱系数(gtcc)和gtcc的delta。设置SampleRate
属性设置为音频信号的采样率,其他属性使用默认值。
afe = audioFeatureExtractor(SampleRate=fs,gtcc=true,gtccDelta=true);
绘制从音频信号中提取的特征。
audioIn plotFeatures (afe)
算法
的audioFeatureExtractor
基于所选特性创建一个特性提取管道。为了减少计算量,audioFeatureExtractor
重用中间表示,并将一些中间表示作为功能输出。
例如,要创建提取Bark谱的质心、Bark谱的通量、基音、谐波比和MFCC的delta-delta的对象,请指定audioFeatureExtractor
如下。
aFE = audioFeatureExtractor(...SpectralDescriptorInput =“barkSpectrum”,...spectralCentroid = true,...spectralFlux = true,...= true,...harmonicRatio = true,...mfccDeltaDelta = true)
aFE = audioFeatureExtractor with properties: properties Window: [1024×1 double] OverlapLength: 512 SampleRate: 44100 FFTLength: [] SpectralDescriptorInput:'barkSpectrum'启用特征mfccDeltaDelta, spectralCentroid, spectralFlux, pitch, harmonicRatio禁用特征linearSpectrum, melSpectrum, barkSpectrum, erbSpectrum, mfcc, mfccDelta gtcc, gtccDelta, gtccDeltaDelta, spectralCrest, spectralreduce, spectralEntropy spectralFlatness, spectralKurtosis, spectralRolloffPoint, spectralSkewness, spectralSlope, spectralSpread提取一个特征,将相应的属性设置为true。例如,obj。mfcc=真正的,adds mfcc to the list of enabled features.
请注意
因为audioFeatureExtractor
重用中介表示,从的特性输出audioFeatureExtractor
可能与相应的单独特征提取器输出的特征的默认配置不一致。
扩展功能
C/ c++代码生成
使用MATLAB®Coder™生成C和c++代码。
使用注意事项和限制:
不能直接从
audioFeatureExtractor
.返回的函数可以生成C/ c++代码generateMATLABFunction
.zerocrossrate
当输入是多通道时,代码生成不支持禁用动态内存分配。
GPU数组
通过使用并行计算工具箱™在图形处理单元(GPU)上运行来加速代码。
本功能完全支持GPU阵列。有关更多信息,请参见在图形处理器上运行MATLAB函数(并行计算工具箱).
版本历史
R2019b引入R2022b:可视化提取的特征
使用plotFeatures
对象函数可视化提取的音频特征。
R2020b:和-的计算
的audioDelta
函数现在用于计算mfccDelta
,mfccDeltaDelta
,gtccDelta
,gtccDeltaDelta
.的audioDelta
算法的启动行为与之前的算法不同。用于计算增量的默认窗口长度已从2
来9
.的增量窗口长度2
不再支持。
Abrir比如
Tiene una versión modificada de este ejemplo。¿Desea abrir este ejemplo con sus modificaciones?
MATLAB突击队
Ha hecho clic en unenlace que对应一个este commando de MATLAB:
弹射突击队introduciéndolo en la ventana de commandos de MATLAB。Los navegadores web no permission comandos de MATLAB。
您也可以从以下列表中选择一个网站:
如何获得最佳的网站性能
选择中国站点(中文或英文)以获得最佳站点性能。其他MathWorks国家站点没有针对您所在位置的访问进行优化。