acousticFluctuation

Воспринимаемая сила флуктуации акустического сигнала

Описание

пример

fluctuation = acousticFluctuation(audioIn,fs) возвращает силу колебаний в вакууме на основе Zwicker et al. [1] и ISO 532-1 изменяющаяся во времени громкость [2].

пример

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

пример

fluctuation = acousticFluctuation(specificLoudnessIn) вычисляет колебания с помощью изменяющейся во времени конкретной громкости.

пример

fluctuation = acousticFluctuation(___,Name,Value) задает опции с использованием одного или нескольких Name,Value аргументы в виде пар.

Пример: fluctuation = acousticFluctuation(audioIn,fs,'SoundField','diffuse') возвращает флуктуацию, принимая диффузное звуковое поле.

[fluctuation,specificFluctuation] = acousticFluctuation(___) также возвращает удельную силу колебаний.

[fluctuation,specificFluctuation,fMod] = acousticFluctuation(___) также возвращает доминирующую частоту модуляции.

пример

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

Примеры

свернуть все

Измерьте акустические колебания на основе Zwicker et al [2] и ISO 532-1 [1]. Предположим, что уровень записи калиброван так, что тональный сигнал 1 кГц регистрируется как 100 дБ на SPL-метре.

[audioIn,fs] = audioread('WashingMachine-16-44p1-stereo-10secs.wav');

fluctuation = acousticFluctuation(audioIn,fs);

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

Создайте 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);

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

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

SPLreading = 60.4;

micRecording = read(buff);

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

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

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

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

mod = audioOscillator("sine",4,"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);

Функции acousticFluctuation с записью микрофона, частотой дискретизации и коэффициентом калибровки. Колебания, о которых сообщили acousticFluctuation использует истинное акустическое измерение громкости, заданное в 532-1. Отобразите среднюю силу колебаний за 5 секунд.

fluctuation = acousticFluctuation(micRecording,deviceReader.SampleRate,calibrationFactor);
fprintf('Average fluctuation = %d (vacil)',mean(fluctuation(501:end,:)))
Average fluctuation = 1.413824e+00 (vacil)
acousticFluctuation(micRecording,deviceReader.SampleRate,calibrationFactor)

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

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

Функции acousticLoudness чтобы вычислить конкретную громкость.

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

Функции acousticSharpness без выходных выходов для построения графика акустической резкости.

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.

Функции acousticFluctuation без выходных выходов для построения графика акустических колебаний.

acousticFluctuation(specificLoudness)

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

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

fs = 48e3;

fMod = 0.25;
dur = 20;

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', экскурсия);

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

sound(audioIn(1:5*fs),fs)
spectrogram(audioIn(1:5*fs),hann(512,'periodic'),256,1024,fs,'yaxis')

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

Функции acousticFluctuation без выходных аргументов для построения графика силы акустических колебаний.

acousticFluctuation(audioIn,fs);

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

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

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

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

fmod = 10.8;
амплитуда = 0.15;

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

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

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.

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

acousticFluctuation(testSignal,fileReader.SampleRate);

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

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

acousticFluctuation(testSignal,fileReader.SampleRate,'ModulationFrequency',fmod)

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

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

свернуть все

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

Совет

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

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

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

Примечание

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

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

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

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

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

  • T является одним на 2 мс изменяющегося во времени сигнала.

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

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

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

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

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

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

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

Пример: acousticFluctuation(audioIn,fs,'ModulationFrequency',50)

Известная частота модуляции в Гц, заданная либо 'auto-detect' или как скалярный или двухэлементный вектор со значениями в области значений [0.1,100]. Если ModulationFrequency установлено в 'auto-detect'тогда функция ограничивает область значений поиска от 0,2 до 64 Гц. Если вход моно, то частота модуляции должна быть задана как скаляр. Если вход стерео, то частота модуляции может быть задана как скалярный или двухэлементный вектор.

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

Звуковое поле аудиозаписи, заданное как 'free' или 'diffuse'.

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

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

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

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

свернуть все

Сила колебаний в vacil, возвращенная как K вектор-на-1 или K-на-2 матрица независимых каналов. K соответствует временной размерности.

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

Удельная сила колебаний в vacil/Bark, возвращаемая как K -by-47 матрица или K -by-47-by-2 массив. Первая размерность specificFluctation, K, соответствует временной размерности и соответствует первой размерности fluctuation. Второе измерение specificFluctation, 47, соответствует полосам по шкале Барка, с центрами от 0,5 до 23,5 включительно, с шагом 0,5. Третья размерность specificFluctation соответствует количеству каналов и соответствует второму измерению fluctuation.

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

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

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

Алгоритмы

Сила акустических колебаний является перцептивным измерением медленных модуляций в амплитуде или частоте. Алгоритм акустической громкости описан в [1] и реализован в acousticLoudness функция. Расчет акустических колебаний описан в [2]. Алгоритм для акустических колебаний описан следующим образом.

fluctuation=0.008z=024ΔLdz(fmod4)+(4fmod)

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

Ссылки

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

[2] Zwicker, Eberhard, and H. Fastl. Психоакустика: факты и модели. 2-е обновление, Springer, 1999.

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

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

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