acousticSharpness

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

Описание

пример

sharpness = acousticSharpness(audioIn,fs) возвращает резкость в acum согласно DIN 45692 [2] и ISO, 532-1:2017 (E) [1].

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

пример

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

пример

sharpness = acousticSharpness(specificLoudnessIn) вычисляет резкость с помощью определенной громкости.

пример

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

Пример: sharpness = acousticSharpness(audioIn,fs,calibrationFactor,'SoundField','diffuse') возвращает резкость, принимающую рассеянное звуковое поле.

пример

acousticSharpness(___,TimeVarying,true) без выходных аргументов строит резкость относительно времени.

Примеры

свернуть все

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

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

sharpness = acousticSharpness(audioIn,fs,'SoundField','diffuse');

fprintf('Acoustic sharpness = %0.2f acum\n',sharpness)
Acoustic sharpness = 1.11 acum

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

[audioIn,fs] = audioread('RockDrums-48-stereo-11secs.mp3');

Постройте изменяющуюся во времени резкость сигнала. Слушайте сигнал.

acousticSharpness(audioIn,fs,'TimeVarying',true)

sound(audioIn,fs)

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

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

Создайте розовый шумовой сигнал с частотой дискретизации на 48 кГц и длительностью 5 секунд.

fs = 48e3;
n = fs*5;
pnoise = pinknoise(n);

Задайте вектор, чтобы развернуться по диапазону дБ от-60 до 20. Создайте вектор усиления, который, когда умножено на исходный сигнал, приводит к сигналу с желаемым уровнем на выходе.

dBSweep = -60:10:20;
coefSweep = sqrt((10.^(dBSweep/10))/var(pnoise));

Вызовите acousticSharpness в цикле с различными уровнями сигнала. Определите резкость с помощью взвешивания частоты DIN 45692 по умолчанию и взвешивания частоты Aures.

sharpnessDIN45692 = zeros(numel(dBSweep),1);
sharpnessAures = zeros(numel(dBSweep),1);
for ii = 1:numel(dBSweep)
    signal = pnoise*coefSweep(ii);
    sharpnessDIN45692(ii) = acousticSharpness(signal,fs);
    sharpnessAures(ii) = acousticSharpness(signal,fs,'Weighting','Aures');
end

Отобразите эффект уровня на входе на акустической резкости. Метод взвешивания частоты Aures более чувствителен к уровню на входе.

plot(dBSweep,sharpnessDIN45692,dBSweep,sharpnessAures)
legend('Weighting = DIN45692','Weighting = Aures')
xlabel('Input Level (dB)')
ylabel('Sharpness (acum)')
title('Effect of Input Level on Sharpness')
axis([dBSweep(1) dBSweep(end) 0 20])
grid on

Читайте в двух звуковых файлах: одна из электрогитары с искажением и одна из акустической гитары. Оба звуковых файла имеют частоту дискретизации 44,1 кГц. Для легкого сравнения преобразуйте сигнал рок-гитары в моно и сократите мягкий сигнал гитары к длине сигнала рок-гитары.

fs = 44.1e3;
rockGuitar = audioread('RockGuitar-16-44p1-stereo-72secs.wav');
softGuitar = audioread('SoftGuitar-44p1_mono-10mins.ogg');
rockGuitar = mean(rockGuitar,2);
softGuitar = softGuitar(1:numel(rockGuitar));

Вычислите изменяющуюся во времени резкость и для рок-гитары и для мягкой гитары.

rGSharpness = acousticSharpness(rockGuitar,fs,'TimeVarying',true);
sGSharpness = acousticSharpness(softGuitar,fs,'TimeVarying',true);

Постройте вероятностное распределение на основе наблюдаемой резкости рок-гитары и мягкой гитары.

histogram(rGSharpness,'Normalization','probability')
hold on
histogram(sGSharpness,'Normalization','probability')
legend('Electric Guitar','Soft Guitar')
xlabel('Sharpness (acum)')
ylabel('Probability')
title('Time-Varying Acoustic Sharpness (DIN 45692)')

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

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

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

spl = splMeter("SampleRate",fs,"Bandwidth","1/3 octave", ...
    "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));

Чтобы определить акустическую резкость звукового сигнала, вызовите acousticSharpness использование уровня звукового давления вводится.

sharpness = acousticSharpness(SPLIn)
sharpness = 1.1015

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

свернуть все

Аудиовход в виде (моно) вектор-столбца или матрица с двумя столбцами (стерео). Резкость вычисляется для каждого канала (столбец) независимо.

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

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

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

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

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

Уровень звукового давления (SPL) в дБ в виде 1 28 C массивом. 28 соответствует полосам с одной третьей октавой между 25 Гц и 12,5 кГц. C является количеством каналов.

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

Определенная громкость в сонах/Коре в виде T-by-240-by-C массив, где:

  • T 1 для стационарных сигналов или один на 0,5 мс для изменяющихся во времени сигналов.

  • 240 количество интервалов Коры в области для определенной громкости. Интервалами Коры является 0.1:0.1:24.

  • C является количеством каналов.

Можно использовать acousticLoudness функция, чтобы вычислить specificLoudnessIn использование этого синтаксиса:

[~,specificLoudnessIn] = acousticLoudness(audioIn,fs);

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

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

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

Пример: acousticSharpness(audioIn,fs,'Weighting','von Bismarck')

Взвешивание частоты в виде 'DIN 45692', 'Aures', или 'von Bismarck'. Проектом, 'Aures' метод взвешивания частоты более чувствителен к амплитудным уровням и соответствующей калибровке. Для получения дополнительной информации см. Алгоритмы.

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

Звуковое поле аудиозаписи в виде 'free' или 'diffuse'.

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

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

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

Вход является изменяющимся во времени в виде true или false. Если TimeVarying установлен в true, акустическая резкость вычисляется в интервалах на 2 мс.

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

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

свернуть все

Акустическая резкость в acum, возвращенном как скаляр, вектор или матрица. Резкость вычисляется согласно DIN 45692 и ISO 532-1.

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

Алгоритмы

Акустическая резкость является измерением, выведенным из акустической громкости. Акустический алгоритм громкости описан в [1] и реализован в acousticLoudness функция. Акустическое вычисление резкости описано в [2]. Алгоритм для акустической резкости обрисован в общих чертах можно следующим образом.

sharpness=k(z=024N'(z)g(z)zdzz=024N'(z)dz)

Где N' является определенной громкостью в сонах/Коре. Функциональный g (z) и масштабный коэффициент k зависит от заданного Weighting метод:

'DIN 45692': k установлен таким образом, что ссылка на 1 кГц настраивает результаты в 1 acum измерении резкости, и

g(z)=1дляz15.8Кораg(z)=0.15e0.42(z15.8)+0.85дляz>15.8Кора

'von Bismark': k установлен в 0.11, и

g(z)=1дляz15Кораg(z)=0.2e0.308(z15)+0.8дляz>15Кора

'Aures': k установлен в 0.11, и

g(z)=0.078(e0.171zz)(Nln(0.05N+1))гдеN=z=024N'(z)dz

Ссылки

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

[2] DIN 45692:2009. "Техника измерений для симуляции слуховой сенсации резкости". Немецкий институт стандартизации.

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

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

Введенный в R2020a