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谱,指定为真正的
或假
.
设置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
- - - - - -树皮光谱
假
(默认)|真正的
提取单侧树皮光谱,指定为真正的
或假
.
配置树皮谱提取的参数,使用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
- - - - - -提取mel-frequency倒谱系数
假
(默认)|真正的
提取mel-frequency倒谱系数(MFCC),指定为真正的
或假
.
要设置MFCC提取的参数,使用setExtractorParameters
:
setExtractorParameters (aFE“mfcc”名称=值)
NumCoeffs
—每个窗口返回的系数数,指定为正整数。如果未指定的,NumCoeffs
默认为13
.DeltaWindowLength
增量窗口长度,指定为大于2的奇数。如果未指定的,DeltaWindowLength
默认为9
.此参数影响mfccDelta
和mfccDeltaDelta
特性。整改
——非线性整流类型,指定为“日志”
或“立方根”
.
mel-frequency倒谱系数是用melSpectrum.
数据类型:逻辑
mfccDelta
- - - - - -提取MFCC的δ
假
(默认)|真正的
提取MFCC的delta,指定为真正的
或假
.
基于提取的MFCC计算delta MFCC。参数设置为mfcc
影响mfccDelta
.
数据类型:逻辑
mfccDeltaDelta
- - - - - -提取MFCC的δ - δ
假
(默认)|真正的
提取MFCC的delta-delta,指定为真正的
或假
.
基于提取的MFCC计算delta-delta MFCC。参数设置为mfcc
影响mfccDeltaDelta
.
数据类型:逻辑
gtcc
- - - - - -提取γ酮倒谱系数(GTCC)
假
(默认)|真正的
提取γ酮倒谱系数(GTCC),指定为真正的
或假
.
要设置GTCC提取的参数,使用setExtractorParameters
:
setExtractorParameters (aFE“gtcc”名称=值)
NumCoeffs
—每个窗口返回的系数数,指定为正整数。如果未指定的,NumCoeffs
默认为13
.DeltaWindowLength
增量窗口长度,指定为大于2的奇数。如果未指定的,DeltaWindowLength
默认为9
.此参数影响gtccDelta
和gtccDeltaDelta
特性。
整改
——非线性整流类型,指定为“日志”
或“立方根”
.
伽玛酮倒谱系数是用erbSpectrum.
数据类型:逻辑
gtccDelta
- - - - - -提取GTCC的δ
假
(默认)|真正的
提取GTCC的delta,指定为真正的
或假
.
增量GTCC是基于提取的GTCC计算的。参数设置为gtcc
影响gtccDelta
.
数据类型:逻辑
gtccDeltaDelta
- - - - - -提取GTCC
假
(默认)|真正的
提取GTCC的delta-delta,指定为真正的
或假
.
基于提取的GTCC计算delta-delta GTCC。参数设置为gtcc
影响gtccDeltaDelta
.
数据类型:逻辑
spectralCentroid
- - - - - -提取光谱质心
假
(默认)|真正的
spectralCrest
- - - - - -提取谱峰
假
(默认)|真正的
spectralDecrease
- - - - - -提取光谱衰减
假
(默认)|真正的
spectralEntropy
- - - - - -提取谱熵
假
(默认)|真正的
spectralFlatness
- - - - - -提取光谱平坦度
假
(默认)|真正的
spectralFlux
- - - - - -提取光谱通量
假
(默认)|真正的
提取光谱通量,指定为真正的
或假
.
中的指定的下列光谱表示形式之一计算光谱通量SpectralDescriptorInput属性:
要设置谱通量提取的参数,请使用setExtractorParameters
:
setExtractorParameters (aFE“spectralFlux”名称=值)
NormType
——用于计算光谱通量的规范类型,指定为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”
.有关可用的基音提取方法的说明,请参见球场
.范围
-范围内搜索以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 Function
产生一个以1khz采样3秒的啁啾。瞬时频率为100hz 穿过200赫兹 第二。将信号分成103个样本段,相邻片段之间有43个重叠样本。窗口每段都有一个周期性的汉明窗口。
Fs = 1e3;X = chirp(0:1/fs:3,100,1,200)';[au:]“周期”);Nover = 43;[xb,~] = buffer(x,length(win),nover);“nodelay”);XBW = xb.*win;
利用定义计算短时能量。
= 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++代码生成 |
例子
提取多个音频特征
读入音频信号。
[audioIn,fs] = audioread(“Counting-16-44p1-mono-15secs.wav”);
创建一个audioFeatureExtractor
对象,提取信号的MFCC、delta MFCC、delta-delta MFCC、节距、频谱质心、过零率和短时能量。使用30毫秒的分析窗口和20毫秒的重叠。
ae = audioFeatureExtractor(…SampleRate = fs,…窗口=汉明(圆(0.03 * fs),“周期”),…OverlapLength = (0.02 * fs),…mfcc = true,…mfccDelta = true,…mfccDeltaDelta = true,…= true,…spectralCentroid = true,…zerocrossrate = true,…shortTimeEnergy = true);
调用提取
从音频信号中提取音频特征。
feature = 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 37 38 39] spectralCentroid: 40 pitch: 41 zerocrosrate: 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)”)
从数据集中提取特征
创建指向audio Toolbox®中包含的音频样本的音频数据存储。
文件夹= fullfile(matlabroot,“工具箱”,“音频”,“样本”);ads = audioDatastore(文件夹);
找到所有与44.1 kHz采样率相对应的文件,然后子集
数据存储。
keepFile = cellfun(@(x)包含(x),“44 p1”), ads.Files);ads =子集(ads,keepFile);
将数据转换为a高
数组中。高
数组只有在显式请求时才计算收集
.MATLAB®通过最大限度地减少通过数据的次数来自动优化排队计算。如果您有Parallel Computing Toolbox™,您可以将计算分散到多个worker中。音频数据表示为米- × 1高单元阵列,其中米音频数据存储中的文件数。
adsTall = tall(广告)
使用“本地”配置文件启动并行池(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.13;…melSpectrum = true,…barkSpectrum = true,…erbSpectrum = true,…linearSpectrum = true);
定义一个cellfun
函数,以便从tall数组的每个单元格中提取音频特征。调用收集
求tall数组的值。
specsTall = cellfun(@(x)extract(aFE,x),adsTall,UniformOutput=false);specs = gather(specsTall);
使用并行池“local”评估tall表达式:-通过1 / 1:在14秒内完成评估在14秒内完成
的规格
从gather返回的变量是numFiles-by-1单元阵列,其中numFiles是数据存储中的文件数量。单元格数组的每个元素都是anumHops——- - - - - -numFeatures——- - - - - -numChannels数组,其中跳数和通道数取决于音频文件的长度和通道数,特征数是来自音频数据的请求特征数。
numFiles = numel(specs)
numFiles = 12
[numHops1,numFeaturesFile1,numChanelsFile1] = size(规格{1})
numHops1 = 1053
numFeaturesFile1 = 620
numChanelsFile1 = 1
[numHops2,numFeaturesFile2,numChanelsFile2] = size(规格{2})
numHops2 = 443
numFeaturesFile2 = 620
numChanelsFile2 = 1
算法
的audioFeatureExtractor
基于您选择的特性创建一个特性提取管道。为了减少计算量,audioFeatureExtractor
重用中间表示,并输出一些中间表示作为特征。
例如,若要创建提取Bark频谱质心、Bark频谱通量、基音、谐波比和MFCC的delta-delta的对象,请指定audioFeatureExtractor
如下。
ae = 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
当输入是多通道时,代码生成不支持禁用动态内存分配。万博1manbetx
GPU数组
通过使用并行计算工具箱™在图形处理单元(GPU)上运行来加速代码。
版本历史
在R2019b中引入R2020b:计算delta和delta-delta
行为在R2020b中改变
的audioDelta
函数现在用于计算mfccDelta
,mfccDeltaDelta
,gtccDelta
,gtccDeltaDelta
.的audioDelta
算法的启动行为与之前的算法不同。用于计算增量的默认窗口长度已更改为2
来9
.的增量窗口长度2
不再支持。万博1manbetx
Abrir比如
Tiene una versión modificada de este ejemploo。是否对所有的修改进行了修改?
MATLAB编程
在MATLAB中,该函数对应于一个最基本的函数:
在MATLAB中,用MATLAB编写了仿真程序。Los navegadores web no admit commandos de MATLAB。
你亦可选择下列网址:
如何获得最佳的网站性能
选择中国网站(中文或英文)以获得最佳网站性能。其他MathWorks国家网站没有针对您所在位置的访问进行优化。