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 микропаскалей и калибровку уровня записи так, чтобы тон 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, Eberhard, and Hugo Fastl. Психоакустика: факты и модели. Том 22. Springer Science & Business Media, 2013.

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

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

Создайте 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 и смещение постоянного тока как 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.

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

fs = 48e3;

fMod = 200;
dur = 5;

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

tone = sin (2 * pi * t * fMod) ';

fc = 1500;
excursionRatio = 0.47;

экскурсия = 2 * pi * (fc * excursionRatio/fs);
audioIn = модулируется (тональный сигнал, fc, fs,'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.

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

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

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

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

osc = audioОсциллятор ('sine', fMod ,...
    "DCOffset",0.5, ...
    "Amplitude", амплитуда ,...
    "SampleRate", fileReader. SampleRate, ...
    "SamplesPerFrame", fileReader. SamplesPerFrame);

testSignal = [];
while ~ isDone (fileReader)
    x = fileReader ();
    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

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

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

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

свернуть все

Прочность на шероховатость в аспере, возвращаемая как K вектор-на-1 или K-на-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 аспера как тон 1 кГц на 60 дБ с 100% амплитудной модуляцией на 70 Гц [3]. Алгоритм описан следующим образом:

roughness=calz=024fmodΔLdz

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

Ссылки

[1] Zwicker, Eberhard, and Hugo Fastl. Психоакустика: факты и модели. Том 22. Springer Science & Business Media, 2013.

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

[3] Калафата, Стаматина. «Уровни звука, идентификация источника шума и перцепционный анализ в модуле интенсивной терапии». Магистерская диссертация, Гетеборгский университет, 2014 год.

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

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