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);

数据类型:烧焦|

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

依赖

要启用这个特性,集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

按住Shift键间距

应用基音偏移的概率,指定为[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

控制音量

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

依赖

要启用这个特性,集AugmentationParameterSource“随机”AugmentationMode“顺序”

数据类型:|

以分贝表示的体积增益范围,指定为非递减值的双元素行向量。

依赖

要启用这个特性,集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噪声添加SNR,指定为非降值的两个元素的行向量的范围。

依赖

要启用这个特性,集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 移除自定义增强方法
增加 增强的音频数据

例子

全部折叠

在读取的音频信号,并听。

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

创建audioDataAugmenter对象,在级联中应用时间拉伸、音量控制和时间移动。应用每一个扩展的80%的概率。集NumAugmentations5输出5个独立的增强信号。要跳过音高移位和噪声添加用于每个增强,设置的各个概率来0。为每个相关的增强算法定义参数范围。

增强因子= 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])
增量= 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

数据=扩充(增强因子,AUDIOIN,FS)
data =5×2表音频AugmentationInfo _________________ ________________ {685056x1双} [1x1的结构] {685056x1双} [1x1的结构] {505183x1双} [1x1的结构] {685056x1双} [1x1的结构] {490728x1双} [1x1的结构]

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

augmentationToInspect =4;data.AugmentationInfo (augmentationToInspect)
ans =结构体字段:加速因子:1体积增益:4.3399倍转移:0.4502

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

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

在读取的音频信号,并听。

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

创建audioDataAugmenter施加时间伸缩对象,音高移位,和噪声破坏级联。指定的时间拉伸加速因素0.9,1.1,1.2。以半音表示音高的变化2,1,1,2。指定噪声损坏信噪比为10dB和15D b。

增强因子= audioDataAugmenter(“AugmentationMode”,“连续”,“AugmentationParameterSource”,“指定”,“SpeedupFactor”(0.9,1.1,1.2),“ApplyTimeStretch”,真的,“ApplyPitchShift”,真的,“SemitoneShift”,(2,1,1,2),“SNR”(10、15),“ApplyVolumeControl”假的,“ApplyTimeShift”假)
增强因子= audioDataAugmenter与属性:AugmentationMode: “连续” AugmentationParameterSource: “指定” 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 )。

数据=扩充(增强因子,AUDIOIN,FS)
data =24×2表音频AugmentationInfo _________________ ________________ {761243x1双} [1x1的结构] {622888x1双} [1x1的结构] {571263x1双} [1x1的结构] {761243x1双} [1x1的结构] {622888x1双} [1x1的结构] {571263x1双} [1x1的结构] {761243x1双} [1x1的结构] {622888x1双} [1x1的结构] {571263x1双} [1x1的结构] {761243x1双} [1x1的结构] {622888x1双} [1x1的结构] {571263x1双} [1x1的结构]{761243x1双} [1x1的结构] {622888x1双} [1x1的结构] {571263x1双} [1x1的结构] {761243x1双} [1x1的结构]⋮

可以使用。检查每个扩展的参数配置AugmentationInfo表变量。

augmentationToInspect =1;data.AugmentationInfo (augmentationToInspect)
ans =结构体字段:加速因子:0.9000半转移:-2信噪比:10

倾听您正在检查的扩展。画出原始和增强信号的时域表示。

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

在读取的音频信号,并听。

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

创建audioDataAugmenter对象,应用噪声衰减,并在并行分支中进行时间偏移。对于噪声损坏分支,在该范围内随机应用具有信噪比的噪声0dB来20.D b。对于时移分支,随机应用时间范围内移动 -300女士,300女士。适用的增强2倍为每个分支,4个总扩充。

增强因子= audioDataAugmenter(“AugmentationMode”,“独立”,“AugmentationParameterSource”,“随机”,“NumAugmentations”,2,“ApplyTimeStretch”假的,“ApplyPitchShift”假的,“ApplyVolumeControl”假的,“SNRRange”(0,20),“TimeShiftRange”,(-300 e - 3300 e - 3])
来源:“随机”NumAugmentations: 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;data.AugmentationInfo {augmentationToInspect}
ans =结构体字段:时光平移:0.0016

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

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

在读取的音频信号,并听。

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

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

增强因子= audioDataAugmenter(“AugmentationMode”,“独立”,“AugmentationParameterSource”,“指定”,“ApplyTimeStretch”假的,“ApplyPitchShift”假的,“VolumeGain”,2,“SNR”,0,“TimeShift”,2)
增强因子= audioDataAugmenter与属性:AugmentationMode: “独立” AugmentationParameterSource: “指定” ApplyTimeStretch:0 ApplyPitchShift:0 ApplyVolumeControl:1 VolumeGain:2 ApplyAddNoise:1 SNR:0 ApplyTimeShift:1时光平移:2

调用增加在音频创建3个扩充。

数据=扩充(增强因子,AUDIOIN,FS)
data =3×2表x1双音频AugmentationInfo _________________ ___________ {685056} {1 x1 struct} {685056 x1双}{1 x1 struct} {685056 x1双}{1 x1 struct}

可以使用。检查每个扩展的参数配置AugmentatioInfo表变量。

augmentationToInspect =3.;data.AugmentationInfo {augmentationToInspect}
ans =结构体字段:时光平移:2

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

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

audioDataAugmenter万博1manbetx支持增强数据存储区,包括多个工作流:

  • 离线增大

  • 使用高数组进行增强

  • 使用转换数据存储的扩展

在每个工作流程,首先创建一个音频数据存储到指向您的音频数据。在这个例子中,将创建一个音频数据存储,它指向音频样本包含音频工具箱™。计数数据集中的文件数。

文件夹= fullfile (matlabroot,“工具箱”,“音频”,“样本”);广告= audioDatastore(文件夹)
带属性的audioDatastore:{'…\matlab\toolbox\audio\samples\ ambien -16-44p1-mono-12sec .wav';“…\ matlab工具箱\ \音响\ samples \ AudioArray-16-16-4channels-20secs.wav”;“……\工具箱\音响\ \ ChurchImpulseResponse-16-44p1-mono-5secs样品。wav”……and 26 more} AlternateFileSystemRoots: {} OutputDataType: 'double' label: {}
numFilesInDataset =元素个数(ADS.Files)
numFilesInDataset = 29

创建audioDataAugmenter它应用随机顺序递增。集NumAugmentations2

8月= audioDataAugmenter ('NumAugmentations',2)
八月= 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] TimeShiftProbability:0.5000 TimeShiftRange:[-0.0050 0.0050]

离线增大

为了增强音频数据集,创建每个文件的两个增扩,然后写入扩充为WAV文件。

hasdata(ADS) [audioIn,info] = read(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)、augmentedAudio info.SampleRate)结束结束

创建audioDatastore它指向扩充的数据集,并确认数据集中的文件数量是原始文件数量的两倍。

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”……and 55 more} AlternateFileSystemRoots: {} OutputDataType: 'double' label: {}
numFilesInAugmentedDataset =元素个数(augmentedADS.Files)
numFilesInAugmentedDataset = 58

使用高数组扩充

当使用高阵列增强的数据集,所述数据输入到增强因子应该在一致的速率进行采样。子集原始音频数据集为仅包括具有44.1 kHz的采样率的文件。大多数数据集已经清洗干净,有一个一致的采样率。

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

将音频数据存储转换为高数组。数组仅在您显式使用请求它们时才计算收集。MATLAB®通过最小化通过数据的次数来自动优化排队计算。如果您有并行计算工具箱™,您可以将计算分散到多台计算机上。音频数据表示为-乘1高单元阵列,其中在音频数据存储的文件数量。

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

定义一个cellfun函数,以便对高数组的每个单元格应用增强。调用收集评价高阵列。

augTall = cellfun (@ (x)增加(8月x, fs), adsTall,“UniformOutput”、假);augmentedDataset =收集(augTall)
评估使用并行池“本地”高表达: -  1通过1:已完成在1分34秒评价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-乘1单元数组,其中numFiles是数据存储中的文件数量。单元格数组的每个元素都是numAugmentationsPerFile-by-2表,其中numAugmentationsPerFile为每个文件返回的扩展数。

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

使用转换数据存储扩充

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

transformADS =变换(广告,@ (x,信息)增加(8月,x,信息),“IncludeInfo”,真正的)
[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

增强因子= 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 TimeShiftRange:[-0.0050 0.0050]

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

algorithmName ='AddPinkNoise';algorithmHandle = @ (x) x + pinknoise(大小(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

augmenter.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 TimeShiftRange: [-0.0050 - 0.0050] AddPinkNoiseProbability: 1

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

data =增加(增压器、audioIn fs);声音(data.Audio {1},FS)data.AugmentationInfo(1)
ans =结构体字段:SpeedupFactor:1 SemitoneShift:0 VolumeGain:2.4803时光平移:-0.0022 AddPinkNoise: '应用'

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

melSpectrogram(AUDIOIN,FS)标题(“原始信号”)

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

算法

展开全部

audioDataAugmenter对象允许您在增强管道配置为确定性或使用概率AugmentationParameterSource财产。您也可以选择使用串联或并联应用扩充AugmentationMode财产。下面的部分描述了您可以创建的管道和适用于每种体系结构的属性。

参考

[1]萨拉蒙,贾斯汀,蒙托亚贝洛。“深卷积神经网络和数据扩张环境音效分类。”IEEE信号处理快报。卷。24,第3期,2017年。

介绍了R2019b