主要内容

audiodataAugmenter.

增加音频数据

描述

使用音频增强技术放大音频数据集,如音调转换,时间尺度修改,时间转换,噪声加法和音量控制。您可以创建级联或并行增强管道,以确定多种算法或概率。

创建

描述

八月= audioDataAugmenter ()创建带有默认属性值的音频数据增强器对象。

例子

八月= audioDataAugmenter (名称,价值的非默认属性八月使用一个或多个名称值对参数。

特性

全部展开

增加管道

增强模式,指定为'顺序'“独立”

  • '顺序'—增强算法是按顺序(串联)应用的。

  • “独立”增强算法是独立(并行)应用的。

数据类型:字符|细绳

增强参数来源,指定为“随机”“指定”

  • “随机”——使用概率参数和范围参数来概率化地应用扩展算法。

    例如,要创建audiodataAugmenter.这适用于使用的加速因子的时间拉伸0.51.5具有60%的概率,请在“命令”窗口中输入以下内容:

    8月= audioDataAugmenter (“AugmentationParameterSource”“随机”......“TimeStretchProbability”, 0.6,......'speedupfactorrange'[0.5, 1.5]);
    当应用时间拉伸时,加速因子是从一个以1(范围的平均值)为中心的均匀分布中得到的,最小值为0.5最多1.5

  • “指定”——使用逻辑参数和指定的参数值确定地应用增广算法。例如,要创建audiodataAugmenter.这适用于使用a来延长时间1.5加速因子具有100%概率,在命令窗口中输入以下内容:

    8月= audioDataAugmenter (“AugmentationParameterSource”“指定”......“ApplyTimeStretch”,真的,......“SpeedupFactor”, 1.5);

数据类型:字符|细绳

输出的增强信号的数量,指定为正整数。

依赖性

若要启用此属性,请设置upmumentationParametersource.“随机”

数据类型:单身的||int8|int16|int32|int64|uint8.|uint16|UINT32.|uint64

段时间

应用时间延伸的概率,指定为范围[0,1]内的标量。将概率设为1每次打电话都要延长时间增加.将概率设为0每次打电话时都会跳过时间增加

依赖性

若要启用此属性,请设置upmumentationParametersource.“随机”增强码'顺序'

数据类型:单身的|

时间延伸加速因子的范围,指定为具有正非递减值的二元行向量。

依赖性

若要启用此属性,请设置upmumentationParametersource.“随机”

数据类型:单身的||int8|int16|int32|int64|uint8.|uint16|UINT32.|uint64

应用时间延伸,指定为真正的错误的

依赖性

若要启用此属性,请设置upmumentationParametersource.“指定”

数据类型:逻辑

时间拉伸加速因子,指定为实正值的标量或向量。

依赖性

若要启用此属性,请设置upmumentationParametersource.“指定”

数据类型:单身的||int8|int16|int32|int64|uint8.|uint16|UINT32.|uint64

转移播放

施加音高偏移的概率,指定为范围的标量[0,1]。将概率设为1在每次调用时应用音高变换增加.将概率设为0每次打电话时都会跳过球场转移增加

依赖性

若要启用此属性,请设置upmumentationParametersource.“随机”增强码'顺序'

数据类型:单身的|

音节中的音高转移范围,指定为非分泌值的双元素行向量。

依赖性

若要启用此属性,请设置upmumentationParametersource.“随机”

数据类型:单身的||int8|int16|int32|int64|uint8.|uint16|UINT32.|uint64

应用音高换档,指定为真正的错误的

依赖性

若要启用此属性,请设置upmumentationParametersource.“指定”

数据类型:逻辑

音高在半音移位,指定为真正的标量或向量。

依赖性

若要启用此属性,请设置upmumentationParametersource.“指定”

数据类型:单身的||int8|int16|int32|int64|uint8.|uint16|UINT32.|uint64

控制卷

应用卷控制的概率,指定为范围的标量[0,1]。将概率设为1在每次呼叫时应用音量控制增加.将概率设为0每次呼叫时都会跳过卷控制增加

依赖性

若要启用此属性,请设置upmumentationParametersource.“随机”增强码'顺序'

数据类型:单身的|

以dB为单位的体积增益范围,指定为非递减值的二元行向量。

依赖性

若要启用此属性,请设置upmumentationParametersource.“随机”

数据类型:单身的||int8|int16|int32|int64|uint8.|uint16|UINT32.|uint64

施加卷增益,指定为真正的错误的

依赖性

若要启用此属性,请设置upmumentationParametersource.“指定”

数据类型:逻辑

体积增益,单位为dB,指定为标量或矢量。

数据类型:单身的||int8|int16|int32|int64|uint8.|uint16|UINT32.|uint64

添加噪音

应用高斯白噪声的概率,指定为范围的标量[0,1]。将概率设为1每次你打电话的时候都要增加噪音增加.将概率设为0每次打电话时都会跳过添加噪音增加

依赖性

若要启用此属性,请设置upmumentationParametersource.“随机”增强码'顺序'

数据类型:单身的|

DB中的噪声加法SNR的范围,指定为非分泌值的双元素行向量。

依赖性

若要启用此属性,请设置upmumentationParametersource.'范围'

数据类型:单身的||int8|int16|int32|int64|uint8.|uint16|UINT32.|uint64

应用高斯白噪声加法,指定为真正的错误的

依赖性

若要启用此属性,请设置upmumentationParametersource.“指定”

数据类型:逻辑

噪声附加信噪比(dB),指定为标量或向量。

数据类型:单身的||int8|int16|int32|int64|uint8.|uint16|UINT32.|uint64

转移时间

应用时移的概率,指定为范围[0,1]内的标量。将概率设为1每次打电话时都要进行时间转换增加.将属性设置为0你每次打电话的时候都不用切换时间增加

时移应用时域音频数据的循环移位。

依赖性

若要启用此属性,请设置upmumentationParametersource.“随机”增强码'顺序'

数据类型:单身的|

以秒为单位的时移范围,指定为非递减值的两元素行向量。

依赖性

若要启用此属性,请设置upmumentationParametersource.“随机”

数据类型:单身的||int8|int16|int32|int64|uint8.|uint16|UINT32.|uint64

应用时间偏移,指定为真正的错误的

依赖性

若要启用此属性,请设置upmumentationParametersource.“指定”

时移应用时域音频数据的循环移位。

数据类型:逻辑

以秒为单位,指定为标量或向量。

依赖性

若要启用此属性,请设置upmumentationParametersource.“指定”

数据类型:单身的||int8|int16|int32|int64|uint8.|uint16|UINT32.|uint64

对象功能

addaummentationmethod. 添加自定义增强方法
removeAugmentationMethod 删除自定义增强方法
增加 增加音频数据
setaummenterparams. 设置增强算法参数
getaummenterparams. 得到增强算法的参数

例子

全部收缩

在音频信号中读取并收听它。

[audioIn, fs] = audioread (“计数-16-44p1-mono-15secs.wav”);声音(audioIn fs)

创建一个audiodataAugmenter.对象,该对象以级联方式应用时间拉伸、音量控制和时间移动。以80%的概率应用每个增强。集NumAugmentations5输出五个独立增强的信号。要跳过每个增强的音调移位和噪声,请设置相应的概率0.为每个相关的增广算法定义参数范围。

upulmer = audiodataAugmenter(......“AugmentationMode”“顺序”......“numaugmentations”,5,............“TimeStretchProbability”,0.8,......“speedupfactorrange”,[1.3,1.4],............“PitchShiftProbability”0,............“VolumeControlProbability”,0.8,......“VolumeGainRange”,[ -  5,5],............“addnoiseprobability”0,............“timeshiftprobability”,0.8,......“TimeShiftRange”,[-500e-3,500e-3])
增量= audioDataAugmenter属性:AugmentationMode:“顺序”AugmentationParameterSource:“随机”NumAugmentations: 5 TimeStretchProbability: 0.8000 SpeedupFactorRange: [1.3000 - 1.4000] PitchShiftProbability: 0 VolumeControlProbability: 0.8000 VolumeGainRange: 5 [5] AddNoiseProbability: 0 TimeShiftProbability:0.8000 TimeShiftRange: [-0.5000 0.5000]

调用增加在音频上创建5个增强。增强的音频在一个与变量的表中返回音频AugmentationInfo.表中的行数定义为NumAugmentations

data =增加(增压器、audioIn fs)
data =5×2表Audio AugmentationInfo _________________ _______________duply} 1x1 struct {685056x1 double} 1x1 struct {505183x1 double} 1x1 struct {685056x1 double} 1x1 struct {490728x1 double} 1x1 struct

在当前增强管道中,增强参数从指定的范围内随机分配。确定用于增强的确切参数,检查AugmentationInfo

augmentationToInspect =4;data.AugmentationInfo (augmentationToInspect)
ans =.结构与字段:SpeedupFactor: 1 VolumeGain: 4.3399 timesshift: 0.4502

倾听你正在检查的扩充。绘制原始信号和增广信号的时间表示。

增加= data.Audio {augmentationToInspect};sound(augmented,fs) t = (0:(numel(audioIn)-1))/fs;taug =(0:(元素个数(增加)1))/ fs;情节(t, audioIn taug增大)传说(“原始音频”“增强音频”) ylabel (“振幅”)包含(“时间”

图包含轴对象。轴对象包含2个类型的类型。这些对象代表原始音频,增强音频。

在音频信号中读取并收听它。

[audioIn, fs] = audioread (“计数-16-44p1-mono-15secs.wav”);声音(audioIn fs)

创建一个audiodataAugmenter.应用时间拉伸,俯仰换档和级联噪声损坏的对象。指定时间拉速超速因子0.91.1,1.2.指定半音中的音高移动为-2-11,2.指定噪声损坏SNR10DB和15D b。

upulmer = audiodataAugmenter(......“AugmentationMode”“顺序”......“AugmentationParameterSource”“指定”......“speedupfactor”,[0.9,1.1,1.2],......“applytimestretch”,真的,......“applypitchshift”,真的,......“讽刺”,[ -  2,-1,1,2],......“snr”(10、15),......“ApplyVolumeControl”假的,......“应用现实eShift”假)
augmenter = audioDataAugmenter with properties: AugmentationMode: "sequential" AugmentationParameterSource: "specify" ApplyTimeStretch: 1 SpeedupFactor: [0.9000 1.1000 1.2000] ApplyPitchShift: 1 semitonesshift: [-2 -1 1 2] ApplyVolumeControl: 0 ApplyAddNoise: 1 SNR: [10 15] applytimesshift: 0

调用增加在音频上创建24个增强。增强代表指定增强参数的每个组合( 3. × 4 × 2 24 )。

data =增加(增压器、audioIn fs)
data =24×2表音频AugmentationInfo  _________________ ________________ { 761243 x1双}1 x1 struct {622888 x1双}1 x1 struct {571263 x1双}1 x1 struct {761243 x1双}1 x1 struct {622888 x1双}1 x1 struct {571263 x1双}1 x1 struct {761243 x1双}1 x1 struct {622888 x1双}1 x1 struct {571263 x1双}1 x1 struct {761243 x1双}1 x1结构{622888x1 double} 1x1 struct {761263 x1 double} 1x1 struct {761263 x1 double} 1x1 struct {761263 x1 double} 1x1 struct⋮

属性检查每个扩展的参数配置AugmentationInfo表变量。

augmentationToInspect =1;data.AugmentationInfo (augmentationToInspect)
ans =.结构与字段:SpeedupFactor: 0.9000 semitonesshift: -2信噪比:10

倾听你正在检查的扩充。绘制原始和增强信号的时域表示。

增加= data.Audio {augmentationToInspect};sound(augmented,fs) t = (0:(numel(audioIn)-1))/fs;taug =(0:(元素个数(增加)1))/ fs;情节(t, audioIn taug增大)传说(“原始音频”“增强音频”) ylabel (“振幅”)包含(“时间”

图包含轴对象。轴对象包含2个类型的类型。这些对象代表原始音频,增强音频。

在音频信号中读取并收听它。

[audioIn, fs] = audioread (“计数-16-44p1-mono-15secs.wav”);

创建一个audiodataAugmenter.应用噪声损坏的对象,并在并行分支中移动时间。对于噪声损坏分支,随机将噪声随机应用于范围内的SNR0DB到20.D b。对于时间转移分支,随机应用时间转移范围 -300MS到300ms.每个分支进行2次扩增,共4次。

upulmer = audiodataAugmenter(......“AugmentationMode”“独立的”......“AugmentationParameterSource”“随机”......“numaugmentations”,2,......“applytimestretch”假的,......“applypitchshift”假的,......“ApplyVolumeControl”假的,......“snrrange”(0, 20),......“TimeShiftRange”,[ -  300e-3,300e-3])
upmmenter = audiodataAugmenter具有属性:AugmentationMode:“独立”增强参数:“随机”Numauginations:2 ApplyTimestRetch:0 ApplyPitchshift:0 ApplyVolumeControl:0 ApplyAddnoise:1 SNRRange:[0 20] ApplyTimeShift:1 Timeshiftrange:[-0.3000 0.3000]

调用增加在音频上创建3个增强。

data =增加(增压器、audioIn fs);

属性检查每个扩展的参数配置AugmentatioInfo.表变量。

augmentationToInspect =4;数据。AugmentationInfo {augmentationToInspect}
ans =.结构与字段:Timeshift:0.0016.

听你正在检查的音频。绘制原始和增强信号的时域表示。

增加= data.Audio {augmentationToInspect};sound(augmented,fs) t = (0:(numel(audioIn)-1))/fs;taug =(0:(元素个数(增加)1))/ fs;情节(t, audioIn taug增大)传说(“原始音频”“增强音频”) ylabel (“振幅”)包含(“时间”

图包含轴对象。轴对象包含2个类型的类型。这些对象代表原始音频,增强音频。

在音频信号中读取并收听它。

[audioIn, fs] = audioread (“计数-16-44p1-mono-15secs.wav”);

创建一个audiodataAugmenter.应用卷控制,噪声损坏和在并行分支中移动时的对象。

upulmer = audiodataAugmenter(......“AugmentationMode”“独立的”......“AugmentationParameterSource”“指定”......“applytimestretch”假的,......“applypitchshift”假的,......“VolumeGain”,2,......“snr”0,......“timeshift”, 2)
augmenter = audioDataAugmenter带有属性:AugmentationMode: "independent" AugmentationParameterSource: "specify" ApplyTimeStretch: 0 ApplyPitchShift: 0 ApplyVolumeControl: 1 VolumeGain: 2 ApplyAddNoise: 1 SNR: 0 applytimesshift: 1 timesshift: 2

调用增加在音频上创建3个增强。

data =增加(增压器、audioIn fs)
data =3×2表音频AugmentationInfo  _________________ ________________ { 685056 x1双}{1 x1 struct} {685056 x1双}{1 x1 struct} {685056 x1双}{1 x1 struct}

属性检查每个扩展的参数配置AugmentatioInfo.表变量。

augmentationToInspect =3.;数据。AugmentationInfo {augmentationToInspect}
ans =.结构与字段:Timeshift:2

听你正在检查的音频。绘制原始和增强信号的时域表示。

增加= data.Audio {augmentationToInspect};sound(augmented,fs) t = (0:(numel(audioIn)-1))/fs;taug =(0:(元素个数(增加)1))/ fs;情节(t, audioIn taug增大)传说(“原始音频”“增强音频”) ylabel (“振幅”)包含(“时间”

图包含轴对象。轴对象包含2个类型的类型。这些对象代表原始音频,增强音频。

audiodataAugmenter.金宝app支持多个工作流程,以增加您的数据存储,包括:

  • 离线增大

  • 使用高阵列的增强

  • 使用转换数据存储进行扩充

在每个工作流中,首先创建一个音频数据存储来指向您的音频数据。在本例中,您创建了一个音频数据存储,它指向audio Toolbox™中包含的音频示例。统计数据集中文件的数量。

文件夹= fullfile(matlabroot,“工具箱”“音频”“样本”);广告= audioDatastore(文件夹)
ADS = audioDatastore与属性:文件:{'…\matlab\工具箱\音频\样本\Ambiance-16-44p1-mono-12secs.wav';“…\ matlab工具箱\ \音响\ samples \ AudioArray-16-16-4channels-20secs.wav”;“…\工具箱\音响\ samples \ ChurchImpulseResponse-16-44p1-mono-5secs.wav”……alteratefilesystemroots: {} OutputDataType: 'double'标签:{}
numFilesInDataset =元素个数(ADS.Files)
numFilesInDataset = 29

创建一个audiodataAugmenter.这适用于随机序列增广。集NumAugmentations2

8月= audioDataAugmenter (“NumAugmentations”, 2)
8月= audioDataAugmenter属性:AugmentationMode:“顺序”AugmentationParameterSource:“随机”NumAugmentations: 2 TimeStretchProbability: 0.5000 SpeedupFactorRange: [0.8000 - 1.2000] PitchShiftProbability: 0.5000 SemitoneShiftRange: [2 2] VolumeControlProbability: 0.5000 VolumeGainRange: 3 [3] AddNoiseProbability: 0.5000 SNRRange:[0 10] timeshifrange: [-0.0050 0.0050]

离线增大

要增强音频数据集,为每个文件创建两个增强,然后将增强写入WAV文件。

尽管hasdata(ADS) [audioIn,info] =读取(ADS);data =增加(8月audioIn info.SampleRate);[~, fn] = fileparts (info.FileName);为了i = 1:size(data,1) augmentedAudio = data. audio {i};%如果增强导致音频信号在-1和1之外的值具有值,%标准化音频信号以避免在写入时剪切。如果Max(ABS(AugmentedAudio),[],'全部')>1 augmentedAudio = augmentedAudio/max(abs(augmentedAudio),[],'全部');结尾audiowrite (sprintf (“% s_aug % d.wav”,fn,i),augmentedaudio,Info.Samplerate)结尾结尾

创建一个audioDatastore这指向增强的DataSet并确认数据集中的文件数是原始文件的双倍。

augmentedADS = audioDatastore (pwd)
augmentedADS = audioDatastore with properties: Files:{'…\Examples\audio-ex28074079\ ambience -16-44p1-mono-12secs_aug1.wav';“……\ \ audio-ex28074079 \ Ambiance-16-44p1-mono-12secs_aug2.wav例子”;“……\ \ audio-ex28074079 \ AudioArray-16-16-4channels-20secs_aug1.wav例子”……和55个更多}AlternateFileSystemRoots: {} OutputDataType: 'double'标签:{}
numFilesInAugmentedDataset =元素个数(augmentedADS.Files)
numFilesInAugmentedDataset = 58

使用高数组进行扩充

使用高阵列增强数据集时,应以一致的速率对增强器进行采样的输入数据。将原始音频数据集子集中仅包含具有44.1 kHz的采样率的文件。大多数数据集已清理为具有一致的采样率。

keepFile = cellfun (@ (x)包含(x,“44 p1”), ADS.Files);ads44p1 =子集(广告,keepFile);fs = 44.1 e3;

将音频数据存储转换为一个高数组。只有在明确使用时才会评估数组收集.MATLAB®通过最小化通过数据的传递数来自动优化排队的计算。如果您有并行计算工具箱™,则可以在多台机器上传播计算。音频数据表示为一个-by-1高单元阵列,其中是音频数据存储中文件的数量。

adsTall =高(ads44p1)
使用“local”配置文件启动并行池(parpool)…连接到平行池(工人数量:6)。adsTall = M×1高细胞数组{539648×1双}{227497×1双}{8000×1双}{685056×1双}{882688×2双}{1115760×2双}{505200×2双}{3195904×2双}::::

定义一个cellfun函数,使增强应用于高数组的每个单元。调用收集求高数组的值。

奥巴尔= Cellfun(@(x)增强(八,x,fs),adstall,“UniformOutput”、假);augmentedDataset =收集(augTall)
使用Parallel Pool 'local'计算tall表达式:- Pass 1 of 1: Completed in 1 min 34 sec
AugmentedDataset =12×1个单元阵列{2×2表}{2×2表}{2×2表}{2×2表}{2×2表}{2×2表}{2×2表}{2×2表}{2×2表}{2×2表}{2×2表}}{2×2表

增强的数据集返回为anumFiles-by-1 cell array,其中numFiles是数据存储中的文件数。单元格数组的每个元素都是numaugmentationsperfile.表2,numaugmentationsperfile.是每个文件返回的增强次数。

numFiles =元素个数(augmentedDataset)
numfiles = 12.
numAugmentationsPerFile =大小(augmentedDataset {1}, 1)
numaummentationsperfile = 2

使用转换数据存储来增加

您可以在使用转换数据存储训练机器学习应用程序的同时执行在线数据增强。调用变换创建一个新数据存储,在阅读时应用数据增强。

transformADS =变换(广告,@ (x,信息)增加(8月,x,信息),“IncludeInfo”,真正的)
transformADS = TransformedDatastore与属性:UnderlyingDatastore: [1×1 audioDatastore]转换:{@(x,info)augment(aug,x,info)} IncludeInfo: 1

调用从转换数据存储返回扩展后的第一个文件。

augmentedRead =阅读(transformADS)
augmentedRead =2×2表音频AugmentationInfo  _________________ ________________ { 539648×1双}[1×1 struct]{586683×1双}(1×1结构)

的功能可以扩展audiodataAugmenter.通过添加自定义扩展方法。

在音频信号中读取并收听它。

[audioIn, fs] = audioread (“Counting-16-44p1-mono-15secs.wav”);声音(audioIn fs)

创建一个audiodataAugmenter.对象。设置应用白噪声的概率0

upulmer = audiodataAugmenter(“AddNoiseProbability”,0)
增量= audioDataAugmenter属性:AugmentationMode:“顺序”AugmentationParameterSource:“随机”NumAugmentations: 1 TimeStretchProbability: 0.5000 SpeedupFactorRange: [0.8000 - 1.2000] PitchShiftProbability: 0.5000 SemitoneShiftRange: [2 2] VolumeControlProbability: 0.5000 VolumeGainRange: 3 [3] AddNoiseProbability:0 TimeShiftProbability: 0.5000 timeshifrange: [-0.0050 0.0050]

指定应用粉红色噪声的自定义增强算法。的AddPinkNoise算法添加到增强者属性。

algorithmName =“AddPinkNoise”;algorithm handle = @(x)x + pinknoise(size(x),“喜欢”,X);addaummentationmethod(增强器,算法,algorithmhandle)增强器
增量= audioDataAugmenter属性:AugmentationMode:“顺序”AugmentationParameterSource:“随机”NumAugmentations: 1 TimeStretchProbability: 0.5000 SpeedupFactorRange: [0.8000 - 1.2000] PitchShiftProbability: 0.5000 SemitoneShiftRange: [2 2] VolumeControlProbability: 0.5000 VolumeGainRange: 3 [3] AddNoiseProbability:0 TimeshiftProbability:0.5000 Timeshiftrange:[-0.0050 0.0050] AddpinkNoiseProbability:0.5000

设置添加粉红色噪声的概率1

增压器。AddPinkNoiseProbability = 1
增量= audioDataAugmenter属性:AugmentationMode:“顺序”AugmentationParameterSource:“随机”NumAugmentations: 1 TimeStretchProbability: 0.5000 SpeedupFactorRange: [0.8000 - 1.2000] PitchShiftProbability: 0.5000 SemitoneShiftRange: [2 2] VolumeControlProbability: 0.5000 VolumeGainRange: 3 [3] AddNoiseProbability:0 TimeShiftProbability: 0.5000 timeshifrange: [-0.0050 0.0050] AddPinkNoiseProbability: 1

增加原始信号并监听结果。检查所应用的增强算法的参数。

data =增加(增压器、audioIn fs);声音(data.Audio {1}, fs) data.AugmentationInfo (1)
ans =.结构与字段:speedpfactor: 1 semitonesshift: 0 VolumeGain: 2.4803 timesshift: -0.0022 AddPinkNoise:“应用”

绘制原始信号和增广信号的mel谱图。

MELSPECTROGe(AUDION,FS)标题(原始信号的

图包含轴对象。具有标题原始信号的轴对象包含类型图像的对象。

melSpectrogram (data.Audio {1}, fs)标题('增强信号'

图包含轴对象。具有标题增强信号的轴对象包含类型图像的对象。

算法

全部展开

audiodataAugmenter.对象使您能够将增强管道配置为确定性或概率性upmumentationParametersource.财产。您还可以选择使用串联或并行应用增强增强码财产。以下部分描述了您可以为每个架构创建和适用的属性的管道。

参考文献

Salamon, Justin和Juan Pablo Bello。“用于环境声音分类的深度卷积神经网络和数据增强”。IEEE信号处理信.2017年第24卷第3期。

介绍了R2019b