exponenta event banner

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-by-28-by-C. 28 соответствует одной третьей октавной полосе между 25 Гц и 12,5 кГц. C - количество каналов.

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

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

  • Т 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]. Алгоритм акустической резкости представлен следующим образом.

резкость = k (∫z=024N '(z) g (z) z dz∫z=024N' (z) dz)

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

'DIN 45692': k устанавливается таким образом, что эталонный тон 1 кГц приводит к измерению резкости 1 acum, и

g (z) =1forz≤15.8 Баркг (z) = 0 .15e0.42 (z 15,8) + 0 .85форц > 15,8 Барк

'von Bismark': k имеет значение 0.11, и

g (z) =1forz≤15 Баркг (z) = 0 .2e0.308 (z 15) + 0 .8форц > 15 Барк

'Aures': k имеет значение 0.11, и

g (z) = 0,078 (e0.171zz) (Nln (0 .05N + 1)) whereN=∫z=024N '(z) dz

Ссылки

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

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

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

Создание кода C/C + +
Создайте код C и C++ с помощью MATLAB ® Coder™

.
Представлен в R2020a