Стандартно-совместимые измерения громкости
loudnessMeter
Система object™ вычисляет громкость, область значений громкости и истинный пик звукового сигнала в соответствии с EBU R 128 и ITU-R стандарты BS.1770-4.
Реализовывать измерение громкости:
Создайте loudnessMeter
объект и набор его свойства.
Вызовите объект с аргументами, как будто это была функция.
Чтобы узнать больше, как Системные объекты работают, смотрите то, Что Системные объекты? MATLAB.
loudMtr = loudnessMeter
создает Системный объект, loudMtr
, это выполняет громкость, измеряющую независимо через каждый входной канал.
loudMtr = loudnessMeter(
наборы каждое свойство Name,Value
)Name
к заданному Value
. Незаданные свойства имеют значения по умолчанию.
loudMtr = loudnessMeter('ChannelWeights',[1.2, 0.8],'SampleRate',12000)
создает Системный объект, loudMtr
, с весами канала 1,2 и 0.8, и частота дискретизации 12 кГц.Если в противном случае не обозначено, свойства являются ненастраиваемыми, что означает, что вы не можете изменить их значения после вызова объекта. Объекты блокируют, когда вы вызываете их и release
функция разблокировала их.
Если свойство является настраиваемым, можно изменить его значение в любое время.
Для получения дополнительной информации об изменении значений свойств смотрите Разработку системы в MATLAB Используя Системные объекты (MATLAB).
ChannelWeights
— Линейное взвешивание применилось к каждому входному каналу
(значение по умолчанию) | неотрицательный вектор-строкаЛинейное взвешивание применилось к каждому входному каналу, заданному как вектор-строка из неотрицательных значений. Число элементов в векторе-строке должно быть равным или больше, чем количество входных каналов. Проигнорированы избыточные значения в векторе.
Веса канала по умолчанию следуют стандарту BS.1170-4 ITU-R. Чтобы использовать веса канала по умолчанию, задайте каналы входного сигнала как матрицу в этом порядке: [Левый, Правильный, Центральный, Левый окружают, Право окружают].
Как лучшая практика, задайте ChannelWeights
свойство в порядке: [Левый, Правильный, Центральный, Левый окружают, Право окружают].
Настраиваемый: да
Типы данных: single
| double
UseRelativeScale
— Используйте относительный масштаб в измерениях громкостиfalse
(значение по умолчанию) | true
Используйте относительный масштаб в измерениях громкости, заданных как логический скаляр.
false
– Измерения громкости являются абсолютными и возвращены в полном масштабе единиц громкости (LUFS).
true
– Измерения громкости относительно TargetLoudness
значение и возвратилось в единицах громкости (LU).
Настраиваемый: нет
Типы данных: логический
TargetLoudness
— Целевой уровень громкости для относительного масштаба (LUFS)
(значение по умолчанию) | действительный скалярЦелевой уровень громкости для относительного масштаба в LUFS, заданном как действительный скаляр.
Например, если TargetLoudness
–23 LUFS, затем о значении громкости –23 LUFS сообщают как 0 LU.
Настраиваемый: да
Чтобы включить это свойство, установите UseRelativeScale
к true
.
Типы данных: single
| double
SampleRate
— Введите частоту дискретизации (Гц)
(значение по умолчанию) | положительная скалярная величинаВведите частоту дискретизации в Гц, заданном как положительная скалярная величина.
Настраиваемый: да
Типы данных: single
| double
[
возвращает значения измерения для мгновенной и краткосрочной громкости входа к вашему метру громкости и истинное пиковое значение текущего входного кадра, momentary
,shortTerm
,integrated
,range
,peak
] = loudMtr(audioIn
)audioIn
. Это также возвращает интегрированную область значений громкости и громкости входа к вашему метру громкости с прошлого раза reset
был назван.
audioIn
— Аудиовход к метру громкостиАудиовход к метру громкости, заданному как матрица. Столбцы матрицы обработаны как независимые звуковые каналы.
Если вы используете ChannelWeights
по умолчанию из
loudnessMeter
, как лучшая практика, задайте входные каналы в этом порядке: [Левый, Правильный, Центральный, Левый окружают, Право окружают].
Типы данных: single
| double
momentary
— Мгновенная громкость (LUFS)Мгновенная громкость в единицах громкости относительно полного масштаба (LUFS), возвращенный как вектор-столбец с одинаковым числом строк как audioIn
.
По умолчанию измерения громкости возвращены в LUFS. Если вы устанавливаете UseRelativeScale
свойство к true
, измерения громкости возвращены в единицах громкости (LU).
Типы данных: single
| double
shortTerm
— Краткосрочная громкость (LUFS)Краткосрочная громкость в единицах громкости относительно полного масштаба (LUFS), возвращенный как вектор-столбец с одинаковым числом строк как audioIn
.
По умолчанию измерения громкости возвращены в LUFS. Если вы устанавливаете UseRelativeScale
свойство к true
, измерения громкости возвращены в единицах громкости (LU).
Типы данных: single
| double
integrated
— Интегрированная громкость (LUFS)Интегрированная громкость в единицах громкости относительно полного масштаба (LUFS), возвращенный как вектор-столбец с одинаковым числом строк как audioIn
.
По умолчанию измерения громкости возвращены в LUFS. Если вы устанавливаете UseRelativeScale
свойство к true
, измерения громкости возвращены в единицах громкости (LU).
Типы данных: single
| double
range
— Область значений громкости (LU)Область значений громкости в единицах громкости (LU), возвращенных как вектор-столбец с одинаковым числом строк как audioIn
.
Типы данных: single
| double
peak
— Истинно-пиковая громкость (dB-TP)Истинно-пиковая громкость в dB-TP, возвращенном как вектор-столбец с одинаковым числом строк как audioIn
.
Типы данных: single
| double
Чтобы использовать объектную функцию, задайте Системный объект как первый входной параметр. Например, чтобы выпустить системные ресурсы Системного объекта под названием obj
, используйте этот синтаксис:
release(obj)
loudnessMeter
visualize | Открытое 'отображение метра' Режима EBU |
clone | Создайте объект дублированной системы |
isLocked | Определите, используется ли Системный объект |
release | Высвободите средства и позвольте изменения в значениях свойств Системного объекта и введите характеристики |
reset | Сбросьте внутренние состояния Системного объекта |
step | Запустите алгоритм Системного объекта |
Создайте dsp.AudioFileReader
Система object™, чтобы читать в звуковом файле. Создайте loudnesMeter
Системный объект. Используйте частоту дискретизации звукового файла как частота дискретизации loudnessMeter
.
fileReader = dsp.AudioFileReader('RockDrums-44p1-stereo-11secs.mp3'); loudMtr = loudnessMeter('SampleRate',fileReader.SampleRate);
Читайте в звуковом файле в цикле аудиопотока. Используйте метр громкости, чтобы определить мгновенную, краткосрочную, и интегрированную громкость звукового сигнала. Кэшируйте измерения громкости для анализа.
momentary = []; shortTerm = []; integrated = []; while ~isDone(fileReader) x = fileReader(); [m,s,i] = loudMtr(x); momentary = [momentary;m]; shortTerm = [shortTerm;s]; integrated = [integrated;i]; end release(fileReader)
Постройте мгновенную, краткосрочную, и интегрированную громкость звукового сигнала.
t = linspace(0,11,length(momentary)); plot(t,[momentary,shortTerm,integrated]) title('Loudness Measurements') legend('Momentary','Short-term','Integrated') xlabel('Time (seconds)') ylabel('LUFS')
Создайте читателя звукового файла и средство записи аудио устройства.
fileReader = dsp.AudioFileReader('FunkyDrums-44p1-stereo-25secs.mp3', ... 'SamplesPerFrame',1024); fs = fileReader.SampleRate; deviceWriter = audioDeviceWriter('SampleRate',fs);
Создайте осциллограф времени, чтобы визуализировать ваш цикл аудиопотока.
timeScope = dsp.TimeScope('NumInputPorts',2, ... 'SampleRate',fs, ... 'TimeSpanOverrunAction','Scroll', ... 'LayoutDimensions',[2,1], ... 'TimeSpan',5, ... 'BufferLength',5*fs); % Top subplot of scope timeScope.Title = 'Momentary Loudness'; timeScope.YLabel = 'LUFS'; timeScope.YLimits = [-40, 0]; % Bottom subplot of scope timeScope.ActiveDisplay = 2; timeScope.Title = 'Loudness Range'; timeScope.YLabel = 'LU'; timeScope.YLimits = [-1, 2];
Создайте метр громкости. Используйте частоту дискретизации своего входного файла как частота дискретизации вашего метра громкости. Вызовите visualize
открыть визуализацию 'EBU-режима' для вашего метра громкости.
loudMtr = loudnessMeter('SampleRate',fs);
visualize(loudMtr)
В цикле аудиопотока:
Читайте в своем звуковом файле.
Вычислите мгновенную область значений громкости и громкости.
Визуализируйте мгновенную область значений громкости и громкости на своем осциллографе времени.
Проигрывайте звуковой сигнал.
Визуализация метра громкости 'EBU-режима' обновляется автоматически, в то время как это открыто. Как лучшая практика, выпустите свое средство чтения файлов и средство записи устройства, если цикл завершается.
while ~isDone(fileReader) audioIn = fileReader(); [momentaryLoudness,~,~,LRA] = loudMtr(audioIn); timeScope(momentaryLoudness,LRA); deviceWriter(audioIn); end release(fileReader) release(deviceWriter)
Создайте читателя звукового файла, чтобы читать в звуковом файле. Создайте средство записи аудио устройства, чтобы записать звуковой файл в ваше аудио устройство. Используйте частоту дискретизации своего средства чтения файлов как частота дискретизации вашего средства записи устройства.
fileReader = dsp.AudioFileReader('Counting-16-44p1-mono-15secs.wav',... 'SamplesPerFrame',1024); fs = fileReader.SampleRate; deviceWriter = audioDeviceWriter('SampleRate',fs);
Создайте метр громкости с целевым набором громкости к -23
по умолчанию LUFS. Откройте визуализацию метра громкости 'EBU-режима'.
loudMtr = loudnessMeter('UseRelativeScale',true);
visualize(loudMtr)
Создайте осциллограф времени, чтобы визуализировать ваш звуковой сигнал и его измеренную относительную мгновенную и краткосрочную громкость.
scope = dsp.TimeScope( ... 'NumInputPorts',3, ... 'SampleRate',fs, ... 'TimeSpanOverrunAction','Scroll', ... 'TimeSpan',5, ... 'BufferLength',5*fs, ... 'Title','Audio Signal, Momentary Loudness, and Short-Term Loudness', ... 'ChannelNames',{'Audio signal','Momentary loudness','Short-term loudness'}, ... 'YLimits',[-16,16], ... 'YLabel','Amplitude / LU', ... 'ShowLegend',true);
В цикле аудиопотока слушайте и визуализируйте звуковой сигнал.
while ~isDone(fileReader) x = fileReader(); [momentary,shortTerm] = loudMtr(x); scope(x,momentary,shortTerm) deviceWriter(x); end release(deviceWriter) release(fileReader)
loudnessMeter
Системный объект вычисляет мгновенную громкость, краткосрочную громкость, интегрированную громкость, область значений громкости (ЛРА) и истинное пиковое значение звукового сигнала. Можно задать любое количество каналов и весов канала не по умолчанию, используемых в измерениях громкости. loudnessMeter
алгоритм описан для общего случая каналов n с весами канала по умолчанию.
Входные каналы, x, проходят через weightingFilter
K-weighted. Фильтр K-weighted формирует спектр частоты, чтобы отразить воспринятую громкость.
Каналы K-weighted, y, разделены на 0,4 вторых сегмента с 0,3 вторыми перекрытиями. Если необходимое количество выборок еще не было собрано, loudnessMeter
Системный объект возвращает последние вычисленные значения для мгновенной и интегрированной громкости. Если достаточно выборок было собрано, то степень (среднее квадратичное) каждого сегмента каналов K-weighted вычисляется:
mPi является мгновенной степенью i th сегмент.
w является длиной сегмента в выборках.
Мгновенная громкость, mL, вычисляется в LUFS для каждого сегмента:
Gc является взвешиванием для канала c.
mL является мгновенной громкостью, возвращенной вашим loudnessMeter
Системный объект. Это также используется внутренне, чтобы вычислить интегрированную громкость (шаги 3-6).
Интегрированное измерение громкости рассматривает звуковой сигнал начиная с последнего сброса вашего метра громкости. Чтобы вычислить интегрированную громкость, мгновенная степень передается через систему пропускания. Система логического элемента приостанавливает измерение в периоды низкого звука, такие как фрагменты тишины в фильме.
Мгновенный сегмент степени пропускается с помощью соответствующего мгновенного вычисления сегмента громкости:
mPj кэшируется до вашего loudnessMeter
сбрасывается.
Мгновенное подмножество степени, mPj, проходит через относительный пороговый логический элемент.
Относительный порог, Γ, вычисляется:
lc является средней мгновенной степенью канала c:
Мгновенное подмножество степени, mPj, пропускается с помощью относительного порога Γ:
Относительный порог повторно вычисляется во время каждого вызова вашего loudnessMeter
объект. Кэшируемые значения mPj пропускаются снова в зависимости от обновленного значения Γ.
Мгновенные сегменты степени усреднены:
Интегрированная громкость вычисляется в LUFS путем передачи средней мгновенной степени, P, через Вычислить систему Громкости:
Каналы K-weighted, y, разделены на 3-секундные сегменты с 2,9 вторыми перекрытиями. Если необходимое количество выборок еще не было собрано, loudnessMeter
Системный объект возвращает последние вычисленные значения для краткосрочной области значений громкости и громкости. Если достаточно выборок было собрано, то степень (среднее квадратичное) каждого канала K-weighted вычисляется:
sPi является краткосрочной степенью i th сегмент канала.
w является длиной сегмента в выборках.
Краткосрочная громкость, sL, вычисляется в LUFS для каждого сегмента:
Gc является взвешиванием для канала c.
sL является краткосрочной громкостью, возвращенной вашим loudnessMeter
Системный объект. Это также используется внутренне, чтобы вычислить область значений громкости (шаги 3-5).
Краткосрочная громкость пропускается с помощью абсолютного порога:
sLj кэшируется до вашего loudnessMeter
сбрасывается.
Краткосрочное подмножество громкости, sLj проходит через относительный пороговый логический элемент.
Закрытая краткосрочная громкость преобразована назад в линейный, и затем среднее значение взято:
Относительный порог, K, вычисляется:
Краткосрочное подмножество громкости, sLj, пропускается с помощью относительного порога:
Относительный порог, K, повторно вычисляется во время каждого вызова вашего loudnessMeter
объект. Кэшируемые значения sLj пропускаются снова в зависимости от обновленного значения K.
Краткосрочное подмножество громкости, sLk, сортируется. Область значений громкости вычисляется как между 10-ми и 95-ми процентилями распределения и возвращена в единицах громкости (LU).
Истинно-пиковое измерение рассматривает только текущий входной кадр вызова вашего метра громкости.
Сигнал сверхдискретизирован по крайней мере к 192 кГц. Чтобы оптимизировать обработку, входная частота дискретизации определяет точную сверхдискретизацию. Входная частота дискретизации ниже 750 Гц не рассматривается.
Введите частоту дискретизации (кГц) | Сверхдискретизируйте фактор |
---|---|
[0.75, 1.5) | 256 |
[1.5, 3) | 128 |
[3, 6) | 64 |
[6,12) | 32 |
[12, 24) | 16 |
[24, 48) | 8 |
[48, 96) | 4 |
[96,192) | 2 |
[192, ∞) | Не требуемый |
Сверхдискретизированный сигнал, a, проходит через фильтр lowpass с полумногофазной длиной 12 и затуханием в полосе задерживания 80 дБ. Создание фильтра использует designMultirateFIR
.
Отфильтрованный сигнал, b, исправлен и преобразован в шкалу TP дБ:
Истинный пик определяется как максимум конвертированного сигнала, c.
[1] Международный союз электросвязи; сектор радиосвязи. Алгоритмы, чтобы измерить аудио громкость программы и истинно-пиковый уровень звука. ITU-R BS.1770-4. 2015.
[2] Европейский вещательный союз. Нормализация громкости и разрешенный максимальный уровень звуковых сигналов. EBU R 128. 2014.
[3] Европейский вещательный союз. Измерение громкости: 'Режим EBU', измеряющий, чтобы добавить нормализацию EBU R 128 громкости. Технология EBU R 128 3341. 2014.
[4] Европейский вещательный союз. Область значений громкости: мера, чтобы добавить нормализацию EBU R 128 громкости. Технология EBU R 128 3342. 2016.
Указания и ограничения по применению:
Системные объекты в Генерации кода MATLAB (MATLAB Coder)
Блок Supports MATLAB Function: Нет
Динамическое выделение памяти не должно быть выключено.
У вас есть модифицированная версия этого примера. Вы хотите открыть этот пример со своими редактированиями?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.