主要内容

audioDataAugmenter

增加音频数据

描述

使用音高变换、时间尺度修改、时移、噪声添加和音量控制等音频特定的增强技术来扩大音频数据集。您可以创建级联或并行的增强管道,以确定或概率地应用多个算法。

创建

描述

8月= audioDataAugmenter ()使用默认属性值创建音频数据增强程序对象。

实例

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

属性

全部展开

扩充管道

扩充模式,指定为'顺序'“独立”

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

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

数据类型:字符|字符串

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

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

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

    aug=音频数据增强器(“AugmentationParameterSource”,“随机”,...“时间树概率”,0.6,...“SpeedupFactorRange”,[0.5,1.5]);
    当应用时间拉伸时,加速因子是从一个以1(范围的平均值)为中心的均匀分布中得到的,最小值为0.5最多1.5

  • “指定”——使用逻辑参数和指定的参数值确定地应用增广算法。例如,要创建audioDataAugmenter这适用于使用1.5在命令窗口中输入以下内容:

    aug=音频数据增强器(“AugmentationParameterSource”,“指定”,...“ApplyTimeStretch”符合事实的...“加速因子”,1.5);

数据类型:字符|字符串

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

依赖关系

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

数据类型:||int8|int16|int32|int64|uint8|uint16|uint32|uint64

段时间

应用时间拉伸的概率,指定为范围[0,1]中的标量。将概率设置为1.每次打电话时都要进行时间拉伸加强.设置概率0每次你打电话的时候都跳过时间拉伸加强

依赖关系

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

数据类型:|

时间拉伸加速因子的范围,指定为正非衰减值的两元素行向量。

依赖关系

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

数据类型:||int8|int16|int32|int64|uint8|uint16|uint32|uint64

应用时间拉伸,指定为符合事实的错误的

依赖关系

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

数据类型:必然的

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

依赖关系

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

数据类型:||int8|int16|int32|int64|uint8|uint16|uint32|uint64

改变音高

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

依赖关系

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

数据类型:|

在半分泌物中的音高换档范围,被指定为非分泌值的双元素行向量。

依赖关系

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

数据类型:||int8|int16|int32|int64|uint8|uint16|uint32|uint64

应用节距偏移,指定为符合事实的错误的

依赖关系

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

数据类型:必然的

音高在半音中转换,指定为真正的标量或向量。

依赖关系

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

数据类型:||int8|int16|int32|int64|uint8|uint16|uint32|uint64

控制体积

应用音量控制的概率,指定为范围[0,1]内的标量。设置概率1.每次通话时应用音量控制加强.设置概率0每次通话时跳过音量控制加强

依赖关系

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

数据类型:|

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

依赖关系

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

数据类型:||int8|int16|int32|int64|uint8|uint16|uint32|uint64

应用音量增益,指定为符合事实的错误的

依赖关系

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

数据类型:必然的

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

数据类型:||int8|int16|int32|int64|uint8|uint16|uint32|uint64

添加噪音

应用高斯白噪声的概率添加,指定为范围的标量[0,1]。设置概率1.每次打电话时都要增加噪音加强.设置概率0避免每次打电话时都加噪音加强

依赖关系

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

数据类型:|

以dB为单位的噪声附加信噪比的范围,指定为非递减值的二元行向量。

依赖关系

若要启用此属性,请设置AugmentationParameterSource“范围”

数据类型:||int8|int16|int32|int64|uint8|uint16|uint32|uint64

应用高斯白噪声加法,指定为符合事实的错误的

依赖关系

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

数据类型:必然的

噪声相加SNR,单位为dB,指定为标量或矢量。

数据类型:||int8|int16|int32|int64|uint8|uint16|uint32|uint64

转移时间

应用时移的概率,指定为范围[0,1]内的标量。设置概率1.在每次通话时应用时移加强. 将属性设置为0每次打电话时跳过时间转换加强

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

依赖关系

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

数据类型:|

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

依赖关系

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

数据类型:||int8|int16|int32|int64|uint8|uint16|uint32|uint64

应用时间偏移,指定为符合事实的错误的

依赖关系

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

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

数据类型:必然的

以秒为单位的时移,指定为标量或矢量。

依赖关系

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

数据类型:||int8|int16|int32|int64|uint8|uint16|uint32|uint64

对象功能

addaummentationmethod. 添加自定义增强方法
removeAugmentationMethod 删除自定义增强方法
加强 增加音频数据
setaummenterparams. 增强算法的参数
getAugmenterParams 获取增广算法的参数

例子

全部收缩

读入音频信号并收听它。

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

创建一个audioDataAugmenter对象,该对象以级联方式应用时间拉伸、音量控制和时间移动。以80%的概率应用每个增强。设置核爆5.输出五个独立增强的信号。若要跳过每个增强的俯仰移位和噪声添加,请将各自的概率设置为0.定义每个相关增强算法的参数范围。

增量= audioDataAugmenter (...“增强模式”,“顺序”,...“numaugmentations”5,......“时间树概率”,0.8,...“speedupfactorrange”[1.3, 1.4],......“PitchShiftProbability”0,......“体积控制概率”,0.8,...“VolumeGainRange”, 5, 5],......“AddNoiseProbability”0,......“timeshiftprobability”,0.8,...“时间换档范围”,[-500E-3,500E-3])
augmenter=audioDataAugmenter及其属性:AugmentationMode:“sequential”AugmentationParameterSource:“random”Numagmentations:5 TimeStretchProbability:0.8000 SpeedupFactorRange:[1.3000 1.4000]PitchShiftProbability:0 VolumeControlProbability:0.8000 VolumeGainRange:[-5]AddNoise可能性:0次移位概率:0.8000次移位范围:[-0.5000 0.5000]

调用加强在音频上创建5个增强。增强的音频在一个带有变量的表中返回音频增强信息。表中的行数由定义核爆

data =增加(增压器、audioIn fs)
资料=5×2表音频信息_________________ ________________ {685056x1 double} 1x1 struct {685056x1 double} 1x1 struct {505183x1 double} 1x1 struct {685056x1 double} 1x1 struct {490728x1 double} 1x1 struct

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

扩大检查=4.; data.AugmentationInfo(augmentationToInspect)
ANS =.结构与字段:加速系数:1体积增益:4.3399时间换档:0.4502

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

augmentation=data.Audio{augmentationToInspect};sound(augmentation,fs)t=(0:(numel(audioIn)-1))/fs;taug=(0:(numel(augmentation)-1))/fs;plot(t,audioIn,taug,augmentation)图例(“原始音频”,“增强音频”)伊拉贝尔(“振幅”)xlabel(“时间”)

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

读入音频信号并收听它。

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

创建一个audioDataAugmenter对象,它在级联中应用时间拉伸、音调转换和噪声破坏。指定时间扩展加速因子为0.9,1.11.2. 将半音中的音调偏移指定为-2,-1,1.2..指定噪声损坏SNR10DB和15dB。

增量= audioDataAugmenter (...“增强模式”,“顺序”,...“AugmentationParameterSource”,“指定”,...“SpeedupFactor”,[0.9,1.1,1.2],...“ApplyTimeStretch”符合事实的...“ApplyPitchShift”符合事实的...“SemitoneShift”,[ -  2,-1,1,2],...“信噪比”,[10,15],...“应用卷控制”错误的...“ApplyTimeShift”,错)
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)
资料=24×2表UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU{571263x1 double}1x1结构{761243x1 double}1x1结构{622888x1 double}1x1结构{571263x1 double}1x1结构{761243x1 double}1x1结构{622888x1 double}1x1结构{571263x1 double}1x1结构{761243x1 double}1x1结构⋮

您可以使用增强信息表变量。

扩大检查=1.; data.AugmentationInfo(augmentationToInspect)
ANS =.结构与字段:加速系数:0.9000半音偏移:-2信噪比:10

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

augmentation=data.Audio{augmentationToInspect};sound(augmentation,fs)t=(0:(numel(audioIn)-1))/fs;taug=(0:(numel(augmentation)-1))/fs;plot(t,audioIn,taug,augmentation)图例(“原始音频”,“增强音频”)伊拉贝尔(“振幅”)xlabel(“时间”)

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

读入音频信号并收听它。

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

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

增量= audioDataAugmenter (...“增强模式”,“独立的”,...“AugmentationParameterSource”,“随机”,...“numaugmentations”2,...“ApplyTimeStretch”错误的...“ApplyPitchShift”错误的...“应用卷控制”错误的...“snrrange”,[0,20],...“时间换档范围”,[ -  300e-3,300e-3])
upmmenter = audiodataAugmenter具有属性:增强码:“独立”增强参数:“随机”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.表变量。

扩大检查=4.;data.AugmentationInfo{augmentationToInspect}
ANS =.结构与字段:TimeShift: 0.0016

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

augmentation=data.Audio{augmentationToInspect};sound(augmentation,fs)t=(0:(numel(audioIn)-1))/fs;taug=(0:(numel(augmentation)-1))/fs;plot(t,audioIn,taug,augmentation)图例(“原始音频”,“增强音频”)伊拉贝尔(“振幅”)xlabel(“时间”)

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

读入音频信号并收听它。

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

创建一个audioDataAugmenter应用卷控制,噪声损坏和在并行分支的时间转换的对象。

增量= audioDataAugmenter (...“增强模式”,“独立的”,...“AugmentationParameterSource”,“指定”,...“ApplyTimeStretch”错误的...“ApplyPitchShift”错误的...“VolumeGain”2,...“信噪比”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)
资料=3×2表音频增强信息{1x1结构}{685056x1结构}{1x1结构}{685056x1双}{1x1结构}{685056x1双}

您可以使用AugmentatioInfo.表变量。

扩大检查=3.;data.AugmentationInfo{augmentationToInspect}
ANS =.结构与字段:TimeShift: 2

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

augmentation=data.Audio{augmentationToInspect};sound(augmentation,fs)t=(0:(numel(audioIn)-1))/fs;taug=(0:(numel(augmentation)-1))/fs;plot(t,audioIn,taug,augmentation)图例(“原始音频”,“增强音频”)伊拉贝尔(“振幅”)xlabel(“时间”)

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

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

  • 离线扩充

  • 使用高阵列的增强

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

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

文件夹= fullfile(matlabroot,“工具箱”,“音频”,“样本”);ADS=音频数据存储(文件夹)
ADS=audioDatastore,具有以下属性:文件:{'.\matlab\toolbox\audio\samples\Ambiance-16-44p1-mono-12secs.wav';'.\matlab\toolbox\audio\samples\audio\samples\Ambiance-16-44p1-mono-12secs.wav';'.''.\matlab\toolbox\audio\samples\AudioArray-16-16-4-4channels-20secs.wav';'.'.'.\toolbox\audio\samples\Church\PulseResponse-16-44p1-mono-5secs
numFilesInDataset=numel(ADS.Files)
numFilesInDataset = 29

创建一个audioDataAugmenter应用随机序列增广。集合核爆2.

aug=音频数据增强器(“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)[音频输入,信息]=读取(ADS);数据=增加(八月,音频输入,信息采样器);[~,fn]=fileparts(info.FileName);为了i=1:size(data,1)augmentedAudio=data.Audio{i};%如果增强导致音频信号在-1和1之外的值具有值,规格化音频信号,以避免在写入时剪辑。如果马克斯(abs (augmentedAudio), [],'全部')>1 augmentedAudio = augmentedAudio/max(abs(augmentedAudio),[],'全部');结尾音频写入(sprintf)(“% s_aug % d.wav”,fn,i),augmentedaudio,Info.Samplerate)结尾结尾

创建一个音频数据存储这指向增强数据集并确认数据集中的文件数为原始文件数。

augmentedADS = audioDatastore (pwd)
augmentedADS=audioDatastore,具有以下属性:文件:{''.\Examples\audio-ex28074079\Ambiance-16-44p1-mono-12secs_aug1.wav'.''.'.\Examples\audio-ex28074079\Ambiance-16-16-16-4通道-20secs_aug1.wav'.'和55个以上的可选系统根:{}OutputDataType:'double'标签:{}
numFilesInAugmentedDataset=numel(augmentedADS.Files)
numFilesInAugmentedDataset=58

使用高数组扩充

当使用高数组扩充数据集时,应以一致的速率对扩充器的输入数据进行采样。原始音频数据集子集只包括样本率为44.1 kHz的文件。大多数数据集已经被清理,以具有一致的抽样率。

keepFile=cellfun(@(x)包含(x,‘44p1’),ADS.Files);ads44p1=子集(ADS,keepFile);fs=44.1e3;

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

adsTall=高(ads44p1)
使用连接到并行池的“本地”配置文件启动并行池(parpool)(工作线程数:6)。adsTall=M×1高单元阵列{539648×1 double}{227497×1 double}{8000×1 double}{685056×1 double}{882688×2 double}{1115760×2 double}{505200×2 double}{3195904×2 double}:::

定义一个cellfun函数,以便将增强应用于高数组的每个单元格。调用聚集求高数组的值。

奥巴尔= Cellfun(@(x)增强(八,x,fs),adstall,“统一输出”,false);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表

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

numFiles=numel(增强数据集)
numfiles = 12.
NumUgmentationsPerFile=大小(增强数据集{1},1)
numaummentationsperfile = 2

使用转换数据存储扩充

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

transformADS=转换(ADS,@(x,信息)增强(八月,x,信息),“IncludeInfo”,对)
transformADS=TransformedDatastore,具有以下属性:UnderlinedDatastore:[1×1 audioDatastore]转换:{@(x,info)增强(aug,x,info)}包括信息:1

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

augmentedRead =阅读(transformADS)
augmentedRead =2×2表音频增强信息{539648×1双精度}[1×1结构]{586683×1双精度}[1×1结构]

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

读入音频信号并收听它。

[audioIn,fs]=音频读取(“计数-16-44p1-mono-15秒波形”);声音(audioIn fs)

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

增量= 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算法添加到增压器财产。

算法名=“AddPinkNoise”;algorithm handle = @(x)x + pinknoise(size(x),“喜欢”, x);addAugmentationMethod(增压器、algorithmName 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
augmenter=audioDataAugmenter with properties:AugmentationMode:“sequential”AugmentationParameterSource:“random”numumation:1 TimeStretchProbability:0.5000加速因子range:[0.8000 1.2000]pitchshift概率:0.5000半音移位范围:[-2]音量控制概率:0.5000音量范围:[-3]AddNoiseProbability:0 TimeShift概率:0.5000 TimeShift范围:[-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频谱图。

melSpectrogram (audioIn fs)标题(原始信号的)

图中包含一个轴对象。标题为Original Signal的axis对象包含一个类型为image的对象。

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

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

算法

全部展开

这个audioDataAugmenter对象使您能够将增强管道配置为确定性或概率性AugmentationParameterSource财产。控件也可以选择串联或并行地应用这些增广增强码财产。以下部分描述了您可以为每个架构创建和适用的属性的管道。

参考文献

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

在R2019b中引入