addAugmentationMethod

Добавьте пользовательский метод увеличения

Описание

пример

addAugmentationMethod(aug,algorithmName,algorithmHandle) добавляет пользовательский алгоритм увеличения в audioDataAugmenter объект.

пример

addAugmentationMethod(aug,algorithmName,algorithmHandle,Name,Value) задает опции с использованием одного или нескольких Name,Value аргументы в виде пар.

Примеры

свернуть все

Можно расширить возможности audioDataAugmenter путем добавления пользовательских методов увеличения.

Считывайте аудиосигнал и слушайте его.

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

Создайте audioDataAugmenter объект. Установите вероятность применения белого шума в 0.

augmenter = audioDataAugmenter('AddNoiseProbability',0)
augmenter = 
  audioDataAugmenter with properties:

               AugmentationMode: 'sequential'
    AugmentationParameterSource: 'random'
               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]

Задайте пользовательский алгоритм увеличения, который применяет розовый шум. The AddPinkNoise алгоритм добавляется к augmenter свойства.

algorithmName = 'AddPinkNoise';
algorithmHandle = @(x)x+pinknoise(size(x),'like',x);
addAugmentationMethod(augmenter,algorithmName,algorithmHandle)

augmenter
augmenter = 
  audioDataAugmenter with properties:

               AugmentationMode: 'sequential'
    AugmentationParameterSource: 'random'
               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
augmenter = 
  audioDataAugmenter with properties:

               AugmentationMode: 'sequential'
    AugmentationParameterSource: 'random'
               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 = augment(augmenter,audioIn,fs);
sound(data.Audio{1},fs)

data.AugmentationInfo(1)
ans = struct with fields:
    SpeedupFactor: 1
    SemitoneShift: 0
       VolumeGain: 2.4803
        TimeShift: -0.0022
     AddPinkNoise: 'Applied'

Постройте график спектрограмм mel исходных и дополненных сигналов.

melSpectrogram(audioIn,fs)
title('Original Signal')

Figure contains an axes. The axes with title Original Signal contains an object of type image.

melSpectrogram(data.Audio{1},fs)
title('Augmented Signal')

Figure contains an axes. The axes with title Augmented Signal contains an object of type image.

В этом примере вы добавляете пользовательский метод увеличения, который применяет медианную фильтрацию к вашему аудио.

Считывайте аудиосигнал и слушайте его.

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

Создайте случайный последовательный увеличитель, который добавляет шум с областью значений ОСШ от 5 дБ до 10 дБ. Установите вероятность применения регулирования объема, растяжения времени, перемены тангажа и сдвига времени на 0. Задайте NumAugmentations на 4 чтобы создать 4 отдельных увеличения.

aug = audioDataAugmenter('NumAugmentations',4, ...
    "AddNoiseProbability",1, ...
    "SNRRange",[5,10], ...
    "VolumeControlProbability",0, ...
    "TimeStretchProbability",0, ...
    "TimeShiftProbability",0, ...
    "PitchShiftProbability",0)
aug = 
  audioDataAugmenter with properties:

               AugmentationMode: 'sequential'
    AugmentationParameterSource: 'random'
               NumAugmentations: 4
         TimeStretchProbability: 0
          PitchShiftProbability: 0
       VolumeControlProbability: 0
            AddNoiseProbability: 1
                       SNRRange: [5 10]
           TimeShiftProbability: 0

Функции addAugmentationMethod с именем алгоритма и указателем на функцию. Задайте имя алгоритма следующим MedianFilter и указатель на функцию как movmedian с длиной окна 3 элемента. Увеличение добавляется к свойствам вашего audioDataAugmenter объект.

algorithmName = 'MedianFilter';
algorithmHandle = @(x)(movmedian(x,100));
addAugmentationMethod(aug,algorithmName,algorithmHandle)

aug
aug = 
  audioDataAugmenter with properties:

               AugmentationMode: 'sequential'
    AugmentationParameterSource: 'random'
               NumAugmentations: 4
         TimeStretchProbability: 0
          PitchShiftProbability: 0
       VolumeControlProbability: 0
            AddNoiseProbability: 1
                       SNRRange: [5 10]
           TimeShiftProbability: 0
        MedianFilterProbability: 0.5000

Установите вероятность применения медианной фильтрации в 80%.

aug.MedianFilterProbability = 0.8
aug = 
  audioDataAugmenter with properties:

               AugmentationMode: 'sequential'
    AugmentationParameterSource: 'random'
               NumAugmentations: 4
         TimeStretchProbability: 0
          PitchShiftProbability: 0
       VolumeControlProbability: 0
            AddNoiseProbability: 1
                       SNRRange: [5 10]
           TimeShiftProbability: 0
        MedianFilterProbability: 0.8000

Функции augment на аудио, чтобы создать 4 увеличения.

data = augment(aug,audioIn,fs);

Можно проверить строение параметров каждого увеличения с помощью AugmentationInfo табличная переменная. Если для увеличения применялась медианная фильтрация, то AugmentationInfo перечисляет параметр следующим 'Applied'. Если медианная фильтрация не применялась для увеличения, то AugmentationInfo перечисляет параметр следующим 'Bypassed'.

augmentationToInspect = 2;
Данные .AugmentationInfo (aughmentationToInspect)
ans = struct with fields:
             SNR: 9.5787
    MedianFilter: 'Applied'

Слушайте аудио, которое вы проверяете. Постройте график представления исходных и дополненных сигналов во временной области.

augmentation = data.Audio{augmentationToInspect};
sound(augmentation,fs)
t = (0:(numel(audioIn)-1))/fs;
taug = (0:(numel(augmentation)-1))/fs;
plot(t,audioIn,taug,augmentation)
legend("Original Audio","Augmented Audio")
ylabel("Amplitude")
xlabel("Time (s)")

Figure contains an axes. The axes contains 2 objects of type line. These objects represent Original Audio, Augmented Audio.

Можно задать дополнительные параметры и соответствующие области значений параметров (для использования при AugmentationParamterSource установлено на 'random') и значений параметров (для использования при AugmentationParamterSource установлено на 'specify'). Вы должны задать дополнительные параметры, области значений параметров и значения параметров во время вызова addAugmentationMethod.

Функции removeAugmentationMethod чтобы удалить MedianFilter СПОСОБ УВЕЛИЧЕНИЯ. Функции addAugmentationMethod снова на этот раз задает параметр увеличения, область значений параметров и значение параметров. Увеличение и область значений параметров добавляются к свойствам вашего audioDataAugmenter объект.

removeAugmentationMethod(aug,'MedianFilter')

algorithmName = 'MedianFilter';
augmentationParameter = 'MedianFilterWindowLength';
parameterRange = [1,200];
parameterValue = 100;

algorithmHandle = @(x,k)(movmedian(x,k));
addAugmentationMethod(aug,algorithmName,algorithmHandle, ...
    'AugmentationParameter',augmentationParameter, ...
    'ParameterRange',parameterRange, ...
    'ParameterValue',parameterValue)

aug
aug = 
  audioDataAugmenter with properties:

                 AugmentationMode: 'sequential'
      AugmentationParameterSource: 'random'
                 NumAugmentations: 4
           TimeStretchProbability: 0
            PitchShiftProbability: 0
         VolumeControlProbability: 0
              AddNoiseProbability: 1
                         SNRRange: [5 10]
             TimeShiftProbability: 0
          MedianFilterProbability: 0.5000
    MedianFilterWindowLengthRange: [1 200]

В текущем строении трубопровода увеличения значение параметров не применимо. ParameterValue применяется, когда AugmetnationParameterSource установлено на 'specify'. Задайте AugmentationParameterSource на 'specify' чтобы включить текущее значение параметров.

aug.AugmentationParameterSource = 'specify'
aug = 
  audioDataAugmenter with properties:

               AugmentationMode: 'sequential'
    AugmentationParameterSource: 'specify'
               ApplyTimeStretch: 1
                  SpeedupFactor: 0.8000
                ApplyPitchShift: 1
                  SemitoneShift: -3
             ApplyVolumeControl: 1
                     VolumeGain: -3
                  ApplyAddNoise: 1
                            SNR: 5
                 ApplyTimeShift: 1
                      TimeShift: 0.0050
              ApplyMedianFilter: 1
       MedianFilterWindowLength: 100

Задайте AugmentationParameterSource на random а затем позвоните augment.

aug.AugmentationParameterSource = "random";
data = augment(aug,audioIn,fs);

Если для увеличения применялась медианная фильтрация, то AugmentationInfo В перечислено примененное значение.

augmentationToInspect = 3;
Данные .AugmentationInfo (aughmentationToInspect)
ans = struct with fields:
             SNR: 8.7701
    MedianFilter: 117.9847

Слушайте аудио, которое вы проверяете. Постройте график представления исходных и дополненных сигналов во временной области.

augmentation = data.Audio{augmentationToInspect};
sound(augmentation,fs)
t = (0:(numel(audioIn)-1))/fs;
taug = (0:(numel(augmentation)-1))/fs;
plot(t,audioIn,taug,augmentation)
legend("Original Audio","Augmented Audio")
ylabel("Amplitude")
xlabel("Time (s)")

Figure contains an axes. The axes contains 2 objects of type line. These objects represent Original Audio, Augmented Audio.

Считывайте аудиосигнал и слушайте его.

[audioIn,fs] = audioread('RockDrums-44p1-stereo-11secs.mp3');
sound(audioIn,fs)

Создание и audioDataAugmenter объект, который выводит 5 увеличений. Установите AddNoiseProbability на 0.

aug = audioDataAugmenter('NumAugmentations',5,'AddNoiseProbability',0);

Добавьте реверберацию как пользовательский алгоритм увеличения. The applyReverb функция создает reverberator объект, обновляет частоту дискретизации, предварительную задержку и влажную/сухую смесь, как указано, и затем применяет реверберацию. Чтобы минимизировать вычислительные накладные расходы, объект reverberator является постоянным. Объект сбрасывается при каждом вызове, чтобы избежать смешения хвоста реверберации между аудио файлов.

type applyReverb.m
function audioOut = applyReverb(audio,preDelay,wetDryMix,sampleRate)
    persistent reverbObject
    if isempty(reverbObject)
        reverbObject = reverberator;
    end
    reverbObject.SampleRate = sampleRate;
    reverbObject.PreDelay = preDelay;
    reverbObject.WetDryMix = wetDryMix;
    
    audioOut = reverbObject(audio);
    reset(reverbObject)
end

Добавить applyReverb как пользовательский метод увеличения. Чтобы задать несколько параметров для пользовательского метода, задайте параметры, области значений параметров и значения параметров как массивы ячеек с таким же количеством камер. Установите вероятность применения реверберации в 1.

algorithmName = 'Reverb';
algorithmHandle = @(x,preDelay,weDryMix)applyReverb(x,preDelay,weDryMix,fs);
parameters = {'PreDelay','WetDryMix'};
parameterRanges = {[0,1],[0,1]};
parameterValues = {0,0.3};

addAugmentationMethod(aug,algorithmName,algorithmHandle, ...
    'AugmentationParameter',parameters, ...
    'ParameterRange',parameterRanges, ...
    'ParameterValue',parameterValues)

aug.ReverbProbability = 1
aug = 
  audioDataAugmenter with properties:

               AugmentationMode: 'sequential'
    AugmentationParameterSource: 'random'
               NumAugmentations: 5
         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]
              ReverbProbability: 1
                  PreDelayRange: [0 1]
                 WetDryMixRange: [0 1]

Функции augment для создания 5 дополнений.

data = augment(aug,audioIn,fs);

Проверьте строение каждого увеличения с помощью AugmentationInfo.

augmentationToInspect = 1;
Данные .AugmentationInfo (aughmentationToInspect)
ans = struct with fields:
    SpeedupFactor: 1
    SemitoneShift: -1.4325
       VolumeGain: 0
        TimeShift: 0
           Reverb: [0.2760 0.4984]

Слушайте аудио, которое вы проверяете. Постройте график представления исходных и дополненных сигналов во временной области.

augmentation = data.Audio{augmentationToInspect};
sound(augmentation,fs)
t = (0:(size(audioIn,1)-1))/fs;
taug = (0:(size(augmentation,1)-1))/fs;
plot(t,audioIn(:,1),taug,augmentation(:,1))
legend("Original Audio","Augmented Audio")
ylabel("Amplitude")
xlabel("Time (s)")

Figure contains an axes. The axes contains 2 objects of type line. These objects represent Original Audio, Augmented Audio.

Входные параметры

свернуть все

audioDataAugmenter объект.

Имя алгоритма, заданное как вектор символов или строка. algorithmName должно быть уникальным именем свойства на audioDataAugmenter, aug.

Типы данных: char | string

Указатель на функцию, которая реализует пользовательский алгоритм увеличения, заданный как function_handle.

Типы данных: function_handle

Аргументы в виде пар имя-значение

Задайте необязательные разделенные разделенными запятой парами Name,Value аргументы. Name - имя аргумента и Value - соответствующее значение. Name должны находиться внутри кавычек. Можно задать несколько аргументов в виде пар имен и значений в любом порядке Name1,Value1,...,NameN,ValueN.

Пример: 'AugmentationParameter,'PreDelay'

Параметр увеличения, заданный как вектор символов, строка, массив ячеек из векторов символов или массив ячеек из строк.

Используйте массивы ячеек, чтобы создать несколько параметров увеличения. Если вы создаете несколько параметров увеличения, вы также должны задать ParameterRange и ParameterValue как массивы ячеек, содержащие информацию для каждого параметра увеличения.

Пример: 'AugmentationParameter','PreDelay'

Пример: 'AugmentationParameter',{'PreDelay','HighCutFrequency'}

Типы данных: char | string

Область значений параметров, заданный как двухэлементный вектор неразрешающих значений (для единственного параметра) или массив ячеек из двухэлементных векторов неразрешающих значений (для нескольких параметров).

Пример: 'ParameterRange',[0,1]

Пример: 'ParameterRange',{[0,1],[20,20000]}

Зависимости

Чтобы включить это свойство, задайте свойство AugmentationParameterSource своего audioDataAugmenter объект к 'random'.

Типы данных: single | double | cell

Значение параметров, заданное как скаляр, вектор или массив ячеек скаляров или векторов.

Пример: 'ParameterValue',0

Пример: 'ParameterValue',[0,0.5,1]

Пример: 'ParameterValue',{0,20000}

Пример: 'ParameterValue',{[0,0.5,1],20000}

Зависимости

Чтобы включить это свойство, задайте свойство AugmentationParameterSource своего audioDataAugmenter на 'random'.

Типы данных: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64
Поддержка комплексного числа: Да

Введенный в R2019b
Для просмотра документации необходимо авторизоваться на сайте