exponenta event banner

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]

Укажите пользовательский алгоритм увеличения, применяющий розовый шум. 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'

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

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)

Создайте случайный последовательный аугментатор, который добавляет шум с диапазоном SNR от 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;
data.AugmentationInfo(augmentationToInspect)
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;
data.AugmentationInfo(augmentationToInspect)
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);

Добавление реверберации в качестве пользовательского алгоритма увеличения. applyReverb функция создает 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;
data.AugmentationInfo(augmentationToInspect)
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]}

Зависимости

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

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

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

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

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

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

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

Зависимости

Чтобы включить это свойство, задайте свойство AugingParameterSource для audioDataAugmenter кому 'random'.

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

Представлен в R2019b