Преобразовать хранилище аудиоданных
создает новое хранилище данных, которое преобразует выходные данные из transformDatastore = transform(ADS,@fcn)read функция.
указывает параметры, использующие один или несколько transformDatastore = transform(ADS,@fcn,Name,Value)Name,Value аргументы пары.
Укажите путь к файлу для образцов звука, включенных в Audio Toolbox™. Создайте хранилище аудиоданных, указывающее на указанную папку.
folder = fullfile(matlabroot,'toolbox','audio','samples'); ADS = audioDatastore(folder);
Звонить transform для создания нового хранилища данных, которое смешивает многоканальные сигналы с моно.
ADSnew = transform(ADS,@(x)mean(x,2));
Считывайте данные из нового хранилища данных и подтвердите, что оно выдает только моносигналы.
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. Создайте хранилище аудиоданных, указывающее на указанную папку.
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 для создания хранилища аудиоданных, которое возвращает представление спектрограммы mel из read функция.
Укажите путь к файлу для образцов звука, включенных в Audio Toolbox™. Создайте хранилище аудиоданных, указывающее на указанную папку.
folder = fullfile(matlabroot,'toolbox','audio','samples'); ADS = audioDatastore(folder);
Определите функцию, которая преобразует аудиоданные из представления во временной области в логарифмическую спектрограмму. Функция добавляет дополнительные выходы из melSpectrogram в информационную структуру, выводимую при чтении хранилища аудиоданных.
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
Прочитайте первые три аудиофайла и распечатайте спектрограммы log 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 для создания хранилища аудиоданных, возвращающего векторы функций.
Укажите путь к файлу для образцов звука, включенных в Audio Toolbox™. Создайте хранилище аудиоданных, указывающее на указанную папку.
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 для создания хранилища аудиоданных, которое применяет полосовую фильтрацию перед возвратом аудиосигнала из read функция.
Укажите путь к файлу для образцов звука, включенных в Audio Toolbox™. Создайте хранилище аудиоданных, указывающее на указанную папку.
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 для возврата полосового отфильтрованного звука из хранилища данных преобразования. Звонить read для возврата полосового отфильтрованного звука из исходного хранилища данных. Постройте график спектрограмм, чтобы визуализировать разницу.
[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 - Хранилище аудиоданныхaudioDatastore объектХранилище аудиоданных, указанное как 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 - Новое хранилище данных с настраиваемыми readTransformedDatastoreНовое хранилище данных с настраиваемыми read, возвращено как TransformedDatastore с UnderlyingDatastore установить в значение ADS, Transforms установить в значение fcn, и IncludeInfo установить в значение true или false.
Имеется измененная версия этого примера. Открыть этот пример с помощью изменений?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.