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'

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

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

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

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

Читайте в звуковом сигнале и слушайте его.

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

Можно задать дополнительные параметры и соответствующие области значений параметра (для использования, когда 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)")

Читайте в звуковом сигнале и слушайте его.

[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)")

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

свернуть все

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