Преобразуйте аудио datastore
transformDatastore = transform(ADS,@fcn)transformDatastore = transform(ADS,@fcn,Name,Value) создает новый datastore, который преобразовывает вывод от функции transformDatastore = transform(ADS,@fcn)read.
задает опции с помощью одного или нескольких аргументов пары transformDatastore = transform(ADS,@fcn,Name,Value)Name,Value.
Задайте путь к файлу к аудиосэмплам, включенным с Audio Toolbox™. Создайте аудио datastore, который указывает на заданную папку.
folder = fullfile(matlabroot,'toolbox','audio','samples'); ADS = audioDatastore(folder);
Вызовите transform, чтобы создать новый datastore, который смешивает многоканальные сигналы к моно.
ADSnew = transform(ADS,@(x)mean(x,2));
Читайте из нового datastore и подтвердите что он только выходные параметры моно сигналы.
while hasdata(ADSnew) audio = read(ADSnew); fprintf('Number of channels = %d\n',size(audio,2)) end
Number of channels = 1 Number of channels = 1 Number of channels = 1 Number of channels = 1 Number of channels = 1 Number of channels = 1 Number of channels = 1 Number of channels = 1 Number of channels = 1 Number of channels = 1 Number of channels = 1 Number of channels = 1 Number of channels = 1 Number of channels = 1 Number of channels = 1 Number of channels = 1 Number of channels = 1 Number of channels = 1 Number of channels = 1 Number of channels = 1 Number of channels = 1 Number of channels = 1 Number of channels = 1 Number of channels = 1 Number of channels = 1 Number of channels = 1 Number of channels = 1 Number of channels = 1 Number of channels = 1
Аудиосэмплы, включенные с Audio Toolbox™, имеют переменную длительность. Используйте функцию transform, чтобы настроить функцию read так, чтобы это вывело случайный пятисекундный сегмент аудиосэмплов.
Задайте путь к файлу к аудиосэмплам, включенным с Audio Toolbox. Создайте аудио datastore, который указывает на заданную папку.
folder = fullfile(matlabroot,'toolbox','audio','samples'); ADS = audioDatastore(folder);
Задайте функцию, extractSegment, чтобы взять в качестве входа вывод функции read. Заставьте extractSegment извлечь ценность пяти секунд данных из звукового сигнала.
%-------------------------------------------------------------------------- function [dataOut,info] = extractSegment(audioIn,info) [N,numChan] = size(audioIn); newN = round(info.SampleRate*5); if newN > N % signal length < 5 seconds numPad = newN - N + 1; dataOut = [audioIn;zeros(numPad,numChan,'like',audioIn)]; elseif newN < N % signal length > 5 seconds start = randi(N - newN + 1); dataOut = audioIn(start:start+newN-1,:); else % signal length == 5 seconds dataOut = audioIn; end end %--------------------------------------------------------------------------
Вызовите transform, чтобы создать TransformedDatastore с набором Transforms к extractSegment.
ADSnew = transform(ADS,@extractSegment,'IncludeInfo',true)
ADSnew =
TransformedDatastore with properties:
UnderlyingDatastore: [1x1 audioDatastore]
Transforms: {@extractSegment}
IncludeInfo: 1
Считайте первые три звуковых файла и проверьте, что выходные параметры являются пятисекундными сегментами.
for i = 1:3 [audio,info] = read(ADSnew); fprintf('Duration = %d seconds\n',size(audio,1)/info.SampleRate) end
Duration = 5 seconds Duration = 5 seconds Duration = 5 seconds
Используйте transform, чтобы создать аудио datastore, который возвращает mel представление спектрограммы от функции read.
Задайте путь к файлу к аудиосэмплам, включенным с Audio Toolbox™. Создайте аудио datastore, который указывает на заданную папку.
folder = fullfile(matlabroot,'toolbox','audio','samples'); ADS = audioDatastore(folder);
Задайте функцию, extractMelSpectrogramSegment, который преобразовывает аудиоданные от представления временного интервала до журнала mel спектрограмма. Добавьте дополнительные выходные параметры от функции melSpectrogram до информационного struct вывод от read.
function [dataOut,infoOut] = extractMelSpectrogram(audioIn,info) [S,F,T] = melSpectrogram(audioIn,info.SampleRate); dataOut = 10*log10(S+eps); infoOut = info; infoOut.CenterFrequencies = F; infoOut.TimeInstants = T; end
Вызовите transform, чтобы создать TransformedDatastore с набором Transforms к extractMelSpectrogram.
ADSnew = transform(ADS,@extractMelSpectrogram,'IncludeInfo',true)
ADSnew =
TransformedDatastore with properties:
UnderlyingDatastore: [1x1 audioDatastore]
Transforms: {@extractMelSpectrogram}
IncludeInfo: 1
Считайте первые три звуковых файла и постройте журнал mel спектрограммы. Если существует несколько каналов, строят только первый канал.
for i = 1:3 [melSpec,info] = read(ADSnew); figure(i) surf(info.TimeInstants,info.CenterFrequencies,melSpec(:,:,1),'EdgeColor','none'); xlabel('Time (s)') ylabel('Frequency (Hz)') [~,name] = fileparts(info.FileName); title(name) axis([0 info.TimeInstants(end) info.CenterFrequencies(1) info.CenterFrequencies(end)]) view([0,90]) end



Используйте transform, чтобы создать аудио datastore, который возвращает характеристические векторы.
Задайте путь к файлу к аудиосэмплам, включенным с Audio Toolbox™. Создайте аудио datastore, который указывает на заданную папку.
folder = fullfile(matlabroot,'toolbox','audio','samples'); ADS = audioDatastore(folder);
Задайте функцию, extractFeatureVector, который преобразовывает аудиоданные от представления временного интервала до характеристических векторов.
function [dataOut,info] = extractFeatureVector(audioIn,info) % Convert to frequency-domain representation windowLength = 256; overlapLength = 128; [~,f,~,S] = spectrogram(mean(audioIn,2), ... hann(windowLength,"Periodic"), ... overlapLength, ... windowLength, ... info.SampleRate, ... "power", ... "onesided"); % Extract features [kurtosis,spread,centroid] = spectralKurtosis(S,f); skewness = spectralSkewness(S,f); crest = spectralCrest(S,f); decrease = spectralDecrease(S,f); entropy = spectralEntropy(S,f); flatness = spectralFlatness(S,f); flux = spectralFlux(S,f); rolloff = spectralRolloffPoint(S,f); slope = spectralSlope(S,f); % Concantenate to create feature vectors dataOut = [kurtosis,spread,centroid,skewness,crest,decrease,entropy,flatness,flux,rolloff,slope]; end
Вызовите transform, чтобы создать TransformedDatastore с набором Transforms к extractFeatureVector.
ADSnew = transform(ADS,@extractFeatureVector,'IncludeInfo',true)
ADSnew =
TransformedDatastore with properties:
UnderlyingDatastore: [1x1 audioDatastore]
Transforms: {@extractFeatureVector}
IncludeInfo: 1
Вызовите read, чтобы возвращать характеристические векторы для аудио в зависимости от времени.
featureMatrix = read(ADSnew); [numFeatureVectors,numFeatures] = size(featureMatrix)
numFeatureVectors =
4215
numFeatures =
11
Используйте transform, чтобы создать аудио datastore, который применяет полосу пропускания, фильтрующую прежде, чем возвратить аудио в функцию read.
Задайте путь к файлу к аудиосэмплам, включенным с Audio Toolbox™. Создайте аудио datastore, который указывает на заданную папку.
folder = fullfile(matlabroot,'toolbox','audio','samples'); ADS = audioDatastore(folder);
Задайте функцию, applyBandpassFilter, который применяет полосовой фильтр с полосой пропускания между 1 и 15 кГц.
function [audioOut,info] = applyBandpassFilter(audioIn,info) audioOut = bandpass(audioIn,[1e3,15e3],info.SampleRate); end
Вызовите transform, чтобы создать TransformedDatastore с набором Transforms к applyBandpassFilter.
ADSnew = transform(ADS,@applyBandpassFilter,'IncludeInfo',true)
ADSnew =
TransformedDatastore with properties:
UnderlyingDatastore: [1x1 audioDatastore]
Transforms: {@applyBandpassFilter}
IncludeInfo: 1
Вызовите read, чтобы возвратиться, полоса пропускания отфильтровала аудио от datastore преобразования. Вызовите read, чтобы возвратиться, полоса пропускания отфильтровала аудио от исходного datastore. Постройте спектрограммы, чтобы визуализировать различие.
[audio1,info1] = read(ADS); [audio2,info2] = read(ADSnew); figure(1) spectrogram(audio1,hann(512),256,512,info1.SampleRate,'yaxis') title('Original Signal') figure(2) spectrogram(audio2,hann(512),256,512,info2.SampleRate,'yaxis') title('Filtered Signal')


ADS — Аудио datastoreaudioDatastoreАудио datastore, заданный как объект audioDatastore.
@fcn Функция, которая преобразовывает данныеФункция, которая преобразовывает данные, заданные как указатель на функцию. Подпись функции зависит от параметра IncludeInfo.
Если IncludeInfo установлен в false (значение по умолчанию), функция преобразовывает аудиовыход от read. Информационный вывод от read неизменен.

Функция преобразования должна иметь эту подпись:
function dataOut = fcn(audio) ... end
Если IncludeInfo установлен в true, функция преобразовывает аудиовыход от read, и может использовать или изменить информацию, возвращенную в read.

Функция преобразования должна иметь эту подпись:
function [dataOut,infoOut] = fcn(audio,infoIn) ... end
Укажите необязательные аргументы в виде пар ""имя, значение"", разделенных запятыми. Имя (Name) — это имя аргумента, а значение (Value) — соответствующее значение. Name должен появиться в кавычках. Вы можете задать несколько аргументов в виде пар имен и значений в любом порядке, например: Name1, Value1, ..., NameN, ValueN.
'IncludeInfo',tf'IncludeInfo' — Передайте информацию через индивидуально настраиваемую функцию readfalse (значение по умолчанию) | верныйПередайте информацию через индивидуально настраиваемую функцию чтения, заданную как true или false. Если true, функция преобразования может использовать или изменить информацию, это добирается от read. Если незаданный, значения по умолчанию IncludeInfo к false.
Типы данных: логический
transformDatastore — Новый datastore с индивидуально настраиваемым readTransformedDatastoreНовый datastore с индивидуально настраиваемым read, возвращенным как TransformedDatastore с набором UnderlyingDatastore к ADS, набором Transforms к fcn и набором IncludeInfo к true или false.
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.