Преобразуйте audio datastore
создает новый datastore, который преобразует выход из transformDatastore
= transform(ADS
,@fcn
)read
функция.
задает опции с использованием одного или нескольких transformDatastore
= transform(ADS
,@fcn
,Name,Value
)Name,Value
аргументы в виде пар.
Укажите путь к файлу для выборок аудио, включенных в Audio Toolbox™. Создайте audio datastore, который указывает на указанную папку.
folder = fullfile(matlabroot,'toolbox','audio','samples'); ADS = audioDatastore(folder);
Функции transform
создать новый datastore, который смешивает многоканальные сигналы с mono.
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 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. Создайте audio datastore, который указывает на указанную папку.
folder = fullfile(matlabroot,'toolbox','audio','samples'); ADS = audioDatastore(folder);
Задайте функцию, чтобы взять за вход выход read
функция. Сделайте функцию извлечь пять секунд данных из аудиосигнала.
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
установите на заданную функцию.
ADSnew = transform(ADS,@extractSegment,'IncludeInfo',true)
ADSnew = TransformedDatastore with properties: UnderlyingDatastores: {audioDatastore} SupportedOutputFormats: [1x16 string] 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
чтобы создать audio datastore, который возвращает представление mel spectrogram из read
функция.
Укажите путь к файлу для выборок аудио, включенных в Audio Toolbox™. Создайте audio datastore, который указывает на указанную папку.
folder = fullfile(matlabroot,'toolbox','audio','samples'); ADS = audioDatastore(folder);
Задайте функцию, которая преобразует аудио данных из представления во временной области в журнал mel spectrogram. Функция добавляет дополнительные выходы от melSpectrogram
функцию в информационный struct, выводимую из чтения audio datastore.
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: UnderlyingDatastores: {audioDatastore} SupportedOutputFormats: [1x16 string] Transforms: {@extractMelSpectrogram} IncludeInfo: 1
Прочтите первые три аудио файлов и постройте график журнала mel spectrograms. Если существует несколько каналов, постройте график только первого канала.
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
чтобы создать audio datastore, который возвращает векторы функций.
Укажите путь к файлу для выборок аудио, включенных в Audio Toolbox™. Создайте audio 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); % Concatenate 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: UnderlyingDatastores: {audioDatastore} SupportedOutputFormats: [1x16 string] Transforms: {@extractFeatureVector} IncludeInfo: 1
Функции read
для возврата векторов функций для аудио с течением времени.
featureMatrix = read(ADSnew); [numFeatureVectors,numFeatures] = size(featureMatrix)
numFeatureVectors = 4215 numFeatures = 11
Использование transform
чтобы создать audio datastore, который применяет полосно-пропускающую фильтрацию перед возвращением аудио из read
функция.
Укажите путь к файлу для выборок аудио, включенных в Audio Toolbox™. Создайте audio 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: UnderlyingDatastores: {audioDatastore} SupportedOutputFormats: [1x16 string] Transforms: {@applyBandpassFilter} IncludeInfo: 1
Функции read
для возврата отфильтрованного аудио полосы пропускания из datastore преобразования. Функции read
для возврата отфильтрованного аудио полосы пропускания из исходного datastore. Постройте график спектрограмм, чтобы визуализировать различие.
[audio1,info1] = read(ADS); [audio2,info2] = read(ADSnew);
spectrogram(audio1,hann(512),256,512,info1.SampleRate,'yaxis') title('Original Signal')
spectrogram(audio2,hann(512),256,512,info2.SampleRate,'yaxis') title('Filtered Signal')
ADS
- Audio datastoreaudioDatastore
объектAudio 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
- имя аргумента и Value
- соответствующее значение. Name
должны находиться внутри кавычек. Можно задать несколько аргументов в виде пар имен и значений в любом порядке Name1,Value1,...,NameN,ValueN
.
'IncludeInfo',tf
'IncludeInfo'
- Передайте информацию через настроенные read
функцияfalse
(по умолчанию) | trueПередайте информацию через настроенную функцию чтения, заданную как true
или false
. Если true
, функция преобразования может использовать или изменять информацию, из которой она получает read
. Если не задано, IncludeInfo
по умолчанию является false
.
Типы данных: logical
transformDatastore
- Новый datastore с настроенными read
TransformedDatastore
Новый datastore с настроенным read
, возвращается как TransformedDatastore
с UnderlyingDatastore
установлено на ADS
, Transforms
установлено на fcn
, и IncludeInfo
установлено на true
или false
.
У вас есть измененная версия этого примера. Вы хотите открыть этот пример с вашими правками?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.