acousticRoughness

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

Описание

пример

roughness = acousticRoughness(audioIn,fs) возвращает силу шероховатости в Асперсе на основе Zwicker [1] и ISO 532-1 изменяющаяся во времени громкость [2].

пример

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

пример

roughness = acousticRoughness(specificLoudnessIn) вычисляет шероховатость с помощью изменяющейся во времени определенной громкости с высоким разрешением.

пример

roughness = acousticRoughness(___,Name,Value) задает опции с помощью одного или нескольких Имя, аргументы пары Значения. Например, roughness = acousticRoughness(audioIn,fs,'SoundField','diffuse') возвращает шероховатость, принимающую рассеянное звуковое поле.

[roughness,specificRoughness] = acousticRoughness(___) также возвращает определенную силу шероховатости.

[roughness,specificRoughness,fMod] = acousticRoughness(___) также возвращает доминирующую частоту модуляции, обнаруженную алгоритмом.

пример

acousticRoughness(___) без выходных аргументов строит силу шероховатости и определенную силу шероховатости и отображает частоту модуляции дословно. Если audioIn стерео, 3-D график показывает сумму обоих каналов.

Примеры

свернуть все

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

Читайте в звуковом файле стерео и преобразуйте в моно.

[audioInStereo,fs] = audioread('Engine-16-44p1-stereo-20sec.wav');
audioIn = (audioInStereo(:,1) + audioInStereo(:,2)) / 2;

Вычислите акустическую шероховатость на моно звуковом сигнале и отобразите среднее значение.

roughness = acousticRoughness(audioIn,fs);
meanRoughness = mean(roughness);
displayOutput = ['Average computed value of acoustic roughness is ',num2str(meanRoughness),' aspers.'];
disp(displayOutput)
Average computed value of acoustic roughness is 0.13358 aspers.

Ссылки

[1] Zwicker, Эберхард и Хьюго Фэстл. Психоакустика: факты и модели. Издание 22. Springer Science & Business Media, 2013.

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

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

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

fs = 48e3;
deviceReader = audioDeviceReader(fs,"SamplesPerFrame",2048);
deviceWriter = audioDeviceWriter(fs);

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

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

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

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

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

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

SPLreading = 69.7;

micRecording = read(buff);

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

calibrationFactor = calibrateMicrophone(micRecording(fs+1:end),deviceReader.SampleRate,SPLreading);

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

Выполните эксперимент снова путем добавления 100%-й амплитудной модуляции на уровне 40 Гц. Чтобы создать сигнал модуляции, используйте audioOscillator возразите и задайте амплитуду как 0.5 и смещение DC как 0.5 колебаться между 0 и 1.

mod = audioOscillator("sine",40,"SampleRate",fs, ...
    "Amplitude",0.5,"DCOffset",0.5,"SamplesPerFrame",2048);

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

micRecording = read(buff);

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

roughness = acousticRoughness(micRecording,deviceReader.SampleRate,calibrationFactor);
fprintf('Average roughness = %d (asper)',mean(roughness(2001:end,:)))
Average roughness = 4.992723e-01 (asper)
acousticRoughness(micRecording,deviceReader.SampleRate,calibrationFactor)

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

[audioIn,fs] = audioread("Engine-16-44p1-stereo-20sec.wav");

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

[~,specificLoudnessHD] = acousticLoudness(audioIn,fs,'TimeVarying',true,'TimeResolution','high');

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

specificLoudness = specificLoudnessHD(1:4:end,:,:);
acousticSharpness(specificLoudness,'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.

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

acousticRoughness(specificLoudnessHD)

Figure contains 2 axes and another object of type subplottext. Axes 1 with title \rm{\itfMod} = \{ 49.7, 49.7 \} Hz contains 2 objects of type line. These objects represent Channel 1, Channel 2. Axes 2 contains an object of type surface.

Сгенерируйте чистый тон с центральной частотой на 1 500 Гц и отклонением частоты на приблизительно 700 Гц на частоте модуляции 200 Гц.

fs = 48e3;

fMod = 200;
dur = 5;

numSamples = dur*fs;
t = (0:numSamples-1) / фс;

настройте = sin (2*pi*t*fMod)';

ФК = 1500;
excursionRatio = 0.47;

отклонение = 2*pi* (fc*excursionRatio/fs);
audioIn = модулируют (тон, ФК, фс,'fm', отклонение);

Слушайте аудио и постройте спектрограмму первых 10 мс.

sound(audioIn,fs)
spectrogram(audioIn(1:0.01*fs),hann(64,'periodic'),63,1024,fs,'yaxis')

Figure contains an axes. The axes contains an object of type image.

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

acousticRoughness(audioIn,fs);

Figure contains 2 axes and another object of type subplottext. Axes 1 with title \rm{\itfMod} = 200.0 Hz contains an object of type line. Axes 2 contains an object of type surface.

acousticRoughness функция позволяет вам задать известную частоту шероховатости. Если вы не задаете известную частоту шероховатости, функциональное автоматическое опознавание шероховатость.

Создайте dsp.AudioFileReader возразите, чтобы читать в покадровом звуковом сигнале. Создайте audioOscillator объект создать волну модуляции. Примените волну модуляции к звуковому файлу.

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

fMod = 72.41;
амплитуда = 0.5;

osc = audioOscillator ('sine', fMod, ...
    "DCOffset",0.5, ...
    "Amplitude", амплитуда, ...
    "SampleRate", fileReader.SampleRate, ...
    "SamplesPerFrame", fileReader.SamplesPerFrame);

testSignal = [];
while ~isDone (средство чтения файлов)
    x = средство чтения файлов ();
    testSignal = [testSignal; osc ().*fileReader ()];
end

Слушайте 2 секунды тестового сигнала и постройте его форму волны.

samplesToView = 1:2*fileReader.SampleRate;
sound(testSignal(samplesToView,:),fileReader.SampleRate);

plot(samplesToView/fileReader.SampleRate,testSignal(samplesToView,:))
xlabel('Time (s)')

Figure contains an axes. The axes contains 2 objects of type line.

Постройте акустическую шероховатость. Обнаруженная частота модуляции отображена дословно.

acousticRoughness(testSignal,fileReader.SampleRate);

Figure contains 2 axes and another object of type subplottext. Axes 1 with title \rm{\itfMod} = \{ 72.4, 72.4 \} Hz contains 2 objects of type line. These objects represent Channel 1, Channel 2. Axes 2 contains an object of type surface.

Задайте известную частоту модуляции и затем постройте акустическую шероховатость снова.

acousticRoughness(testSignal,fileReader.SampleRate,'ModulationFrequency',fMod)

Figure contains 2 axes and another object of type subplottext. Axes 1 with title \rm{\itfMod} = \{ 72.4, 72.4 \} Hz contains 2 objects of type line. These objects represent Channel 1, Channel 2. Axes 2 contains an object of type surface.

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

свернуть все

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

Совет

Чтобы измерить силу шероховатости, учитывая любую частоту модуляции, рекомендуемая минимальная длительность сигнала составляет 0,5 секунды.

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

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

Примечание

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

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

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

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

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

  • T 1 на 0,5 мс изменяющегося во времени сигнала (громкость высокого разрешения).

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

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

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

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

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

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

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

Пример: acousticRoughness(audioIn,fs,'ModulationFrequency',100)

Известная частота модуляции в Гц в виде разделенной запятой пары, состоящей из 'ModulationFrequency' и скалярный или двухэлементный вектор со значениями в области значений [1,1000].

Установите ModulationFrequency к:

  • 'auto-detect' когда это необходимо, функция, чтобы обнаружить частоту модуляции автоматически. Когда вы выбираете эту опцию, функция ограничивает поисковую область значений между 10 и 400 Гц.

  • скаляр, если вход моно.

  • скалярный или двухэлементный вектор, если вход является стерео.

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

Звуковое поле аудиозаписи в виде разделенной запятой пары 'SoundField' и 'free' или 'diffuse'.

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

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

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

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

свернуть все

Сила шероховатости в asper, возвращенном как K-by-1 вектор-столбец или K-by-2 матрица независимых каналов. K соответствует измерению времени.

Примечание

О шероховатости сообщают для каждого канала независимо в каждом интервале на 0,5 мс.

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

Определенная сила шероховатости в asper/Bark, возвращенном как K-by-47 матрица или K-by-47-by-2 массив. Первая размерность specificRoughness, K, соответствует измерению времени и совпадает с первой размерностью roughness. Второе измерение specificRoughness, 47, соответствует полосам по шкале Коры, с центрами в области значений [0.5, 23.5], с шагом 0,5. Третья размерность specificRoughness соответствует количеству каналов и совпадает со вторым измерением roughness.

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

Доминирующая частота модуляции в Гц, возвращенном как скаляр для моно входа или вектор 1 на 2 для стереовхода.

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

Алгоритмы

Акустическая сила шероховатости является перцепционным измерением модуляций в амплитуде или частоте, которые слишком высоки, чтобы различить отдельно. Акустический алгоритм громкости описан в [2] и реализован в acousticLoudness функция. Акустическое вычисление шероховатости описано в [1]. Алгоритм для акустической шероховатости задает шероховатость 1 asper как тон на 1 кГц на уровне 60 дБ с 100%-й амплитудной модуляцией на уровне 70 Гц [3]. Алгоритм обрисован в общих чертах можно следующим образом:

roughness=calz=024fmodΔLdz

Где mod f является обнаруженной или известной частотой модуляции, cal является постоянной шероховатостью единицы обеспечения опорного сигнала, и ΔL является воспринятой глубиной модуляции. Если частота модуляции не задана при вызове acousticRoughness, это автоматически обнаруживается выбором пика представление частотного диапазона акустической громкости. Воспринятая глубина модуляции ΔL вычисляется путем передачи, исправил определенные полосы громкости через ½ фильтра октавы, сосредоточенные вокруг mod f, сопровождаемого фильтром lowpass, чтобы определить конверт.

Ссылки

[1] Zwicker, Эберхард и Хьюго Фэстл. Психоакустика: факты и модели. Издание 22. Springer Science & Business Media, 2013.

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

[3] Kalafata, Stamatina. "Уровни звука, Идентификация Источника шума и Перцепционный Анализ в Отделении интенсивной терапии". Магистерская диссертация, Университет Гетеборга, 2014.

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

Введенный в R2021a