exponenta event banner

acousticRoughness

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

Описание

пример

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

пример

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

пример

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

пример

roughness = acousticRoughness(___,Name,Value) указывает параметры, использующие один или несколько аргументов пары 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] Цвикер, Эберхард и Хьюго Фасл. Психоакустика: Факты и модели. Том 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;

excursion = 2*pi*(fc*excursionRatio/fs);
audioIn = modulate(tone,fc,fs,'fm',excursion);

Прослушайте звук и постройте спектрограмму первых 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;
amplitude = 0.5;

osc = audioOscillator('sine',fMod, ...
    "DCOffset",0.5, ...
    "Amplitude",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

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

свернуть все

Прочность шероховатости в 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=cal∫z=024fmod ΔL dz

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

Ссылки

[1] Цвикер, Эберхард и Хьюго Фасл. Психоакустика: Факты и модели. Том 22. Springer Science & Business Media, 2013.

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

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

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

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