流线音频特征提取
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”,真正的);barkSpectralCentroid = extract(aFE,audioIn);
barkSpectrum
使用setExtractorParams
,则非默认Bark谱作为谱描述符的输入。例如,如果你打电话setExtractorParams (aFE“barkSpectrum”、“NumBands”,40)
,然后aFE
返回40波段Bark谱的质心。
setExtractorParams (aFE“barkSpectrum”,“NumBands”,40) bark40SpectralCentroid = extract(aFE,audioIn);
数据类型:字符
|字符串
FeatureVectorLength
- - - - - -从提取中输出的特征数linearSpectrum
- - - - - -提取线性谱假
(默认)|真正的
提取单边线性谱,指定为真正的
或假
.
设置线性谱提取参数,使用setExtractorParams
:
setExtractorParams (aFE“linearSpectrum”,“名称”,值)
“FrequencyRange”
——提取的频谱的频率范围,以Hz为单位,以逗号分隔的对组成“FrequencyRange”
和一个在范围[0,SampleRate/ 2)。如果未指定的,FrequencyRange
默认为[0,
.SampleRate
/ 2)
“SpectrumType”
——频谱类型,指定为逗号分隔的对,由“SpectrumType”
而且“权力”
或“级”
.如果未指定的,SpectrumType
默认为“权力”
.
“WindowNormalization”
——应用窗口归一化,指定为由逗号分隔的对组成“WindowNormalization”
而且真正的
或假
.如果未指定的,WindowNormalization
默认为真正的
.
数据类型:逻辑
melSpectrum
- - - - - -提取mel光谱假
(默认)|真正的
提取单侧梅尔光谱,指定为真正的
或假
.
设置mel光谱提取参数,使用setExtractorParams
:
setExtractorParams (aFE“melSpectrum”,“名称”,值)
“FrequencyRange”
——提取的频谱的频率范围,以Hz为单位,以逗号分隔的对组成“FrequencyRange”
和一个在范围[0,SampleRate/ 2)。如果未指定的,FrequencyRange
默认为[0,
.SampleRate
/ 2)
“SpectrumType”
——频谱类型,指定为逗号分隔的对,由“SpectrumType”
而且“权力”
或“级”
.如果未指定的,SpectrumType
默认为“权力”
.
“NumBands”
——mel频带的数量,指定为逗号分隔的对,由“NumBands”
一个整数。如果未指定的,NumBands
默认为32
.
“FilterBankNormalization”
——应用于带通滤波器的归一化,指定为逗号分隔的对,由“FilterBankNormalization”
而且“带宽”
,“区域”
,或“没有”
.如果未指定的,FilterBankNormalization
默认为“带宽”
.
“WindowNormalization”
——应用窗口归一化,指定为由逗号分隔的对组成“WindowNormalization”
而且真正的
或假
.如果未指定的,WindowNormalization
默认为真正的
.
“FilterBankDesignDomain”
——设计过滤器组的域,指定为逗号分隔的对,由FilterBankDesignDomain
,要么“线性”
或“扭曲”
.如果未指定的,FilterBankDesignDomain
默认为“线性”
.
数据类型:逻辑
barkSpectrum
- - - - - -提取树皮光谱假
(默认)|真正的
提取单边树皮谱,指定为真正的
或假
.
如需设置Bark谱提取参数,请使用setExtractorParams
:
setExtractorParams (aFE“barkSpectrum”,“名称”,值)
“FrequencyRange”
——提取的频谱的频率范围,以Hz为单位,以逗号分隔的对组成“FrequencyRange”
和一个在范围[0,SampleRate/ 2)。如果未指定的,FrequencyRange
默认为[0,
.SampleRate
/ 2)
“SpectrumType”
——频谱类型,指定为逗号分隔的对,由“SpectrumType”
而且“权力”
或“级”
.如果未指定的,SpectrumType
默认为“权力”
.
“NumBands”
——Bark带的数量,指定为逗号分隔的对,由“NumBands”
一个整数。如果未指定的,NumBands
默认为32
.
“FilterBankNormalization”
——应用于带通滤波器的归一化,指定为逗号分隔的对,由“FilterBankNormalization”
而且“带宽”
,“区域”
,或“没有”
.如果未指定的,FilterBankNormalization
默认为“带宽”
.
“WindowNormalization”
——应用窗口归一化,指定为由逗号分隔的对组成“WindowNormalization”
而且真正的
或假
.如果未指定的,WindowNormalization
默认为真正的
.
“FilterBankDesignDomain”
——设计过滤器组的域,指定为逗号分隔的对,由FilterBankDesignDomain
,要么“线性”
或“扭曲”
.如果未指定的,FilterBankDesignDomain
默认为“线性”
.
数据类型:逻辑
erbSpectrum
- - - - - -提取ERB频谱假
(默认)|真正的
提取单边ERB谱,指定为真正的
或假
.
如果需要设置ERB频谱提取参数,请使用setExtractorParams
:
setExtractorParams (aFE“erbSpectrum”,“名称”,值)
“FrequencyRange”
——提取的频谱的频率范围,以Hz为单位,以逗号分隔的对组成“FrequencyRange”
和一个在范围[0,SampleRate/ 2)。如果未指定的,FrequencyRange
默认为[0,
.SampleRate
/ 2)
“SpectrumType”
——频谱类型,指定为逗号分隔的对,由“SpectrumType”
而且“权力”
或“级”
.如果未指定的,SpectrumType
默认为“权力”
.
“NumBands”
——ERB带的个数,以逗号分隔的对组成“NumBands”
一个整数。如果未指定的,NumBands
默认为(即:
.hz2erb
(FrequencyRange (2))hz2erb
(FrequencyRange (1)))
“FilterBankNormalization”
——应用于带通滤波器的归一化,指定为逗号分隔的对,由“FilterBankNormalization”
而且“带宽”
,“区域”
,或“没有”
.如果未指定的,FilterBankNormalization
默认为“带宽”
.
“WindowNormalization”
——应用窗口归一化,指定为由逗号分隔的对组成“WindowNormalization”
而且真正的
或假
.如果未指定的,WindowNormalization
默认为真正的
.
数据类型:逻辑
mfcc
- - - - - -提取梅尔频率倒谱系数(MFCC)假
(默认)|真正的
提取梅尔频率倒谱系数(MFCC),指定为真正的
或假
.
设置MFCC提取参数,使用setExtractorParams
:
setExtractorParams (aFE“mfcc”,“名称”,值)
“NumCoeffs”
——每个窗口返回的系数数,由逗号分隔的对组成“NumCoeffs”
一个正整数。如果未指定的,NumCoeffs
默认为13
.
“DeltaWindowLength”
——Delta窗口长度,由逗号分隔的对组成“DeltaWindowLength”
一个大于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提取参数,请使用setExtractorParams
:
setExtractorParams (aFE“gtcc”,“名称”,值)
“NumCoeffs”
——每个窗口返回的系数数,由逗号分隔的对组成“NumCoeffs”
一个正整数。如果未指定的,NumCoeffs
默认为13
.
“DeltaWindowLength”
——Delta窗口长度,由逗号分隔的对组成“DeltaWindowLength”
一个大于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属性:
若要设置光谱通量提取的参数,请使用setExtractorParams
:
setExtractorParams (aFE“spectralFlux”,“名称”,值)
“NormType”
——用于计算光谱通量的范数类型,指定为逗号分隔的对,由“NormType”
和一个1
或2
.如果未指定的,NormType
默认为2
.
数据类型:逻辑
spectralKurtosis
- - - - - -提取谱峰度假
(默认)|真正的
spectralRolloffPoint
- - - - - -提取光谱滚转点假
(默认)|真正的
提取光谱滚转点,指定为真正的
或假
.
属性所指定的下列光谱表示之一上计算光谱滚落点SpectralDescriptorInput属性:
要设置光谱滚转点提取的参数,请使用setExtractorParams
:
setExtractorParams (aFE“spectralRolloffPoint”,“名称”,值)
“阈值”
——滚转点的阈值,指定为逗号分隔的对,由“阈值”
和范围(0,1)中的标量。如果未指定,阈值
默认为0.95
.
数据类型:逻辑
spectralSkewness
- - - - - -提取光谱偏度假
(默认)|真正的
spectralSlope
- - - - - -提取谱斜率假
(默认)|真正的
spectralSpread
- - - - - -提取谱展假
(默认)|真正的
球场
- - - - - -提取音高假
(默认)|真正的
提取螺距,指定为真正的
或假
.
要设置基音提取参数,请使用setExtractorParams
:
setExtractorParams (aFE“节”,“名称”,值)
“方法”
——用于计算螺距的方法,指定为逗号分隔的对,由“方法”
而且“PEF”
,“NCF”
,“CEP”
,“韩”
,或“SRH”
.如果未指定的,方法
默认为“NCF”
.有关可用的音调提取方法的说明,请参见球场
.
“范围”
——Range within用于搜索以Hz为单位的音高,指定为逗号分隔的对,由“范围”
和一个两元值递增的行向量。如果未指定的,范围
默认为[50400]
.
“MedianFilterLength”
——中值滤波器长度用于平滑音调估计随时间的变化,指定为逗号分隔的对,由“MedianFilterLength”
一个正整数。如果未指定的,MedianFilterLength
默认为1
(没有中值过滤)。
数据类型:逻辑
harmonicRatio
- - - - - -提取谐波比假
(默认)|真正的
提取谐波比,指定为真正的
或假
.
数据类型:逻辑
提取 |
提取音频特征 |
setExtractorParams |
为各个特征提取器设置非默认参数值 |
信息 |
输出映射和单独的特征提取器参数 |
generateMATLABFunction |
创建MATLAB函数兼容C/ c++代码生成 |
读入音频信号。
[audioIn,fs] = audioread(“Counting-16-44p1-mono-15secs.wav”);
创建一个audioFeatureExtractor
对象,提取音频信号的MFCC, delta MFCC, delta-delta MFCC,音调和频谱质心。使用30毫秒的分析窗口和20毫秒的重叠。
aFE = audioFeatureExtractor(...“SampleRate”fs,...“窗口”汉明(圆(0.03 * fs),“周期”),...“OverlapLength”而圆(0.02 * fs),...“mfcc”,真的,...“mfccDelta”,真的,...“mfccDeltaDelta”,真的,...“节”,真的,...“spectralCentroid”,真正的);
调用提取
从音频信号中提取音频特征。
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
绘制检测到的音调随时间的变化。
t = linspace(0,size(audioIn,1)/fs,size(features,1));情节(t)特性(:,idx.pitch))标题(“节”)包含(“时间(s)”) ylabel (的频率(赫兹))
创建音频数据存储,指向音频工具箱®中包含的音频样本。
文件夹= 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.1 e3,...“melSpectrum”,真的,...“barkSpectrum”,真的,...“erbSpectrum”,真的,...“linearSpectrum”,真正的);
定义一个cellfun
函数,以便从tall数组的每个单元格中提取音频特征。调用收集
计算tall数组。
specsTall = cellfun(@(x)extract(aFE,x),adsTall,“UniformOutput”、假);specs = gather(specsTall);
使用并行池“本地”评估tall表达式:-通过1 / 1:在12秒内完成评估
的规格
从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
的audioFeatureExtractor
基于所选特性创建一个特性提取管道。为了减少计算量,audioFeatureExtractor
重用中介表示。一些中间表示可以输出为特征:
例如,要创建提取Bark谱的质心、Bark谱的通量、基音、谐波比和MFCC的delta-delta的对象,请指定audioFeatureExtractor
为:
aFE = audioFeatureExtractor(...“SpectralDescriptorInput”,“barkSpectrum”,...“spectralCentroid”,真的,...“spectralFlux”,真的,...“节”,真的,...“harmonicRatio”,真的,...“mfccDeltaDelta”,真正的)
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= true, adds mfcc to the list of enabled features.
请注意
因为audioFeatureExtractor
重用中介表示,从的特性输出audioFeatureExtractor
可能与相应的单独特征提取器输出的特征的默认配置不一致。
R2020b的行为发生了变化
的audioDelta
函数现在用于计算mfccDelta
,mfccDeltaDelta
,gtccDelta
,gtccDeltaDelta
.的audioDelta
算法的启动行为与之前的算法不同。用于计算增量的默认窗口长度已从2
来9
.的增量窗口长度2
不再支持。万博1manbetx
使用注意事项和限制:
不能直接从audioFeatureExtractor
.返回的函数可以生成C/ c++代码generateMATLABFunction
.
Tiene una versión modificada de este ejemplo。¿Desea abrir este ejemplo con sus modificaciones?
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国家站点没有针对您所在位置的访问进行优化。