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)

Figure contains an axes. The axes with title Time-Varying Sharpness (DIN 45692) contains 2 objects of type line. These objects represent Channel 1, Channel 2.

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)

Figure contains an axes. The axes with title Specific Loudness {\itN'} (ISO 532-1) contains 2 objects of type line, text.

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

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

figure
acousticLoudness(wnoise,fs)

Figure contains an axes. The axes with title Specific Loudness {\itN'} (ISO 532-1) contains 2 objects of type line, text.

[~,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

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

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

Figure contains an axes. The axes with title Effect of Input Level on Sharpness contains 2 objects of type line. These objects represent Weighting = DIN45692, Weighting = Aures.

Читайте в двух аудио файлов: один из электрогитары с искажениями и один из акустической гитары. Обе аудио файлов имеют частоту дискретизации 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)')

Figure contains an axes. The axes with title Time-Varying Acoustic Sharpness (DIN 45692) contains 2 objects of type histogram. These objects represent Electric Guitar, Soft Guitar.

Чтение в аудио файла.

[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.1020

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

свернуть все

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

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

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

Примечание

Минимальная допустимая частота дискретизации составляет 8 кГц.

Типы данных: 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 для стационарных сигналов или одним на 2 мс для изменяющихся во времени сигналов.

  • 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

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

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

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

Типы данных: logical

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

свернуть все

Акустическая резкость в 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 акум, и

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: Метод Цвиккера». Международная организация по стандартизации.

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

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

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

.
Введенный в R2020a