Классифицируйте звуки на звуковой сигнал
задает опции с помощью одного или нескольких sounds
= classifySound(audioIn
,fs
,Name,Value
)Name,Value
парные аргументы.
sounds = classifySound(audioIn,fs,'SpecificityLevel','low')
классифицирует звуки с помощью низкой специфики.[
также возвращает метки времени, сопоставленные с каждым обнаруженным звуком.sounds
,timestamps
] = classifySound(___)
[
также возвращает таблицу, содержащую детали результата.sounds
,timestamps
,resultsTable
] = classifySound(___)
classifySound(___)
без выходных аргументов создает облако слова идентифицированных звуков в звуковом сигнале.
Эта функция требует и Audio Toolbox™ и Deep Learning Toolbox™.
classifySound
Загрузите и разархивируйте поддержку Audio Toolbox™ YAMNet.
Если поддержка Audio Toolbox YAMNet не установлена, то первый вызов функции обеспечивает ссылку на местоположение загрузки. Чтобы загрузить модель, щелкните по ссылке. Разархивируйте файл к местоположению на пути MATLAB.
В качестве альтернативы выполните следующие команды, чтобы загрузить и разархивировать модель YAMNet к вашей временной директории.
downloadFolder = fullfile(tempdir,'YAMNetDownload'); loc = websave(downloadFolder,'https://ssd.mathworks.com/supportfiles/audio/yamnet.zip'); YAMNetLocation = tempdir; unzip(loc,YAMNetLocation) addpath(fullfile(YAMNetLocation,'yamnet'))
Сгенерируйте 1 секунду розового шума, принимающего частоту дискретизации на 16 кГц.
fs = 16e3; x = pinknoise(fs);
Вызовите classifySound
с розовым шумовым сигналом и частотой дискретизации.
identifiedSound = classifySound(x,fs)
identifiedSound = "Pink noise"
Читайте в звуковом сигнале. Вызовите classifySound
возвратить обнаруженные звуки и соответствующие метки времени.
[audioIn,fs] = audioread('multipleSounds-16-16-mono-18secs.wav');
[sounds,timeStamps] = classifySound(audioIn,fs);
Постройте звуковой сигнал и пометьте обнаруженные звуковые области.
t = (0:numel(audioIn)-1)/fs; plot(t,audioIn) xlabel('Time (s)') axis([t(1),t(end),-1,1]) textHeight = 1.1; for idx = 1:numel(sounds) patch([timeStamps(idx,1),timeStamps(idx,1),timeStamps(idx,2),timeStamps(idx,2)], ... [-1,1,1,-1], ... [0.3010 0.7450 0.9330], ... 'FaceAlpha',0.2); text(timeStamps(idx,1),textHeight+0.05*(-1)^idx,sounds(idx)) end
Выберите область и послушайте только выбранную область.
sampleStamps = floor(timeStamps*fs)+1; soundEvent = 3; isolatedSoundEvent = audioIn (sampleStamps (soundEvent, 1): sampleStamps (soundEvent, 2)); звук (isolatedSoundEvent, фс); отображение'Detected Sound = ' + звуки (soundEvent))
"Detected Sound = Snoring"
Читайте в звуковом сигнале, содержащем несколько различных звуковых событий.
[audioIn,fs] = audioread('multipleSounds-16-16-mono-18secs.wav');
Вызовите classifySound
со звуковым сигналом и частотой дискретизации.
[sounds,~,soundTable] = classifySound(audioIn,fs);
sounds
массив строк содержит наиболее вероятное звуковое событие в каждой области.
sounds
sounds = 1×5 string
"Stream" "Machine gun" "Snoring" "Bark" "Meow"
soundTable
содержит подробную информацию относительно звуков, обнаруженных в каждой области, включая средние значения счета и максимумы по анализируемому сигналу.
soundTable
soundTable=5×2 table
TimeStamps Results
________________ ___________
0 3.92 {4×3 table}
4.0425 6.0025 {3×3 table}
6.86 9.1875 {2×3 table}
10.658 12.373 {4×3 table}
12.985 16.66 {4×3 table}
Просмотрите последнюю обнаруженную область.
soundTable.Results{end}
ans=4×3 table
Sounds AverageScores MaxScores
________________________ _____________ _________
"Animal" 0.79514 0.99941
"Domestic animals, pets" 0.80243 0.99831
"Cat" 0.8048 0.99046
"Meow" 0.6342 0.90177
Вызовите classifySound
снова. На этот раз установите IncludedSounds
к Animal
так, чтобы функция сохранила только области в который Animal
звуковой класс обнаруживается.
[sounds,timeStamps,soundTable] = classifySound(audioIn,fs, ... 'IncludedSounds','Animal');
Массив звуков только возвращает звуки, заданные как включенные звуки. sounds
массив теперь содержит два экземпляра Animal
это соответствует областям, объявленным как Bark
и Meow
ранее.
sounds
sounds = 1×2 string
"Animal" "Animal"
Звуковая таблица только включает области, где заданные звуковые классы были обнаружены.
soundTable
soundTable=2×2 table
TimeStamps Results
________________ ___________
10.658 12.373 {4×3 table}
12.985 16.66 {4×3 table}
Просмотрите последнюю обнаруженную область в soundTable
. Таблица результатов все еще включает статистику для всех обнаруженных звуков в области.
soundTable.Results{end}
ans=4×3 table
Sounds AverageScores MaxScores
________________________ _____________ _________
"Animal" 0.79514 0.99941
"Domestic animals, pets" 0.80243 0.99831
"Cat" 0.8048 0.99046
"Meow" 0.6342 0.90177
Исследовать, какие звуковые классы поддерживаются classifySound
, используйте yamnetGraph
.
Читайте в звуковом сигнале и вызовите classifySound
смотреть наиболее вероятные звуки, расположенные в хронологическом порядке обнаружения.
[audioIn,fs] = audioread("multipleSounds-16-16-mono-18secs.wav");
sounds = classifySound(audioIn,fs)
sounds = 1×5 string
"Stream" "Machine gun" "Snoring" "Bark" "Meow"
Вызовите classifySound
снова и набор ExcludedSounds
к Meow
исключить звуковой Meow
от результатов. Сегмент, ранее классифицированный как Meow
теперь классифицируется как Cat
, который является его мгновенным предшественником в онтологии AudioSet.
sounds = classifySound(audioIn,fs,"ExcludedSounds","Meow")
sounds = 1×5 string
"Stream" "Machine gun" "Snoring" "Bark" "Cat"
Вызовите classifySound
снова, и набор ExcludedSounds
к Cat
. Когда вы исключаете звук, все преемники также исключены. Это означает это, исключая звуковой Cat
также исключает звуковой Meow
. Сегмент, первоначально классифицированный как Meow
теперь классифицируется как Domestic animals, pets
, который является мгновенным предшественником к Cat
в онтологии AudioSet.
sounds = classifySound(audioIn,fs,"ExcludedSounds","Cat")
sounds = 1×5 string
"Stream" "Machine gun" "Snoring" "Bark" "Domestic animals, pets"
Вызовите classifySound
снова и набор ExcludedSounds
к Domestic animals, pets
. Звуковой класс, Domestic animals, pets
предшественник к обоим Bark
и Meow
, таким образом исключением его, звуки, ранее идентифицированные как Bark
и Meow
теперь оба идентифицированы как предшественник Domestic animals, pets
, который является Animal
.
sounds = classifySound(audioIn,fs,"ExcludedSounds","Domestic animals, pets")
sounds = 1×5 string
"Stream" "Machine gun" "Snoring" "Animal" "Animal"
Вызовите classifySound
снова и набор ExcludedSounds
к Animal
. Звуковой класс Animal
не имеет никаких предшественников.
sounds = classifySound(audioIn,fs,"ExcludedSounds","Animal")
sounds = 1×3 string
"Stream" "Machine gun" "Snoring"
Если вы не хотите обнаруживать Meow
и его предшественники, но продолжают обнаруживать преемников при тех же предшественниках, используют IncludedSounds
опция. Вызовите yamnetGraph
получить список всех поддерживаемых классов. Удалите Meow
и его предшественники от массива всех классов, и затем вызывают classifySound
снова.
[~,classes] = yamnetGraph; classesToInclude = setxor(classes,["Meow","Cat","Domestic animals, pets","Animal"]); sounds = classifySound(audioIn,fs,"IncludedSounds",classesToInclude)
sounds = 1×4 string
"Stream" "Machine gun" "Snoring" "Bark"
Читайте в звуковом сигнале и слушайте его.
[audioIn,fs] = audioread('multipleSounds-16-16-mono-18secs.wav');
sound(audioIn,fs)
Вызовите classifySound
без выходных аргументов, чтобы сгенерировать облако слова обнаруженных звуков.
classifySound(audioIn,fs);
Измените параметры по умолчанию classifySound
исследовать эффект на облаке слова.
threshold = 0.1; minimumSoundSeparation = 0.92; minimumSoundDuration = 1.02; classifySound (audioIn, фс, ... 'Threshold''Порог' , ... 'MinimumSoundSeparation', minimumSoundSeparation, ... 'MinimumSoundDuration', minimumSoundDuration);
audioIn
— АудиовходАудиовход в виде сигнала с одним каналом (вектор-столбец).
Типы данных: single
| double
fs
— Частота дискретизации (Гц)Частота дискретизации в Гц в виде положительной скалярной величины.
Типы данных: single
| double
Задайте дополнительные разделенные запятой пары Name,Value
аргументы. Name
имя аргумента и Value
соответствующее значение. Name
должен появиться в кавычках. Вы можете задать несколько аргументов в виде пар имен и значений в любом порядке, например: Name1, Value1, ..., NameN, ValueN
.
'Threshold',0.1
Threshold
— Порог доверия для создания отчетов о звуках
(значение по умолчанию) | скаляр в области значений (0,1)Порог доверия для создания отчетов о звуках в виде разделенной запятой пары, состоящей из 'Threshold'
и скаляр в области значений (0,1).
Типы данных: single
| double
MinimumSoundSeparation
— Минимальное разделение между обнаруженными звуковыми областями (областями)
(значение по умолчанию) | положительная скалярная величинаМинимальное разделение между последовательными областями того же обнаруженного звука в секундах в виде разделенной запятой пары, состоящей из 'MinimumSoundSeparation'
и положительная скалярная величина. Области ближе, чем минимальное звуковое разделение объединены.
Типы данных: single
| double
MinimumSoundDuration
— Минимальная длительность обнаруженной звуковой области (областей)
(значение по умолчанию) | положительная скалярная величинаМинимальная длительность обнаруженных звуковых областей в секундах в виде разделенной запятой пары, состоящей из 'MinimumSoundDuration'
и положительная скалярная величина. Области короче, чем минимальная звуковая длительность отбрасываются.
Типы данных: single
| double
IncludedSounds
— Звуки, чтобы включать в результатыЗвуки, чтобы включать в результаты в виде разделенной запятой пары, состоящей из 'IncludedSounds'
и вектор символов, массив ячеек из символьных векторов, строковый скаляр или массив строк. Использование yamnetGraph
смотреть и анализировать звуки, поддержанные classifySound
. По умолчанию все поддерживаемые звуки включены.
Эта опция не может использоваться с '
опция.ExcludedSounds
'
Типы данных: char |
string
| cell
ExcludedSounds
— Звуки, чтобы исключить из результатовЗвуки, чтобы исключить из результатов в виде разделенной запятой пары, состоящей из 'ExcludedSounds'
и вектор символов, массив ячеек из символьных векторов, строковый скаляр или массив строк. Когда вы задаете исключенный звук, любые преемники исключенного звука также исключены. Использование yamnetGraph
смотреть допустимые звуковые классы и их предшественников и преемников согласно онтологии AudioSet. По умолчанию никакие звуки не исключены.
Эта опция не может использоваться с '
опция.IncludedSounds
'
Типы данных: char |
string
| cell
SpecificityLevel
— Специфика звуков, о которых сообщают,'high'
(значение по умолчанию) | 'low'
| 'none'
Специфика звуков, о которых сообщают, в виде разделенной запятой пары, состоящей из 'SpecificityLevel'
и 'high'
, 'low'
, или 'none'
. Установите SpecificityLevel
к 'high'
заставить функцию подчеркнуть определенные звуковые классы вместо общих категорий. Установите SpecificityLevel
к 'low'
сделать функциональный возврат самыми общими звуковыми категориями вместо определенных звуковых классов. Установите SpecificityLevel
к 'none'
сделать функциональный возврат наиболее вероятным звуком, независимо от его специфики.
Типы данных: char |
string
sounds
— Звуки, обнаруживаемые в зависимости от времени в аудиовходеЗвуки, обнаруживаемые в зависимости от времени в аудиовходе, возвращенном как массив строк, содержащий обнаруженные звуки в хронологическом порядке.
timestamps
— Метки времени сопоставлены с обнаруженными звуками (звуками)Метки времени, сопоставленные с обнаруженными звуками в секундах, возвращенных как N-by-2 матрица. N является количеством обнаруженных звуков. Каждая строка timestamps
содержит времена начала и конца обнаруженной звуковой области.
resultsTable
— Подробные результаты звуковой классификацииПодробные результаты звуковой классификации, возвращенной как таблица. Количество строк в таблице равно количеству обнаруженных звуковых областей. Столбцы следующие.
TimeStamps
– Метки времени, соответствующие каждой анализируемой области.
Results
– Таблица с тремя переменными:
Sounds
– Звуки обнаруживаются в каждой области.
AverageScores
– Средние сетевые баллы, соответствующие каждому обнаруженному звуковому классу в области.
MaxScores
– Максимальные сетевые баллы, соответствующие каждому обнаруженному звуковому классу в области.
classifySound
функционируйте использует YAMNet, чтобы классифицировать аудио сегменты в звуковые классы, описанные онтологией AudioSet. classifySound
функция предварительно обрабатывает аудио так, чтобы это было в формате, требуемом YAMNet, и постобработало предсказания YAMNET с общими задачами, которые делают результаты более поддающимися толкованию.
Передискретизируйте audioIn
к 16 кГц и бросок к одинарной точности.
Буфер в L перекрывающиеся сегменты. Каждый сегмент составляет 0,98 секунды, и сегменты перекрываются на 0,8575 секунды.
Передайте каждый сегмент через одностороннее кратковременное преобразование Фурье с помощью периодического окна Hann на 25 мс с транзитным участком на 10 мс и ДПФ с 512 точками. Аудио теперь представлено 257 96 L массивом, где 257 количество интервалов в односторонних спектрах, и 96 количество спектров в спектрограммах.
Преобразуйте комплексные спектральные значения в величину и отбросьте информацию о фазе.
Передайте односторонний спектр величины через mel-расположенный-с-интервалами набор фильтров с 64 полосами и затем суммируйте величины в каждой полосе. Аудио теперь представлено 96 64 1 L массивом, где 96 количество спектров в mel спектрограмме, 64 количество mel полос, и спектрограммы теперь расположены с интервалами по четвертому измерению для совместимости с моделью YAMNet.
Преобразуйте mel спектрограммы в логарифмическую шкалу.
Передайте 96 64 1 L массивом mel спектрограмм через YAMNet, чтобы возвратить L-by-521 матрица. Выход от YAMNet соответствует оценкам достоверности для каждого из 521 звукового класса в зависимости от времени.
Передайте каждый из 521 сигнала доверия через фильтр скользящего среднего значения с длиной окна 7.
Передайте каждый из сигналов через движущийся средний фильтр с длиной окна 3.
Преобразуйте сигналы доверия в бинарные маски с помощью заданного Threshold
.
Отбросьте любой звук короче, чем MinimumSoundDuration
.
Объедините области, которые ближе, чем MinimumSoundSeparation
.
Консолидируйте идентифицированные звуковые области, которые перекрываются на 50% или больше в одну области. Время начала области является самым маленьким временем начала всех звуков в группе. Время окончания области является самым большим временем окончания всех звуков в группе. Функция возвращает метки времени, классы звуков и среднее и максимальное доверие звуковых классов в области в resultsTable
.
Можно установить уровень специфики звуковой классификации с помощью SpecificityLevel
опция. Например, примите, что существует четыре звуковых класса в звуковой группе со следующими соответствующими средними баллами по звуковой области:
Water
–– 0.82817
Stream
–– 0.81266
Trickle, dribble
–– 0.23102
Pour
–– 0.20732
Звуковые классы, Water
поток
, Trickle, dribble
, и Pour
расположены в онтологии AudioSet, как обозначено графиком:
Функции возвращают звуковой класс для звуковой группы в sounds
выходной аргумент в зависимости от SpecificityLevel
:
"high"
(значение по умолчанию) – В этом режиме, Stream
предпочтен Water
, и Trickle, dribble
предпочтен Pour
поток
имеет более высокий средний счет по области, таким образом, функция возвращает Stream
в sounds
выведите для области.
"low"
– В этом режиме возвращена самая общая онтологическая категория для звукового класса с самым высоким средним доверием по области. Для Trickle, dribble
и Pour
, самой общей категорией является Sounds of things
. Для Stream
и Water
, самой общей категорией является Natural sounds
. Поскольку Water
имеет самое высокое среднее доверие по звуковой области, функция возвращает Natural sounds
.
"none"
– В этом режиме функция возвращает звуковой класс с самой высокой средней оценкой достоверности, которая в этом примере является Water
.
[1] Gemmeke, Джорт Ф., и др. “Аудио Набор: Онтология и Помеченный Человеком Набор данных для Аудио Событий”. 2 017 Международных конференций IEEE по вопросам Акустики, Речи и Обработки сигналов (ICASSP), IEEE, 2017, стр 776–80. DOI.org (Crossref), doi:10.1109/ICASSP.2017.7952261.
[2] Херши, Шон, и др. “Архитектуры CNN для Крупномасштабной Аудио Классификации”. 2 017 Международных конференций IEEE по вопросам Акустики, Речи и Обработки сигналов (ICASSP), IEEE, 2017, стр 131–35. DOI.org (Crossref), doi:10.1109/ICASSP.2017.7952132.
Эта функция полностью поддерживает массивы графического процессора. Для получения дополнительной информации смотрите функции MATLAB Запуска на графическом процессоре (Parallel Computing Toolbox).
У вас есть модифицированная версия этого примера. Вы хотите открыть этот пример со своими редактированиями?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.