acousticLoudness

Воспринятая громкость акустического сигнала

Описание

пример

loudness = acousticLoudness(audioIn,fs) возвращает громкость в сонах согласно ISO 532-1 (Zwicker).

пример

loudness = acousticLoudness(audioIn,fs,calibrationFactor) указывает, что калибровочный фактор микрофона не по умолчанию использовался для расчета громкости.

пример

loudness = acousticLoudness(SPLIn) вычисляет громкость с помощью уровней звукового давления (SPL) полосы октавы одной трети.

пример

loudness = acousticLoudness(___,Name,Value) задает опции с помощью одного или нескольких Name,Value парные аргументы.

Пример: loudness = acousticLoudness(audioIn,fs,'Method','ISO 532-2') возвращает громкость согласно ISO 532-2 (Мур-Глэсберг).

пример

[loudness,specificLoudness] = acousticLoudness(___) также возвращает определенную громкость.

пример

[loudness,specificLoudness,perc] = acousticLoudness(___,'TimeVarying',true) также возвращает громкость процентили.

[loudness,specificLoudness,perc] = acousticLoudness(___,'TimeVarying',true,'Percentiles',p) задает процентили не по умолчанию, чтобы возвратиться.

пример

acousticLoudness(___) без выходных аргументов строит определенную громкость и отображает громкость дословно. Если TimeVarying true, и громкость и определенная громкость построены с последним в 3-D.

Примеры

свернуть все

Измерьте ISO 532-1 стационарная громкость свободного поля. Примите, что уровень записи калибруется таким образом, что тон на 1 кГц указывает как 100 дБ на метре SPL.

[audioIn,fs] = audioread('WashingMachine-16-44p1-stereo-10secs.wav');

loudness = acousticLoudness(audioIn,fs)
loudness = 1×2

   28.2688   27.7643

Создайте два стационарных сигнала с эквивалентной степенью: розовый шумовой сигнал и белый шумовой сигнал.

fs = 48e3;
dur = 5;
pnoise = 2*pinknoise(dur*fs);
wnoise = rand(dur*fs,1) - 0.5;
wnoise = wnoise*sqrt(var(pnoise)/var(wnoise));

Вызовите acousticLoudness использование ISO 532-1 по умолчанию (Zwicker) метод и никакие выходные аргументы, чтобы построить громкость розового шума. Вызовите acousticLoudness снова, на этот раз с выходными аргументами, чтобы получить определенную громкость.

figure
acousticLoudness(pnoise,fs)

[~,pSpecificLoudness] = acousticLoudness(pnoise,fs);

Постройте громкость для белого шумового сигнала и затем получите определенные значения громкости.

figure
acousticLoudness(wnoise,fs)

[~,wSpecificLoudness] = acousticLoudness(wnoise,fs);

Вызовите acousticSharpness функция, чтобы сравнить резкость розового шумового и белого шума.

pSharpness = acousticSharpness(pSpecificLoudness);
wSharpness = acousticSharpness(wSpecificLoudness);
fprintf('Sharpness of pink noise = %0.2f acum\n',pSharpness)
Sharpness of pink noise = 2.00 acum
fprintf('Sharpness of white noise = %0.2f acum\n',wSharpness)
Sharpness of white noise = 2.62 acum

Читайте в звуковом файле.

[audioIn,fs] = audioread('JetAirplane-16-11p025-mono-16secs.wav');

Постройте изменяющуюся во времени акустическую громкость в соответствии с ISO 532-1 и получите процентили. Слушайте звуковой сигнал.

acousticLoudness(audioIn,fs,'SoundField','diffuse','TimeVarying',true)

sound(audioIn,fs)

Вызовите acousticLoudness снова с теми же входными параметрами и получают процентили. Распечатайте Nmax и процентили N5. Процентиль Nmax является максимальной громкостью, о которой сообщают. Процентиль N5 является громкостью, ниже которой 95% громкости, о которой сообщают.

[~,~,perc] = acousticLoudness(audioIn,fs,'SoundField','diffuse','TimeVarying',true);
fprintf('Max loudness = %0.2f sones\n',perc(1))
Max loudness = 89.48 sones
fprintf('N5 loudness = %0.2f sones\n',perc(2))
N5 loudness = 81.77 sones

Читайте в звуковом файле.

[audioIn,fs] = audioread('Turbine-16-44p1-mono-22secs.wav');

Вызовите acousticLoudness без выходных аргументов, чтобы построить определенную громкость. Примите калибровочный фактор 0,15 и ссылочное давление 21 micropascals. Чтобы определить калибровочный фактор, характерный для вашей аудиосистемы, используйте calibrateMicrophone функция.

calibrationFactor = 0.15;
refPressure = 21e-6;
acousticLoudness(audioIn,fs,calibrationFactor,'PressureReference',refPressure)

acousticLoudness позволяет вам задать промежуточное представление, уровни звукового давления, вместо входа временного интервала. Это позволяет вам снова использовать промежуточные вычисления SPL. Другое преимущество состоит в том, что, если ваш физический метр SPL не сообщает о громкости в соответствии с ISO 532-1 или ISO 531-2, можно использовать сообщаемый 1/3-octave SPLs, чтобы вычислить стандартно-совместимую громкость.

Чтобы вычислить уровни звукового давления от звукового сигнала, сначала создайте splMeter объект. Вызовите splMeter объект с аудиовходом.

spl = splMeter("SampleRate",fs,"Bandwidth","1/3 octave", ...
    "CalibrationFactor",calibrationFactor,"PressureReference",refPressure, ...
    "FrequencyWeighting","Z-weighting","OctaveFilterOrder",6);

splMeasurement = spl(audioIn);

Вычислите средний уровень SPL, пропустив первые 0,2 секунды. Только сохраните полосы от 25 Гц до 12,5 кГц (первые 28 полос).

SPLIn = mean(splMeasurement(ceil(0.2*fs):end,1:28));

Используя вход SPL, вызовите acousticLoudness без выходных аргументов, чтобы построить определенную громкость.

acousticLoudness(SPLIn)

Настройте эксперимент, как обозначено схемой.

Создайте audioDeviceReader возразите, чтобы читать из микрофона и audioDeviceWriter возразите, чтобы записать в ваш динамик.

fs = 48e3;
deviceReader = audioDeviceReader(fs);
deviceWriter = audioDeviceWriter(fs);

Создайте audioOscillator объект сгенерировать синусоиду на 1 кГц.

osc = audioOscillator("sine",1e3,"SampleRate",fs);

Создайте dsp.AsyncBuffer возразите, чтобы буферизовать данные, полученные от микрофона.

dur = 5;
buff = dsp.AsyncBuffer(dur*fs);

В течение пяти секунд проигрывайте синусоиду через свой динамик и запись с помощью микрофона. В то время как аудиопотоки, отметьте громкость, как сообщается вашим метром SPL. Однажды завершенный, считайте содержимое буферного объекта.

numFrames = dur*(fs/osc.SamplesPerFrame);
for ii = 1:numFrames
    audioOut = osc();
    deviceWriter(audioOut);
    
    audioIn = deviceReader();
    write(buff,audioIn);
end

SPLreading = 60.4;

micRecording = read(buff);

Чтобы вычислить калибровочный фактор для микрофона, используйте calibrateMicrophone функция.

calibrationFactor = calibrateMicrophone(micRecording,deviceReader.SampleRate,SPLreading);

Вызовите acousticLoudness с записью микрофона, частотой дискретизации и калибровочным фактором. О громкости сообщают от acousticLoudness истинное акустическое измерение громкости, как задано 532-1.

loudness = acousticLoudness(micRecording,deviceReader.SampleRate,calibrationFactor)
loudness = 14.7902

Можно теперь использовать калибровочный фактор, вы решили измерять громкость любого звука, который получен через ту же цепь записи микрофона.

Читайте в звуковом сигнале.

[audioIn,fs] = audioread('TrainWhistle-16-44p1-mono-9secs.wav');

ISO 532-1

Определите изменяющуюся во времени определенную громкость согласно методу по умолчанию (ISO 532-1).

[~,specificLoudness] = acousticLoudness(audioIn,fs,'TimeVarying',true);

ISO 532-1 сообщает об определенной громкости по Коре, где интервалами Коры является 0.1:0.1:24. Преобразуйте интервалы Коры в Гц и затем постройте определенную громкость по Гц через время.

barkBins = 0.1:0.1:24;
hzBins = bark2hz(barkBins);

t = 0:2e-3:2e-3*(size(specificLoudness,1)-1);
surf(t,hzBins,sum(specificLoudness,3).','EdgeColor','interp')
set(gca,'YScale','log')
view([0 90])
axis tight
xlabel('Time (s)')
ylabel('Frequency (Hz)')
colorbar
title('Specific Loudness (sones/Bark)')

ISO 532-2

Определите стационарную определенную громкость согласно методу Мура-Глэсберга (ISO 532-2).

[~,specificLoudness] = acousticLoudness(audioIn,fs,'Method','ISO 532-2');

ISO 532-2 сообщает об определенной громкости по шкале ERB, где интервалами ERB является 1.8:0.1:38.9. Модуль шкалы ERB иногда упоминается как Бегунок. Преобразуйте интервалы ERB в Гц и затем постройте определенную громкость.

erbBins = 1.8:0.1:38.9;
hzBins = erb2hz(erbBins);

semilogx(hzBins,specificLoudness)
xlabel('Frequency (Hz)')
ylabel('Loudness (sones)')
title('Specific Loudness')
grid on

Читайте в звуковом файле.

[x,fs] = audioread('WashingMachine-16-44p1-stereo-10secs.wav');

ISO 532-2 позволяет вам задать пользовательский ответ наушника при вычислении громкости. Создайте 30 2 матрица, где первый столбец является частотой, и второй столбец является отклонением наушника от плавного ответа.

tdh = [   0,    80,   100,  200,  500,  574,  660,  758,  871, 1000, 1149,  1320,  1516,  1741,  2000, ...
       2297,  2639,  3031, 3482, 4000, 4500, 5000, 5743, 6598, 7579, 8706, 10000, 12000, 16000, 20000; ...
        -50, -15.3, -13.8, -8.1, -0.5,  0.4,  0.8,  0.9,  0.5,  0.1, -0.8,  -1.5,  -2.3,  -3.2,  -3.9, ...
       -4.2,  -4.3,  -4.3, -3.9, -3.2, -2.3, -1.1, -0.3,   -2, -5.4,   -9, -12.1, -15.2,   -30,   -50 ].';

Вычислите громкость с помощью ISO 532-2. Задайте SoundField как earphones и ответ наушника как матрица вы только создали.

acousticLoudness(x,fs,'Method','ISO 532-2','SoundField','earphones','EarphoneResponse',tdh)

Создайте dsp.AudioFileReader возразите, чтобы читать в покадровом звуковом сигнале. Задайте длительность системы координат 50 мс. Это будет длительностью системы координат, по которой вы вычисляете стационарную громкость.

fileReader = dsp.AudioFileReader('Engine-16-44p1-stereo-20sec.wav');

frameDur = 0.05;
fileReader.SamplesPerFrame = round(fileReader.SampleRate*frameDur);

Создайте audioDeviceWriter возразите, чтобы записать аудио в ваше устройство вывода по умолчанию.

deviceWriter = audioDeviceWriter('SampleRate',fileReader.SampleRate);

Создайте dsp.TimeScope возразите, чтобы отображать стационарную громкость в зависимости от времени.

scope = dsp.TimeScope( ...
    'SampleRate',1/frameDur, ...
    'YLabel','Loudness (sones)', ...
    'ShowGrid',true, ...
    'ReduceUpdates',false, ...
    'PlotType','Stairs', ...
    'TimeSpanSource','property', ...
    'TimeSpan',20, ...
    'AxesScaling','Auto', ...
    'ShowLegend',true);

В цикле:

  1. Считайте систему координат из звукового файла.

  2. Вычислите стационарную громкость той системы координат.

  3. Проигрывайте звук через свое устройство вывода.

  4. Запишите громкость в осциллограф.

while ~isDone(fileReader)
    audioIn = fileReader();
    loudness = acousticLoudness(audioIn,fileReader.SampleRate);
    deviceWriter(audioIn);
    scope(loudness)
end
release(fileReader)
release(deviceWriter)
release(scope)

Входные параметры

свернуть все

Аудиовход в виде (моно) вектор-столбца или матрица с двумя столбцами (стерео).

Типы данных: single | double

Частота дискретизации в Гц в виде положительной скалярной величины. Рекомендуемая частота дискретизации для новых записей составляет 48 кГц.

Типы данных: single | double

Калибровочный фактор микрофона в виде положительной скалярной величины. Калибровочный фактор по умолчанию соответствует полномасштабной синусоиде на 1 кГц с уровнем звукового давления 100 дБ (SPL). Чтобы вычислить калибровочный фактор, характерный для вашей системы, используйте calibrateMicrophone функция.

Типы данных: single | double

Уровень звукового давления (SPL) в дБ в виде 1 28 C массивом или 1 29 C массивом, в зависимости от Method:

  • Если Method установлен в 'ISO 532-1', задайте SPLIn когда 1 28 C массивом, где 28 соответствует полосам с одной третьей октавой между 25 Гц и 12,5 кГц, и C, является количеством каналов.

  • Если Method установлен в 'ISO 532-2', задайте SPLIn когда 1 29 C массивом, где 29 соответствует полосам с одной третьей октавой между 25 Гц и 16 кГц, и C, является количеством каналов.

Для обоих методов вход SPL должен быть измерен с плоским взвешиванием частоты (Z-взвешивание).

Типы данных: single | double

Аргументы в виде пар имя-значение

Задайте дополнительные разделенные запятой пары Name,Value аргументы. Name имя аргумента и Value соответствующее значение. Name должен появиться в кавычках. Вы можете задать несколько аргументов в виде пар имен и значений в любом порядке, например: Name1, Value1, ..., NameN, ValueN.

Пример: acousticLoudness(audioIn,fs,'Method','ISO 532-2')

Метод расчета громкости в виде 'ISO 532-1' [1] или 'ISO 532-2' [2].

Примечание

Только в методе ISO 532-1, о выходе сообщают для каждого канала независимо, и стационарные сигналы обрабатываются после отбрасывания до первых 0,2 секунд сигнала при выходе внутреннего, 1/3-octave фильтрует.

Типы данных: char | string

Вход является изменяющимся во времени в виде true или false.

Зависимости

Установить TimeVarying к true, необходимо установить Method к 'ISO 532-1'.

Типы данных: логический

Звуковое поле аудиозаписи в виде вектора символов или скалярной строки. Возможные значения для SoundField зависьте от Method:

  • 'ISO 532-1''free'рассеянный

  • 'ISO 532-2''free'рассеянный, 'eardrum', 'earphones'

Типы данных: char | string

Ответ наушника в виде M-by-2 матрица, содержащая пары амплитуды частоты M, которые описывают отклонения наушника от плавного ответа. Форма столь же задана в ISO 11904-1:2002 файл коррекции наушника. Задайте частоту в увеличивающемся порядке в Гц. Задайте амплитудное отклонение в децибелах. Промежуточные значения вычисляются линейной интерполяцией. Значения из данной области значений установлены к самой близкой амплитудной частотой паре. Значение по умолчанию соответствует плавному ответу.

Зависимости

Задавать EarphoneResponse, необходимо установить SoundField к 'earphones'.

Типы данных: single | double

Ссылочное давление для вычисления дБ в pascals в виде положительной скалярной величины. Значением по умолчанию, 20 micropascals, является общая ценность для воздуха.

Зависимости

PressureReference только используется во входных сигналах временного интервала.

Типы данных: single | double

Процентили, в которых можно вычислить громкость процентили в виде вектора со значениями в области значений [0, 100]. Значения по умолчанию, 0 и 5, соответствуйте N макс. и N 5 процентилей, соответственно [1].

Громкость процентили относится к громкости, которая достигнута или превышена в % X измеренных временных интервалов, где X является заданной процентилью.

Типы данных: single | double

Выходные аргументы

свернуть все

Громкость в сонах, возвращенных как K-by-1 вектор-столбец или K-by-2 матрица независимых каналов. Если TimeVarying установлен в false, K равен 1. Если Method установлен в 'ISO 532-2', затем loudness вычисляется с помощью бинауральной модели и всегда возвращается как K-by-1 вектор-столбец.

Определенная громкость, возвращенная как K-by-240-by-C массив или K-by-372-by-C массив. Первая размерность определенной громкости, K, совпадает с первой размерностью loudness. Третья размерность определенной громкости, C, совпадает со вторым измерением loudness. Второе измерение определенной громкости зависит от Method используемый, чтобы вычислить громкость:

  • Если Method установлен в 'ISO 532-1', затем об определенной громкости сообщают в сонах/Коре по шкале от 0,1 до 24, включительно, с 0,1 шагом.

  • Если Method установлен в 'ISO 532-2', затем об определенной громкости сообщают в сонах/Бегунке по шкале от 1,8 до 38,9, включительно, с 0,1 шагом.

Громкость процентили в сонах, возвращенных как p-by-1 вектор или p-by-2 матрица. Количество строк, p, равно количеству Percentiles.

Громкость процентили относится к громкости, которая достигнута или превышена в % X измеренных временных интервалов, где X является заданной процентилью.

Зависимости

Выходной аргумент процентилей допустим только если TimeVarying установлен в true. Если TimeVarying установлен в false, perc выход пуст.

Алгоритмы

свернуть все

Громкость и уровень громкости являются перцепционными атрибутами звука. Из-за различий среди людей, измерения уровня громкости и громкости должны быть рассмотрены статистическими средствами оценки. Ряд ISO 532 задает процедуры для оценки громкости и уровня громкости, как воспринято людьми с онтологическим образом нормальным слушанием при определенных условиях слушания.

ISO 532-1 и ISO 532-2 задают два различных метода для вычисления громкости, но предоставляют пользователю право выбирать соответствующий метод для данной ситуации.

ISO, 532-1:2017 (E) – метод Zwicker

ISO, 532-1:2017 (E), описывает методы для вычисления акустической громкости стационарных и изменяющихся во времени сигналов.

Стационарные сигналы

Этот метод основан на DIN 45631:1991. Алгоритм отличается от ISO 532:1975, метод B, путем определения коррекций для низких частот.

Audio passes through the following stages: level calibration, conversion to
              1/3-Octave SPL, low-frequency deemphasis and power summation, level correction and
              conversion to core loudness, conversion to Bark bins, frequency spreading correction,
              and finally integration over the specific loudness.

Схема и шаги предоставляют общий обзор последовательности метода. Для получения дополнительной информации см. [1].

  1. Уровень сигнала временной области настроен согласно CalibrationFactor. Следующие шаги алгоритма принимают истинный известный уровень сигнала.

  2. Сигнал преобразовывается к 1/3 представлению SPL октавы с помощью дробной фильтрации полосы октавы. Набор фильтров состоит из 28 фильтров между от 25 Гц до 12,5 кГц. Выход от этого этапа находится в дБ и нормирован ссылочным давлением.

  3. Низкая частота 1/3 полосы октавы преуменьшена роль согласно фиксированной таблице взвешивания. Некоторые низкочастотные полосы объединены, чтобы сформировать в общей сложности 20 критических полос.

  4. Уровни критических полос корректируются для пропускной способности фильтра и критического уровня полосы в пороге тихих, и затем преобразовываются к базовой громкости.

  5. Базовая громкость сопоставлена с интервалами Коры.

  6. Распространение частоты вычисляется с помощью таблицы уровня - и зависимые частотой наклоны.

  7. Громкость вычисляется как интеграл определенной громкости, учитывая распространяющие частоту наклоны.

Изменяющиеся во времени сигналы

Этот метод основан на DIN 45631/A1:2010 и спроектирован, чтобы правильно симулировать зависимое длительностью поведение восприятия громкости для коротких импульсов. Метод для изменяющихся во времени звуков является обобщением подхода Zwicker к стационарным сигналам. Если обобщенная версия применяется к стационарным звукам, она дает те же значения громкости как необобщенную форму для стационарных сигналов.

Audio passes through the following stages: level calibration, conversion to
              1/3-Octave SPL, Filtering of SPL variation, low-frequency deemphasis and power
              summation, level correction and conversion to core loudness, modeling of nonlinear
              temporal decay, conversion to Bark bins, frequency spreading correction, temporal
              weighting, and finally integration over the specific loudness.

Схема и шаги предоставляют общий обзор последовательности метода. Для получения дополнительной информации см. [1].

  1. Уровень сигнала временной области настроен согласно CalibrationFactor. Следующие шаги алгоритма принимают истинный известный уровень сигнала.

  2. Сигнал преобразовывается к 1/3 представлению SPL октавы с помощью дробной фильтрации полосы октавы. Набор фильтров состоит из 28 фильтров между от 25 Гц до 12,5 кГц. Выход от этого этапа находится в дБ и нормирован ссылочным давлением.

  3. Полосы SPL сглаживаются вдоль времени согласно зависимым полосой фильтрам.

  4. Низкая частота 1/3 полосы октавы преуменьшена роль согласно фиксированной таблице взвешивания. Некоторые низкочастотные полосы объединены, чтобы сформировать в общей сложности 20 критических полос.

  5. Уровни критических полос корректируются для пропускной способности фильтра и критического уровня полосы в пороге тихих, и затем преобразовываются к базовой громкости.

  6. Нелинейное временное затухание симулировано с помощью диодной конденсаторной резисторной схемы. Это моделирует крутое перцепционное отбрасывание после коротких сигналов когда по сравнению с длинными сигналами.

  7. Базовая громкость сопоставлена с интервалами Коры.

  8. Распространение частоты вычисляется с помощью таблицы уровня - и зависимые частотой наклоны.

  9. Временное взвешивание применяется, чтобы симулировать зависимость длительности восприятия громкости.

  10. Громкость вычисляется как интеграл определенной громкости, учитывая распространяющие частоту наклоны.

ISO, 532-2:2017 (E) – метод Мура-Глэсберга

ISO, 532-2:2017 (E), описывает бинауральную модель для вычисления акустической громкости стационарных сигналов. Метод в ISO 523-2 отличается от тех по ISO 532:1975: это улучшает расчетную громкость в низкочастотной области значений, и бинауральная модель допускает различные звуки для каждого уха. ISO 532-2 предоставляет хорошее соответствие равным контурам уровня громкости, заданным в ISO 226:2003 и пороге слышимости, заданном в 389-7:2005 ISO.

Audio passes through level calibration, and then the following stages are applied to
            each channel in the binaural model: a model of the tympanic membrane, a model of the
            middle ear, and then a model of the cochlea. Excitation is then mapped to specific
            loudness. Finally, the channels are combined using a binaural inhibition model, and the
            specific loudness is integrated to output loudness.

Схема и шаги предоставляют общий обзор последовательности метода. Для получения дополнительной информации см. [2].

  1. Уровень сигнала временной области настроен согласно CalibrationFactor. Следующие шаги алгоритма принимают истинный известный уровень сигнала.

  2. Сигнал преобразовывается к спектральному представлению. Спектральное представление преобразовывается согласно фиксированным фильтрам, представляющим передачу звука через tympanic мембрану (барабанная перепонка). Спектр масштабируется согласно ссылочному давлению.

  3. Сигнал преобразовывается с помощью модели внутреннего уха. Снова, передаточная функция дана фиксированным фильтром, заданным в стандарте. Выбор фильтра зависит от заданного звукового поля.

  4. Сигнал преобразовывается от звукового спектра до шаблона возбуждения в основной мембране. Преобразование выполняется с помощью ряда распространения фильтров округленного экспоненциала по шкале ERB.

  5. Шаблон возбуждения преобразован в определенную громкость.

  6. Определенная громкость передается через модель бинарного ингибирования, где сигнал в одном ухе запрещает громкость, вызванную сигналом в другом ухе. Выход от этого этапа является определенной громкостью в sones/ERB.

  7. Определенная громкость интегрирована по шкале ERB, чтобы дать громкость в сонах.

Ссылки

[1] ISO, 532-1:2017 (E). "Акустика – Методы для вычисления громкости – Часть 1: метод Zwicker". Международная организация по стандартизации.

[2] ISO, 532-2:2017 (E). "Акустика – Методы для вычисления громкости – Часть 2: метод Мура-Глэсберга. Международная организация по стандартизации.

Расширенные возможности

Генерация кода C/C++
Генерация кода C и C++ с помощью MATLAB® Coder™.

Введенный в R2020a