主要内容

audioDataAugmenter

增强音频数据

描述

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

创建

描述

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

例子

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

属性

全部展开

增加管道

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

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

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

数据类型:字符|字符串

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

  • “随机”—使用概率参数和范围参数概率地应用增强算法。

    例如,创建一个audioDataAugmenter使用加速因子进行时间拉伸0.5而且1.5以60%的概率,在命令窗口中输入以下内容:

    aug = audioDataAugmenter(“AugmentationParameterSource”“随机”...“TimeStretchProbability”, 0.6,...“SpeedupFactorRange”[0.5, 1.5]);
    当应用时间拉伸时,加速因子是从以1(范围的平均值)为中心的均匀分布中提取的,最小值为0.5最大值为1.5

  • “指定”—使用逻辑参数和指定参数值确定地应用增强算法。例如,创建一个audioDataAugmenter它使用a进行时间拉伸1.5以100%的概率,在命令窗口中输入以下内容:

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

数据类型:字符|字符串

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

依赖关系

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

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

段时间

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

依赖关系

若要启用此属性,请设置AugmentationParameterSource“随机”而且AugmentationMode“顺序”

数据类型:|

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

依赖关系

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

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

应用时间扩展,指定为真正的

依赖关系

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

数据类型:逻辑

时间扩展加速因子,指定为实数正数值的标量或矢量。

依赖关系

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

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

改变音高

应用pitch shift的概率,指定为范围[0,1]中的标量。将概率设置为1每次通话时应用音调变换增加.将概率设置为0每次打电话都跳过音高变换增加

依赖关系

若要启用此属性,请设置AugmentationParameterSource“随机”而且AugmentationMode“顺序”

数据类型:|

半音音高移位的范围,指定为两个元素的无减值行向量。

依赖关系

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

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

应用pitch shift,指定为真正的

依赖关系

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

数据类型:逻辑

半音的音高位移,用实标量或矢量表示。

依赖关系

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

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

控制体积

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

依赖关系

若要启用此属性,请设置AugmentationParameterSource“随机”而且AugmentationMode“顺序”

数据类型:|

体积增益的范围(以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“随机”而且AugmentationMode“顺序”

数据类型:|

噪声添加信噪比的范围,以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“随机”而且AugmentationMode“顺序”

数据类型:|

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

依赖关系

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

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

应用时移,指定为真正的

依赖关系

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

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

数据类型:逻辑

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

依赖关系

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

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

对象的功能

addAugmentationMethod 增加自定义增强方法
removeAugmentationMethod 删除自定义增强方法
增加 增强音频数据
setAugmenterParams 设置增强算法参数
getAugmenterParams 得到增广算法参数

例子

全部折叠

读入一个音频信号,然后听它。

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

创建一个audioDataAugmenter对象,该对象级联应用时间拉伸、音量控制和时移。以80%的概率应用每一个增强。集NumAugmentations5输出五个独立的增强信号。为了跳过每一次增强的音调转移和噪声添加,将各自的概率设置为0.为每个相关的增强算法定义参数范围。

augmenter = 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”, (-500 e - 3500 e - 3])
augmenter = audioDataAugmenter with properties: AugmentationMode: "sequential" AugmentationParameterSource: " random " numaugments: 5 TimeStretchProbability: 0.8000 SpeedupFactorRange: [1.3000 1.4000] PitchShiftProbability: 0 VolumeControlProbability: 0.8000 volumeainrange: [-5 5 5] AddNoiseProbability: 0 timshiftprobability: 0.8000 TimeShiftRange: [-0.5000 0.5000]

调用增加在音频上创建5个增强。增强音频在一个带有变量的表中返回音频而且AugmentationInfo.表中的行数由NumAugmentations

data = augment(augmenter,audioIn,fs)
data =5×2表音频增强信息_________________ ________________ {685056x1 double} 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 =带字段的结构:速度因数:1体积增益:4.3399时间移码:0.4502

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

augment = data.Audio{augmentationToInspect};sound(augmentation,fs) t = (0:(numel(audioIn)-1))/fs;Taug =(0:(数字(增量)-1))/fs;情节(t, audioIn taug增大)传说(“原始音频”“增强音频”) ylabel (“振幅”)包含(“时间(s)”

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

读入一个音频信号,然后听它。

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

创建一个audioDataAugmenter对象,该对象级联应用时间拉伸、基音变换和噪声破坏。指定时间拉伸加速因子为0.91.1,1.2.指定半音音高偏移为-2-11,2.指定噪声破坏信噪比为10dB和15dB。

augmenter = audioDataAugmenter(...“AugmentationMode”“顺序”...“AugmentationParameterSource”“指定”...“SpeedupFactor”(0.9, 1.1, 1.2),...“ApplyTimeStretch”,真的,...“ApplyPitchShift”,真的,...“SemitoneShift”, (2, 1, 1, 2),...“信噪比”(10、15),...“ApplyVolumeControl”假的,...“ApplyTimeShift”假)
augmenter = audioDataAugmenter with properties: AugmentationMode: "sequential" AugmentationParameterSource: "specify" ApplyTimeStretch: 1 SpeedupFactor: [0.9000 1.1000 1.2000] ApplyPitchShift: 1 SemitoneShift: [-2 -1 1 2] ApplyVolumeControl: 0 ApplyAddNoise: 1 SNR: [10 15] ApplyTimeShift: 0

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

data = augment(augmenter,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 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结构{761243x1 double} 1x1结构体`

方法检查每个增强的参数配置AugmentationInfo表变量。

augmentationToInspect =1;data.AugmentationInfo (augmentationToInspect)
ans =带字段的结构:SemitoneShift: -2 SNR: 10

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

augment = data.Audio{augmentationToInspect};sound(augmentation,fs) t = (0:(numel(audioIn)-1))/fs;Taug =(0:(数字(增量)-1))/fs;情节(t, audioIn taug增大)传说(“原始音频”“增强音频”) ylabel (“振幅”)包含(“时间(s)”

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

读入一个音频信号,然后听它。

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

创建一个audioDataAugmenter对象,该对象应用噪声破坏,并在并行分支中进行时移。对于噪声破坏分支,随机应用信噪比在范围内的噪声0dB来20.dB。对于时移分支,在-范围内随机应用时移300女士,300为每个分支应用2次增强,共4次增强。

augmenter = audioDataAugmenter(...“AugmentationMode”“独立”...“AugmentationParameterSource”“随机”...“NumAugmentations”2,...“ApplyTimeStretch”假的,...“ApplyPitchShift”假的,...“ApplyVolumeControl”假的,...“SNRRange”(0, 20),...“TimeShiftRange”, (-300 e - 3300 e - 3])
augmenter = audioDataAugmenter with properties: AugmentationMode: "independent" AugmentationParameterSource: "random" numaugmations: 2 ApplyTimeStretch: 0 ApplyPitchShift: 0 ApplyVolumeControl: 0 ApplyAddNoise: 1 SNRRange: [0 20] applytimeeshift: 1 TimeShiftRange: [-0.3000 0.3000]

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

data = augment(augmenter,audioIn,fs);

方法检查每个增强的参数配置AugmentatioInfo表变量。

augmentationToInspect =4;数据。AugmentationInfo {augmentationToInspect}
ans =带字段的结构:TimeShift: 0.0016

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

augment = data.Audio{augmentationToInspect};sound(augmentation,fs) t = (0:(numel(audioIn)-1))/fs;Taug =(0:(数字(增量)-1))/fs;情节(t, audioIn taug增大)传说(“原始音频”“增强音频”) ylabel (“振幅”)包含(“时间(s)”

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

读入一个音频信号,然后听它。

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

创建一个audioDataAugmenter对象,该对象在并行分支中应用音量控制、噪声损坏和时移。

augmenter = audioDataAugmenter(...“AugmentationMode”“独立”...“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 ApplyTimeShift: 1 TimeShift: 2

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

data = augment(augmenter,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

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

augment = data.Audio{augmentationToInspect};sound(augmentation,fs) t = (0:(numel(audioIn)-1))/fs;Taug =(0:(数字(增量)-1))/fs;情节(t, audioIn taug增大)传说(“原始音频”“增强音频”) ylabel (“振幅”)包含(“时间(s)”

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

audioDataAugmenter万博1manbetx支持多个工作流来扩展您的数据存储,包括:

  • 离线增大

  • 使用高数组进行增强

  • 使用转换数据存储进行增强

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

文件夹= fullfile(matlabroot,“工具箱”“音频”“样本”);ADS = audioDatastore(文件夹)
ADS = audioDatastore属性:Files:{'…\matlab\toolbox\audio\samples\ ambient -16-44p1-mono- 12seconds .wav';“…\ matlab工具箱\ \音响\ samples \ AudioArray-16-16-4channels-20secs.wav”;\toolbox\audio\samples\ churchimpulseresponse -16-44p1-mono- 5seconds .wav和26个}AlternateFileSystemRoots: {} OutputDataType: 'double'标签:{}
numFilesInDataset =数字(ADS.Files)
numFilesInDataset = 29

创建一个audioDataAugmenter这应用了随机顺序扩充。集NumAugmentations2

aug = audioDataAugmenter(“NumAugmentations”, 2)
aug = audioDataAugmenter with properties: AugmentationMode: 'sequential' AugmentationParameterSource: 'random' numaugations: 2 TimeStretchProbability: 0.5000 SpeedupFactorRange: [0.8000 1.2000] PitchShiftProbability: 0.5000 SemitoneShiftRange: [-2 2] VolumeControlProbability: 0.5000 volumeainrange: [-3 3] AddNoiseProbability: 0.5000 SNRRange: [0 10] timshiftprobability: 0.5000 TimeShiftRange: [-0.0050 0.0050]

离线增大

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

hasdata(ADS) [audioIn,info] = read(ADS);data = augment(aug,audioIn,info.SampleRate);[~,fn] = fileparts(info.FileName);i = 1:size(data,1) augmentedAudio = data. audio {i};如果增强导致音频信号的值在-1和1之外,正常化音频信号,以避免写入时剪辑。。如果马克斯(abs (augmentedAudio), [],“所有”)>1 augmentedAudio = augmentedAudio/max(abs(augmentedAudio),[],“所有”);结束audiowrite (sprintf (“% s_aug % d.wav”, fn)、augmentedAudio info.SampleRate)结束结束

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

augmentedADS = audioDatastore
augmentedADS = audioDatastore属性:Files:{'…\Examples\audio-ex28074079\ ambient -16-44p1-mono-12secs_aug1.wav';“……\ \ audio-ex28074079 \ Ambiance-16-44p1-mono-12secs_aug2.wav例子”;\Examples\audio-ex28074079\AudioArray-16-16-4channels-20secs_aug1.wav'…和55更多}AlternateFileSystemRoots: {} OutputDataType: 'double'标签:{}
numfilesmenteddataset = numel(augmentedADS.Files)
numfilesmenteddataset = 58

使用高数组增强

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

keepFile = cellfun(@(x)包含(x,“44 p1”), ADS.Files);ads44p1 =子集(ADS,keepFile);Fs = 44.11 e3;

将音频数据存储转换为高数组。数组只有在显式地使用收集.MATLAB®通过最小化通过数据的次数自动优化队列计算。如果您有并行计算工具箱™,您可以将计算分散到多台机器上。音频数据表示为-by-1高单元格数组,其中音频数据存储中的文件数。

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

定义一个cellfun函数,以便对tall数组的每个单元格应用增强。调用收集计算tall数组。

augTall = cellfun(@(x)augment(aug,x,fs),adsTall,“UniformOutput”、假);augmentedDataset = gather(augTall)
使用并行池“本地”评估tall表达式:-通过1 / 1:在1分34秒内完成评估
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数据存储中的文件数。单元格数组的每个元素都是anumAugmentationsPerFile-by-2表,其中numAugmentationsPerFile每个文件返回的增强数。

numFiles = numel(augmentedDataset)
numFiles = 12
numAugmentationsPerFile = size(augmentteddataset {1},1)
numAugmentationsPerFile = 2

使用转换数据存储增强

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

transformADS = transform(ADS,@(x,info)augment(aug,x,info),“IncludeInfo”,真正的)
transformADS = transformmeddatastore属性:底层数据存储:[1×1 audioDatastore] Transforms: {@(x,info)augment(aug,x,info)} IncludeInfo: 1

调用从转换数据存储中返回增强的第一个文件。

augmentedRead = read(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

augmenter = audioDataAugmenter(“AddNoiseProbability”, 0)
augmenter = audioDataAugmenter with properties: AugmentationMode: 'sequential' AugmentationParameterSource: 'random' numaugments: 1 TimeStretchProbability: 0.5000 SpeedupFactorRange: [0.8000 1.2000] PitchShiftProbability: 0.5000 SemitoneShiftRange: [-2 2] VolumeControlProbability: 0.5000 volumeainrange: [-3 3] AddNoiseProbability: 0 timshiftprobability: 0.5000 TimeShiftRange: [-0.0050 0.0050]

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

algorithmName =“AddPinkNoise”;algorithmHandle = @(x)x+pinknoise(size(x),“喜欢”, x);addAugmentationMethod(增压器、algorithmName algorithmHandle)增压器
augmenter = audioDataAugmenter with properties: AugmentationMode: 'sequential' AugmentationParameterSource: 'random' numaugations: 1 TimeStretchProbability: 0.5000 SpeedupFactorRange: [0.8000 1.2000] PitchShiftProbability: 0.5000 SemitoneShiftRange: [-2 2] VolumeControlProbability: 0.5000 volumeainrange: [-3 3] AddNoiseProbability: 0 TimeShiftRange: 0.5000 TimeShiftRange: [-0.0050 0.0050] AddPinkNoiseProbability: 0.5000

设置添加粉色杂音的概率为1

增压器。AddPinkNoiseProbability = 1
augmenter = audioDataAugmenter with properties: AugmentationMode: 'sequential' AugmentationParameterSource: 'random' numaugments: 1 TimeStretchProbability: 0.5000 SpeedupFactorRange: [0.8000 1.2000] PitchShiftProbability: 0.5000 SemitoneShiftRange: [-2 2] VolumeControlProbability: 0.5000 volumeainrange: [-3 3] AddNoiseProbability: 0 TimeShiftRange: 0.5000 TimeShiftRange: [-0.0050 0.0050] AddPinkNoiseProbability: 1

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

data = augment(augmenter,audioIn,fs);声音(data.Audio {1}, fs) data.AugmentationInfo (1)
ans =带字段的结构:SpeedupFactor: 1 semitonesshift: 0 VolumeGain: 2.4803 timeeshift: -0.0022 AddPinkNoise: '已应用'

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

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

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

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

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

算法

全部展开

audioDataAugmenter对象使您可以将扩展管道配置为确定性的或概率的AugmentationParameterSource财产。属性,还可以选择以串联或并行方式应用增强AugmentationMode财产。下面几节描述了您可以创建的管道以及每个体系结构的适用属性。

参考文献

萨拉蒙,贾斯汀,还有胡安·巴勃罗·贝罗。用于环境声音分类的深度卷积神经网络和数据增强IEEE信号处理规程.2017年第3期(24卷)

扩展功能

版本历史

R2019b引入