Увеличение аудиоданных
Считывайте звуковой сигнал и слушайте его.
[audioIn,fs] = audioread("Counting-16-44p1-mono-15secs.wav");
sound(audioIn,fs)Создание audioDataAugmenter объект, применяющий растягивание времени, контроль громкости и сдвиг времени в каскаде. Примените каждое из дополнений с вероятностью 80%. Набор NumAugmentations кому 5 для вывода пяти независимо увеличенных сигналов. Чтобы пропустить смещение основного тона и добавление шума для каждого увеличения, установите соответствующие вероятности на 0. Определите диапазоны параметров для каждого соответствующего алгоритма увеличения.
augmenter = audioDataAugmenter( ... "AugmentationMode","sequential", ... "NumAugmentations",5, ... ... "TimeStretchProbability",0.8, ... "SpeedupFactorRange", [1.3,1.4], ... ... "PitchShiftProbability",0, ... ... "VolumeControlProbability",0.8, ... "VolumeGainRange",[-5,5], ... ... "AddNoiseProbability",0, ... ... "TimeShiftProbability",0.8, ... "TimeShiftRange", [-500e-3,500e-3])
augmenter =
audioDataAugmenter with properties:
AugmentationMode: "sequential"
AugmentationParameterSource: 'random'
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]
Звонить augment на аудио для создания 5 дополнений. Дополненный звук возвращается в таблице с переменными Audio и AugmentationInfo. Количество строк в таблице определяется NumAugmentations.
data = augment(augmenter,audioIn,fs)
data=5×2 table
Audio AugmentationInfo
_________________ ________________
{685056x1 double} [1x1 struct]
{685056x1 double} [1x1 struct]
{505183x1 double} [1x1 struct]
{685056x1 double} [1x1 struct]
{490728x1 double} [1x1 struct]
В текущем трубопроводе увеличения параметры увеличения назначаются случайным образом из заданных диапазонов. Чтобы определить точные параметры, используемые для увеличения, проверьте AugmentationInfo.
augmentationToInspect =
4;
data.AugmentationInfo(augmentationToInspect)ans = struct with fields:
SpeedupFactor: 1
VolumeGain: 4.3399
TimeShift: 0.4502
Прислушайтесь к дополнению, которое вы проверяете. Постройте график временного представления исходного и дополненного сигналов.
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("Counting-16-44p1-mono-15secs.wav");
sound(audioIn,fs)Создание audioDataAugmenter объект, применяющий растягивание времени, смещение основного тона и искажение шума в каскаде. Укажите коэффициенты ускорения растяжения во времени как 0.9, 1.1, и 1.2. Укажите смещение шага в полутонах как -2, -1, 1, и 2. Укажите SNR с повреждением шума как 10 дБ и 15 дБ.
augmenter = audioDataAugmenter( ... "AugmentationMode","sequential", ... "AugmentationParameterSource","specify", ... "SpeedupFactor",[0.9,1.1,1.2], ... "ApplyTimeStretch",true, ... "ApplyPitchShift",true, ... "SemitoneShift",[-2,-1,1,2], ... "SNR",[10,15], ... "ApplyVolumeControl",false, ... "ApplyTimeShift",false)
augmenter =
audioDataAugmenter with properties:
AugmentationMode: "sequential"
AugmentationParameterSource: "specify"
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
Звонить augment на аудио для создания 24 дополнений. Дополнения представляют собой каждую комбинацию заданных параметров увеличения (2 = 24).
data = augment(augmenter,audioIn,fs)
data=24×2 table
Audio AugmentationInfo
_________________ ________________
{761243x1 double} [1x1 struct]
{622888x1 double} [1x1 struct]
{571263x1 double} [1x1 struct]
{761243x1 double} [1x1 struct]
{622888x1 double} [1x1 struct]
{571263x1 double} [1x1 struct]
{761243x1 double} [1x1 struct]
{622888x1 double} [1x1 struct]
{571263x1 double} [1x1 struct]
{761243x1 double} [1x1 struct]
{622888x1 double} [1x1 struct]
{571263x1 double} [1x1 struct]
{761243x1 double} [1x1 struct]
{622888x1 double} [1x1 struct]
{571263x1 double} [1x1 struct]
{761243x1 double} [1x1 struct]
⋮
Можно проверить конфигурацию параметров каждого дополнения с помощью AugmentationInfo табличная переменная.
augmentationToInspect =
1;
data.AugmentationInfo(augmentationToInspect)ans = struct with fields:
SpeedupFactor: 0.9000
SemitoneShift: -2
SNR: 10
Прислушайтесь к дополнению, которое вы проверяете. Постройте график представления во временной области исходного и дополненного сигналов.
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("Counting-16-44p1-mono-15secs.wav");Создание audioDataAugmenter объект, применяющий искажение шума и сдвиг времени в параллельных ветвях. Для ветви повреждения шума случайным образом примените шум с SNR в диапазоне 0 от дБ до 20 дБ. Для ветви сдвига времени случайным образом применить сдвиг времени в диапазоне -300 мс в 300 г-жа применяет увеличение 2 раза для каждой ветви, для 4 общих дополнений.
augmenter = audioDataAugmenter( ... "AugmentationMode","independent", ... "AugmentationParameterSource","random", ... "NumAugmentations",2, ... "ApplyTimeStretch",false, ... "ApplyPitchShift",false, ... "ApplyVolumeControl",false, ... "SNRRange",[0,20], ... "TimeShiftRange",[-300e-3,300e-3])
augmenter =
audioDataAugmenter with properties:
AugmentationMode: "independent"
AugmentationParameterSource: "random"
NumAugmentations: 2
ApplyTimeStretch: 0
ApplyPitchShift: 0
ApplyVolumeControl: 0
ApplyAddNoise: 1
SNRRange: [0 20]
ApplyTimeShift: 1
TimeShiftRange: [-0.3000 0.3000]
Звонить augment на аудио для создания 3 дополнений.
data = augment(augmenter,audioIn,fs);
Можно проверить конфигурацию параметров каждого дополнения с помощью AugmentatioInfo табличная переменная.
augmentationToInspect =
4;
data.AugmentationInfo{augmentationToInspect}ans = struct with fields:
TimeShift: 0.0016
Прослушайте звук, который вы проверяете. Постройте график представления во временной области исходного и дополненного сигналов.
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("Counting-16-44p1-mono-15secs.wav");Создание audioDataAugmenter объект, применяющий контроль громкости, повреждение шума и сдвиг времени в параллельных ветвях.
augmenter = audioDataAugmenter( ... "AugmentationMode","independent", ... "AugmentationParameterSource","specify", ... "ApplyTimeStretch",false, ... "ApplyPitchShift",false, ... "VolumeGain",2, ... "SNR",0, ... "TimeShift",2)
augmenter =
audioDataAugmenter with properties:
AugmentationMode: "independent"
AugmentationParameterSource: "specify"
ApplyTimeStretch: 0
ApplyPitchShift: 0
ApplyVolumeControl: 1
VolumeGain: 2
ApplyAddNoise: 1
SNR: 0
ApplyTimeShift: 1
TimeShift: 2
Звонить augment на аудио для создания 3 дополнений.
data = augment(augmenter,audioIn,fs)
data=3×2 table
Audio AugmentationInfo
_________________ ________________
{685056x1 double} {1x1 struct}
{685056x1 double} {1x1 struct}
{685056x1 double} {1x1 struct}
Можно проверить конфигурацию параметров каждого дополнения с помощью AugmentatioInfo табличная переменная.
augmentationToInspect =
3;
data.AugmentationInfo{augmentationToInspect}ans = struct with fields:
TimeShift: 2
Прослушайте звук, который вы проверяете. Постройте график представления исходных и дополненных сигналов во временной области.
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)")
audioDataAugmenter поддерживает несколько рабочих процессов для расширения хранилища данных, включая:
Автономное увеличение
Увеличение с помощью массивов tall
Увеличение с помощью хранилищ данных преобразования
В каждом рабочем процессе сначала создайте хранилище аудиоданных для указания на аудиоданные. В этом примере создается хранилище аудиоданных, указывающее на аудиоотборы, включенные в Audio Toolbox™. Подсчитайте количество файлов в наборе данных.
folder = fullfile(matlabroot,"toolbox","audio","samples"); ADS = audioDatastore(folder)
ADS =
audioDatastore with properties:
Files: {
' ...\matlab\toolbox\audio\samples\Ambiance-16-44p1-mono-12secs.wav';
' ...\matlab\toolbox\audio\samples\AudioArray-16-16-4channels-20secs.wav';
' ...\toolbox\audio\samples\ChurchImpulseResponse-16-44p1-mono-5secs.wav'
... and 26 more
}
AlternateFileSystemRoots: {}
OutputDataType: 'double'
Labels: {}
numFilesInDataset = numel(ADS.Files)
numFilesInDataset = 29
Создание audioDataAugmenter применяется случайное последовательное увеличение. Набор NumAugmentations кому 2.
aug = audioDataAugmenter('NumAugmentations',2)aug =
audioDataAugmenter with properties:
AugmentationMode: 'sequential'
AugmentationParameterSource: 'random'
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-файлов.
while hasdata(ADS) [audioIn,info] = read(ADS); data = augment(aug,audioIn,info.SampleRate); [~,fn] = fileparts(info.FileName); for i = 1:size(data,1) augmentedAudio = data.Audio{i}; % If augmentation caused an audio signal to have values outside of -1 and 1, % normalize the audio signal to avoid clipping when writing. if max(abs(augmentedAudio),[],'all')>1 augmentedAudio = augmentedAudio/max(abs(augmentedAudio),[],'all'); end audiowrite(sprintf('%s_aug%d.wav',fn,i),augmentedAudio,info.SampleRate) end end
Создание audioDatastore указывает на расширенный набор данных и подтверждает, что количество файлов в наборе данных вдвое превышает исходное количество файлов.
augmentedADS = audioDatastore(pwd)
augmentedADS =
audioDatastore with properties:
Files: {
' ...\Examples\audio-ex28074079\Ambiance-16-44p1-mono-12secs_aug1.wav';
' ...\Examples\audio-ex28074079\Ambiance-16-44p1-mono-12secs_aug2.wav';
' ...\Examples\audio-ex28074079\AudioArray-16-16-4channels-20secs_aug1.wav'
... and 55 more
}
AlternateFileSystemRoots: {}
OutputDataType: 'double'
Labels: {}
numFilesInAugmentedDataset = numel(augmentedADS.Files)
numFilesInAugmentedDataset = 58
Увеличение с помощью массивов Tal
При увеличении набора данных с использованием массивов tall входные данные в augmenter должны выбираться с согласованной скоростью. Поднабор исходного набора аудиоданных включает только файлы с частотой дискретизации 44,1 кГц. Большинство наборов данных уже очищено, чтобы иметь согласованную частоту выборки.
keepFile = cellfun(@(x)contains(x,'44p1'),ADS.Files);
ads44p1 = subset(ADS,keepFile);
fs = 44.1e3;Преобразование хранилища аудиоданных в массив высокого уровня. tall массивы вычисляются только при явном запросе с использованием gather. MATLAB ® автоматически оптимизирует вычисления в очереди, минимизируя количество проходов через данные. При наличии Toolbox™ параллельных вычислений можно распределить вычисления по нескольким машинам. Аудиоданные представлены в виде массива ячеек M-by-1 высокого уровня, где М - количество файлов в хранилище аудиоданных.
adsTall = tall(ads44p1)
Starting parallel pool (parpool) using the 'local' profile ...
Connected to the parallel pool (number of workers: 6).
adsTall =
M×1 tall cell array
{ 539648×1 double}
{ 227497×1 double}
{ 8000×1 double}
{ 685056×1 double}
{ 882688×2 double}
{1115760×2 double}
{ 505200×2 double}
{3195904×2 double}
: :
: :
Определение cellfun функция, так что увеличение применяется к каждой ячейке высокого массива. Звонить gather для вычисления массива высокого уровня.
augTall = cellfun(@(x)augment(aug,x,fs),adsTall,"UniformOutput",false);
augmentedDataset = gather(augTall)Evaluating tall expression using the Parallel Pool 'local': - Pass 1 of 1: Completed in 1 min 34 sec Evaluation completed in 1 min 34 sec
augmentedDataset=12×1 cell array
{2×2 table}
{2×2 table}
{2×2 table}
{2×2 table}
{2×2 table}
{2×2 table}
{2×2 table}
{2×2 table}
{2×2 table}
{2×2 table}
{2×2 table}
{2×2 table}
Расширенный набор данных возвращается в виде массива ячеек numFiles-by-1, где numFiles - количество файлов в хранилище данных. Каждый элемент массива ячеек является таблицей numAugmentationsPerFile-by-2, где numAugmentationPerFile - количество дополнений, возвращаемых на файл.
numFiles = numel(augmentedDataset)
numFiles = 12
numAugmentationsPerFile = size(augmentedDataset{1},1)numAugmentationsPerFile = 2
Увеличение с помощью хранилища данных преобразования
При обучении приложения машинного обучения с помощью хранилища данных преобразования можно выполнять оперативное увеличение данных. Звонить transform для создания нового хранилища данных, которое применяет увеличение данных при чтении.
transformADS = transform(ADS,@(x,info)augment(aug,x,info),'IncludeInfo',true)transformADS =
TransformedDatastore with properties:
UnderlyingDatastore: [1×1 audioDatastore]
Transforms: {@(x,info)augment(aug,x,info)}
IncludeInfo: 1
Звонить read для возврата дополненного первого файла из хранилища данных преобразования.
augmentedRead = read(transformADS)
augmentedRead=2×2 table
Audio AugmentationInfo
_________________ ________________
{539648×1 double} [1×1 struct]
{586683×1 double} [1×1 struct]
aug - Аудиоданные augmenteraudioDataAugmenter объектaudioDataAugmenter объект.
audioIn - Звуковой входЗвуковой вход, определяемый как вектор столбца или матрица независимых каналов (столбцов).
Типы данных: single | double
fs - Частота дискретизации (Гц)44100 (по умолчанию) | положительный скалярЧастота дискретизации в Гц, заданная как положительный скаляр. Допустимый диапазон fs зависит от свойств audioDataAugmenter объект.
Типы данных: single | double
data - Дополненная аудио- и дополняющая информацияДополненная информация о звуке и дополнении, возвращаемая в виде двух столбцов table. Первый столбец содержит дополненный звуковой сигнал. Во втором столбце содержится информация о применяемых методах увеличения. Количество строк в data соответствует количеству выходных усиленных сигналов. Количество выходных усиленных сигналов зависит от значений свойств объекта.
addAugmentationMethod | audioDataAugmenter | removeAugmentationMethod | table
Имеется измененная версия этого примера. Открыть этот пример с помощью изменений?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.