exponenta event banner

Влияние звукоизоляции на воспринимаемые уровни шума

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

Калибровка уровня регистрации

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

Моделирование записи тональных сигналов и включение некоторого фонового шума. Предположим, что значение счетчика SPL составляет 83,1 дБ (взвешено по C).

FS = 48e3;
t = (1:2*FS)/FS;
s = rng('default');
testTone = 0.46*sin(2*pi*t*1000).' + .1*pinknoise(2*FS);
rng(s)

splMeterReading = 83.1;

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

calib = calibrateMicrophone(testTone,FS,splMeterReading,"FrequencyWeighting","C-weighting");

Уровни звукового давления (SPL)

После получения калибровочного коэффициента для записывающей цепочки можно выполнять акустические измерения. При использовании физического счетчика настройки, выбранные во время измерения, ограничены. С помощью splMeter после записи можно изменить настройки. Это позволяет легко экспериментировать с различными вариантами взвешивания времени и частоты.

Загрузите модуль записи и создайте соответствующий вектор времени.

[x,FS] = audioread('Engine-16-44p1-stereo-20sec.wav');
x = x(1:8*FS,1); % use only channel 1 and keep only 8 seconds.
t = (1:size(x,1))/FS;

Создание splMeter и выберите С-взвешивание, быстрое взвешивание времени и интервал 0,2 секунды для пикового измерения SPL.

spl = splMeter("CalibrationFactor",calib, ...
               "FrequencyWeighting","C-weighting", ...
               "TimeWeighting","Fast", ...
               "TimeInterval",0.2, ...
               "SampleRate",FS);

Постройте график SPL и пикового SPL.

[LCF,~,LCpeak] = spl(x);
plot(t,LCpeak,t,LCF)
legend('LCpeak','LCF','Location',"southeast")
title('SPL Measurement of Engine Noise')
xlabel('Time (seconds)')
ylabel('SPL (dB)')
ylim([70 95])
grid on

Figure contains an axes. The axes with title SPL Measurement of Engine Noise contains 2 objects of type line. These objects represent LCpeak, LCF.

Психоакустические показатели

Уровень громкости

Контроль SPL важен для соблюдения требований техники безопасности на производстве. Однако измерения SPL не отражают громкость, воспринимаемую фактическим слушателем. acousticLoudness измеряет уровни громкости, воспринимаемые человеком-слушателем с нормальным слухом (без нарушений слуха). acousticLoudness функция также показывает, какие полосы частот вносят наибольший вклад в восприятие громкости.

Используя тот же уровень калибровки, что и ранее, и предполагая запись в свободном поле (по умолчанию), постройте график стационарной громкости.

acousticLoudness(x,FS,calib)

Figure contains an axes. The axes with title Specific Loudness {\itN'} (ISO 532-1) contains 2 objects of type line, text.

Громкость 23,8 звука, и большая часть шума ниже 3,3 (шкала Барка). Преобразование коры 3,3 в Гц с помощью bark2hz

fprintf("Loudness frequency of 3.3 Bark: %d Hz\n",round(bark2hz(3.3),-1));
Loudness frequency of 3.3 Bark: 330 Hz

acousticLoudness функция возвращает воспринимаемую громкость в звуках. Чтобы понять измерение sone, сравните его с показанием SPL (дБ). Сигнал с громкостью 60 фонов воспринимается таким же громким, как тон 1 кГц, измеренный при 60 дБ SPL. Преобразование 23.8 sones в phons с помощью sone2phon демонстрирует громкость восприятия шума двигателя так же громко, как и тон 1 кГц, измеренный при 86 дБ SPL.

fprintf("Equivalent 1 kHz SPL: %d phons\n", round(sone2phon(23.8)));
Equivalent 1 kHz SPL: 86 phons

Сделайте свой собственный график с единицами в фонах и частотой в Гц по логарифмической шкале.

[sone,spec] = acousticLoudness(x,FS,calib);
barks = 0.1:0.1:24; % Bark scale for ISO 532-1 loudness
hz = bark2hz(barks);
specPhon = sone2phon(spec);
semilogx(hz,specPhon)
title('Specific Loudness')
subtitle(sprintf('Loudness = %.1f phons',sone2phon(sone)))
xlabel('Frequency (Hz)')
ylabel('Loudness (phons/Bark)')
xlim(hz([1,end]))
grid on

Figure contains an axes. The axes with title Specific Loudness contains an object of type line.

Можно также построить график изменяющейся во времени громкости и определенной громкости для анализа звука движка, если он изменяется со временем. Это может быть отображено с другими соответствующими изменяющимися во времени данными, такими как обороты двигателя в минуту (обороты в минуту). При этом шум неподвижен, но можно наблюдать импульсивный характер шума.

acousticLoudness(x,FS,calib,'TimeVarying',true,'TimeResolution','high')

Figure contains 2 axes and another object of type subplottext. Axes 1 contains an object of type line. Axes 2 contains an object of type surface.

Постройте график удельной громкости с частотой в Гц (логарифмическая шкала).

[tvsoneHD,tvspecHD,perc] = acousticLoudness(x,FS,calib,'TimeVarying',true,'TimeResolution','high');
tvspec = tvspecHD(1:4:end,:,:); % for standard resolution measurements
spectimeHD = 0:5e-4:5e-4*(size(tvspecHD,1)-1); % time axis for loudness output
clf; % do not reuse the previous subplot
surf(spectimeHD,hz,sone2phon(tvspecHD).','EdgeColor','interp');
set(gca,'View',[0 90],'YScale','log','YLim',hz([1,end]));
title('Specific Loudness (HD)')
zlabel('Specific Loudness (phons/Bark)')
ylabel('Frequency (Hz)')
xlabel('Time (seconds)')
colorbar

Figure contains an axes. The axes with title Specific Loudness (HD) contains an object of type surface.

Уровень резкости

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

sharp = acousticSharpness(spec)
sharp = 1.1512

Розовый шум имеет остроту 2 акума. Это означает, что шум двигателя смещен в сторону низких частот.

Постройте график изменяющейся во времени резкости.

acousticSharpness(x,FS,calib,'TimeVarying',true);

Figure contains an axes. The axes with title Time-Varying Sharpness (DIN 45692) contains an object of type line.

Сила флуктуации

В случае шума двигателя низкочастотные модуляции вносят вклад в уровень воспринимаемого раздражения.

Во-первых, посмотрите, какие частоты модуляции присутствуют в сигнале.

N = 2^nextpow2(size(x,1));
xa = abs(x); % Use the rectified signal
pspectrum(xa-mean(xa),FS,'FrequencyLimits',[0 80],'FrequencyResolution',1)
title('Modulation Frequencies')

Figure contains an axes. The axes with title Modulation Frequencies contains an object of type line.

Частота модуляции достигает пика при 24,9 Гц. Ниже 30 Гц модуляция воспринимается преимущественно как флуктуация. Имеется второй пик при 49,7 Гц, который находится в диапазоне шероховатости.

Использовать acousticFluctuation для вычисления воспринимаемой интенсивности флуктуации. Шум двигателя является относительно постоянным в этой записи, поэтому алгоритм автоматически обнаруживает наиболее слышимую частоту флуктуации (fMod).

acousticFluctuation(x,FS,calib)

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

Интерпретируйте результаты в Герце вместо Барка. Для уменьшения вычислений повторно используйте ранее вычисленную изменяющуюся во времени определенную громкость. Кроме того, можно указать интересующую частоту модуляции.

[vacil,spec,fMod] = acousticFluctuation(tvspec,'ModulationFrequency',24.9);
clf; % do not reuse previous subplot
flucHz = bark2hz(0.5:0.5:23.5);
spectime = 0:2e-3:2e-3*(size(spec,1)-1);
surf(spectime,flucHz,spec.','EdgeColor','interp');
set(gca,'View',[0 90],'YScale','log','YLim',flucHz([1,end]));
title('Specific Flucutation Strength')
zlabel('Specific Flucutation Strength (vacils/Bark)')
ylabel('Frequency (Hz)')
xlabel('Time (seconds)')
colorbar

Figure contains an axes. The axes with title Specific Flucutation Strength contains an object of type surface.

Грубость

Используйте acousticRoughness функция для вычисления воспринимаемой шероховатости сигнала. Разрешить алгоритму автоматически обнаруживать наиболее слышимую частоту модуляции (fMod).

acousticRoughness(x,FS,calib)

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

Интерпретируйте результаты в Герце вместо Барка. Для уменьшения вычислений повторно используйте ранее вычисленную изменяющуюся во времени определенную громкость. Укажите частоту модуляции.

[asper,specR,fModR] = acousticRoughness(tvspecHD,'ModulationFrequency',49.7);
clf; % do not reuse previous subplot
rougHz = bark2hz(0.5:0.5:23.5);
surf(spectimeHD,rougHz,specR.','EdgeColor','interp');
set(gca,'View',[0 90],'YScale','log','YLim',rougHz([1,end]));
title('Specific Roughness')
zlabel('Specific Roughness (aspers/Bark)')
ylabel('Frequency (Hz)')
xlabel('Time (seconds)')
colorbar

Figure contains an axes. The axes with title Specific Roughness contains an object of type surface.

Качество звука

Для общей оценки качества звука объедините предыдущие метрики, чтобы создать метрику психоакустического раздражения (определенную Цвиккером и Фастлом). Соотношение выглядит следующим образом:

PA∼N (1 + [g1 (S)] 2 + [g2 (F, R)] 2)

Количественное описание было разработано с использованием результатов психоакустических экспериментов:

PA = N5 (1 + wS2 + wFR2)

с:

  • N5 процентильная громкость в соне (уровень, превышающий только 5% времени)

  • wS = (S-1.75) (0.25⋅log10 (N5 + 10)) для S > 1,75, где S - резкость в acum

  • wFR = 2,18 (N5) 0,4 (0.4⋅F+0.6⋅R), где F - сила флуктуации в вакууме, а R - шероховатость в аспере

В этом примере резкость была меньше 1,75, поэтому она не является фактором, способствующим. Поэтому можно установить ws в ноль.

Процентильная громкость, N5, является вторым значением, возвращаемым третьим выходом acousticLoudness когда "TimeVarying" имеет значение true.

N5 = perc(2);

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

f = mean(vacil(501:end,1));

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

r = mean(asper(2001:end,1));

Вычислите метрику психоакустической раздраженности.

pa = N5 * (1 + abs(2.18/(N5^.4)*(.4*f+.6*r)))
pa = 25.8848

Эффект улучшенной звукоизоляции

Измерьте влияние улучшенной звукоизоляции на измеренный SPL и воспринимаемый шум.

Моделирование с использованием банка графических EQ-фильтров

Проектирование a graphicEQ обеспечение возможности моделирования затухания предлагаемой звукоизоляции. Низкие частоты труднее ослабить, поэтому мы создаем модель, которая лучше всего превышает 200 Гц.

geq = graphicEQ("Bandwidth","1 octave","SampleRate",FS,"Gains",[-0.5 -1.25 -3.4 -7 -8.25 -8.4 -8 -7 -6.4 -5.6]);
cf = getCenterFrequencies(splMeter("Bandwidth","1 octave"));

Отображение частотной характеристики graphicEQ объект.

[B,A] = coeffs(geq);
sos = [B;[ones(1,size(A,2));A]].';
[H,w] = freqz(sos,2^16,FS);
semilogx(w,db(abs(H)))
title('Frequency Response of Soundproofing Simulation Filter')
ylabel('Relative SPL (dB)')
xlabel('Frequency (Hz)')
xlim(cf([1,end]))
grid on

Figure contains an axes. The axes with title Frequency Response of Soundproofing Simulation Filter contains an object of type line.

Фильтрация записи двигателя с помощью графического EQ для моделирования звукоизоляции.

x2 = geq(x);

Сравните SPL со звукоизоляцией и без нее. Повторно используйте те же настройки счетчика SPL, но используйте отфильтрованную запись.

reset(spl)
[LCFnew,~,LCpeaknew] = spl(x2);
plot(t,LCpeak,t,LCF,t,LCpeaknew,t,LCFnew)
legend('LCpeak (original)', 'LCF (original)', ...
       'LCpeak (with soundproofing)', ...
       'LCF (with soundproofing)', ...
       'Location','southeast')
title('SPL Measurement of Engine Noise')
xlabel('Time (seconds)')
ylabel('SPL (dB)')
ylim([70 95])
grid on

Figure contains an axes. The axes with title SPL Measurement of Engine Noise contains 4 objects of type line. These objects represent LCpeak (original), LCF (original), LCpeak (with soundproofing), LCF (with soundproofing).

Сравните измерения воспринимаемой громкости до и после звукоизоляции.

acousticLoudness(x2,FS,calib)

Figure contains an axes. The axes with title Specific Loudness {\itN'} (ISO 532-1) contains 2 objects of type line, text.

Громкость снизилась с 23,8 до 16,3 сонов. Однако, возможно, легче интерпретировать громкость в телефонах. Преобразование единиц измерения sone в phons с помощью sone2phon.

fprintf("Loudness without soundproofing:   \t%.1f phons\n",sone2phon(23.8));
Loudness without soundproofing:   	85.7 phons
fprintf("Loudness with added soundproofing:\t%.1f phons\n",sone2phon(16.3));
Loudness with added soundproofing:	80.3 phons
fprintf("Perceived noise reduction:\t\t%.1f phons (dB SPL at 1 kHz)\n",sone2phon(23.8)-sone2phon(16.3));
Perceived noise reduction:		5.5 phons (dB SPL at 1 kHz)

После звукоизоляции, acousticLoudness показывает восприятие шума двигателя примерно на 5,5 дБ тише. Человеческое восприятие звука ограничено на очень низких частотах, где большая часть шума двигателя. Звукоизоляция более эффективна на более высоких частотах.

Рассчитайте снижение психоакустического раздражающего фактора. Начните с вычисления среднего значения акустической резкости.

[~,spec2hd,perc2] = acousticLoudness(x2,FS,calib,"TimeVarying",true,"TimeResolution","high");
spec2 = spec2hd(1:4:end,:,:);
shp = acousticSharpness(spec2,'TimeVarying',true);
new_sharp = mean(shp(501:end))
new_sharp = 1.0796

Резкость уменьшилась, поскольку звукоизоляция более эффективна при высокочастотном затухании. Он ниже порога 1,75, поэтому игнорируется для фактора раздраженности.

Теперь вычислите среднее значение силы флуктуации и шероховатости.

vacil2 = acousticFluctuation(spec2);
f2 = mean(vacil2(501:end,1));
asper2 = acousticRoughness(spec2hd);
r2 = mean(asper2(2001:end,1));

Вычислите новый фактор психоакустического раздражения. Он снизился, с 25,9 до 17,7.

N5hp = perc2(2); % N5 with soundproofing
pahp = N5hp * (1 + abs(2.18/(N5hp^.4)*(.4*f2+.6*r2)))
pahp = 17.7364

Ссылки

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