exponenta event banner

calibrateMicrophone

Калибровочный коэффициент для микрофона

Описание

пример

calibrationFactor = calibrateMicrophone(micRecording,fs,SPLreading) возвращает градуировочный коэффициент для микрофона, используемого для создания micRecording.

calibrationFactor = calibrateMicrophone(micRecording,fs,SPLreading,Name,Value) указывает параметры, использующие один или несколько Name,Value аргументы пары.

Пример: calibrationFactor = calibrateMicrophone(micRecording,fs,SPLreading,'FrequencyWeighting','Z-weighting') возвращает градуировочный коэффициент для отсчета SPL, применяющего Z-взвешивание.

Примеры

свернуть все

На этой схеме показана настройка, использованная в примере:

Для запуска этого примера необходимо подключить микрофон и громкоговоритель к полнодуплексной звуковой карте и использовать SPL-счетчик для определения истинного уровня громкости.

Создание audioOscillator создание синусоидальной волны 1 кГц с частотой дискретизации 48 кГц.

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

Создание audioPlayerRecorder объект для записи синусоидальной волны в громкоговоритель и одновременного считывания с микрофона.

playRec = audioPlayerRecorder(fs);

Создать dsp.AsyncBuffer объект для хранения звука, записанного с микрофона. Укажите емкость буфера для хранения данных за 3 секунды.

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

В цикле, в течение трех секунд:

  • Создайте кадр с синусоидой 1 кГц.

  • Запишите кадр в громкоговоритель и одновременно прочитайте кадр из микрофона.

  • Запишите кадр, полученный от микрофона, в буфер.

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

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

SPL = 78.2; % read from physical SPL meter

micRecording = read(buff);

Вычислите коэффициент калибровки микрофона.

calibrationFactor = calibrateMicrophone(micRecording,playRec.SampleRate,SPL);

На схеме показан пример настройки и потока данных.

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

Укажите частоту дискретизации 48 кГц для аудиоустройства и 3-секундную длительность для получения звука. Создание audioDeviceReader объект для чтения с аудиоустройства.

fs = 48e3;
dur = 3;

deviceReader = audioDeviceReader(fs);

Создать dsp.AsyncBuffer объект для хранения потокового звука.

buff = dsp.AsyncBuffer(dur*fs);

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

tic
while toc < dur
    audioIn = deviceReader();
    write(buff,audioIn);
end

SPL = 77.7; % read from physical SPL meter

micRecording = read(buff);

Вычислите коэффициент калибровки микрофона.

calibrationFactor = calibrateMicrophone(micRecording,deviceReader.SampleRate,SPL);

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

свернуть все

Звуковой сигнал, используемый для калибровки микрофона, определяемый как вектор столбца (моно) или матрица независимых каналов (стерео). micRecording должен быть получен с микрофона, который требуется откалибровать. Запись должна состоять из тестового тонального сигнала 1 кГц.

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

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

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

Уровень звукового давления, сообщаемый измерителем в дБ, указывается как скаляр или вектор. Если SPLreading указан как вектор, он должен иметь то же количество элементов, что и столбцы в micRecording.

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

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

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

Пример: calibrateMicrophone(micRecording,fs,SPLReading,'PressureReference',22)

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

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

Весовой коэффициент частоты, используемый физическим измерителем, указанный как 'A-weighting', 'C-weighting', или 'Z-weighting'.

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

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

свернуть все

Коэффициент калибровки микрофона, возвращаемый в виде скалярного вектора или вектора строки с тем же количеством элементов, что и SPLreading.

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

Алгоритмы

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

  • Калибровочный тональный сигнал, записанный с микрофона, который требуется откалибровать.

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

  • Известная громкость, обычно определяемая с помощью физического SPL-измерителя.

  • Весовой коэффициент частоты, используемый физическим измерителем SPL.

  • Атмосферное давление в месте регистрации.

Схема показывает типичную физическую настройку и расположение требуемой информации.

Diagram of physical setup.

calibrationFactor устанавливается в соответствии с уравнением:

Коэффициент калибровки = 10 ((SPLreading k )/20) среднеквадратичных значений (x)

где x - запись микрофона, проходящая через весовой фильтр, указанный в FrequencyWeighting аргумент. k равно 1 паскали относительно PressureReference рассчитывается в дБ:

k = 20log10 (1Привязка).

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

Создание кода C/C + +
Создайте код C и C++ с помощью MATLAB ® Coder™

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