Добавьте пользовательский метод увеличения
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)")
aug
— Увеличение аудиоданныхaudioDataAugmenter
объектaudioDataAugmenter
объект.
algorithmName
— Имя алгоритмаИмя алгоритма в виде вектора символов или строки. algorithmName
должно быть имя уникального свойства на audioDataAugmenter
, aug
.
Типы данных: char |
string
algorithmHandle
— Обработайте к функции, которая реализует пользовательский алгоритм увеличенияfunction_handle
Обработайте к функции, которая реализует пользовательский алгоритм увеличения в виде function_handle
.
Типы данных: function_handle
Задайте дополнительные разделенные запятой пары Name,Value
аргументы. Name
имя аргумента и Value
соответствующее значение. Name
должен появиться в кавычках. Вы можете задать несколько аргументов в виде пар имен и значений в любом порядке, например: Name1, Value1, ..., NameN, ValueN
.
'AugmentationParameter,'PreDelay'
'AugmentationParameter'
— Параметр увеличенияПараметр увеличения в виде вектора символов, строки, массива ячеек из символьных векторов или массива ячеек строк.
Используйте массивы ячеек, чтобы создать несколько параметров увеличения. Если вы создаете несколько параметров увеличения, необходимо также задать ParameterRange
и ParameterValue
как массивы ячеек, содержащие информацию для каждого параметра увеличения.
Пример: 'AugmentationParameter','PreDelay'
Пример: 'AugmentationParameter',{'PreDelay','HighCutFrequency'}
Типы данных: char |
string
'ParameterRange'
— Область значений параметра
(значение по умолчанию) | двухэлементный вектор из неуменьшающихся значений | массив ячеек двухэлементных векторов из неуменьшающихся значенийОбласть значений параметра в виде двухэлементного вектора из неуменьшающихся значений (для одного параметра) или массив ячеек двухэлементных векторов из неуменьшающихся значений (для нескольких параметров).
Пример: 'ParameterRange',[0,1]
Пример: 'ParameterRange',{[0,1],[20,20000]}
Чтобы включить это свойство, установите свойство AugmentationParameterSource своего audioDataAugmenter
возразите против 'random'
.
Типы данных: single
| double
| cell
'ParameterValue'
— Значение параметров
(значение по умолчанию) | скаляр | вектор | массив ячеек скаляров или векторовЗначение параметров в виде скаляра, вектора или массива ячеек скаляров или векторов.
Пример: '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
Поддержка комплексного числа: Да
audioDataAugmenter
| removeAugmentationMethod
| reverberator
У вас есть модифицированная версия этого примера. Вы хотите открыть этот пример со своими редактированиями?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.