impzest

Оцените импульсный ответ аудиосистемы

Синтаксис

ir = impzest(excitation,response)
ir = impzest(excitation,response,Name,Value)

Описание

пример

ir = impzest(excitation,response) возвращает оценку импульсного ответа (IR) на основе excitation и response.

пример

ir = impzest(excitation,response,Name,Value) задает опции с помощью одного или нескольких аргументов пары Name,Value.

Примеры

свернуть все

Создайте тональный сигнал возбуждения развертки при помощи функции sweeptone.

excitation = sweeptone(2,1,44100);

plot(excitation)
title('Excitation')

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

[B,A] = butter(10,[.1 .7]);
rec = filter(B,A,excitation);
nrec = rec + 0.12*randn(size(rec));

plot(nrec)
title('System Response')

Передайте сигнал возбуждения и отклик системы к функции impzest, чтобы оценить импульсный ответ. Обрежьте оценку до 100 точек. Используйте impz, чтобы определить истинный импульсный ответ системы. Постройте истинный импульсный ответ и предполагаемый импульсный ответ для сравнения.

irEstimate = impzest(excitation,nrec);
irEstimate = irEstimate(1:101);

irTrue = impz(B,A,101);
plot(0:100,irEstimate, ...
     0:100,irTrue,'ro')

legend('True impulse response','Estimated impulse response')

Используйте audioread, чтобы читать в импульсной записи ответа. Создайте объект dsp.FrequencyDomainFIRFilter выполнить фильтрацию частотного диапазона с помощью известного импульсного ответа.

[irKnown,fs] = audioread('ChurchImpulseResponse-16-44p1-mono-5secs.wav');
systemModel = dsp.FrequencyDomainFIRFilter(irKnown');

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

excitation = mls(numel(irKnown)+1);

plot(excitation)
title('Excitation')

Реплицируйте сигнал возбуждения четыре раза, чтобы измерить среднее значение трех измерений. Запись первой последовательности MLS действительно включает всю импульсную информацию об ответе, таким образом, impzest отбрасывает его как запущенный прогрев. Заполните сигнал возбуждения нулями, чтобы составлять задержку фильтра.

numRuns = 4;
excrep = repmat(excitation,numRuns,1);
excrep = [excrep;zeros(numel(irKnown)+1,1)];

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

rec = systemModel(excrep);
rec = rec + 0.1*randn(size(rec));

rec = rec(numel(irKnown)+2:end,:);

plot(rec)
title('System Response')

В реальном сценарии последовательность MLS воспроизводится в системе под тестом при записи. Запись была бы сокращена так, чтобы она началась в данный момент, последовательность MLS взята и усеченная, чтобы продлиться длительность повторной последовательности.

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

irEstimate = impzest(excitation,rec);

samples = 1:numel(irKnown);
plot(samples,irEstimate(samples),'bo', ...
     samples,irKnown(samples),'m.')

legend('Known impulse response','Simulation of estimated impulse response')

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

свернуть все

Один период возбуждения сигнализирует о входе к аудиосистеме, заданной как вектор-столбец.

Можно сгенерировать сигналы возбуждения при помощи mls (максимальная последовательность длины) или sweeptone (экспоненциальная развертка синуса).

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

Записанный вывод сигнала от аудиосистемы, заданной как вектор-столбец или матрица. Если задано как матрица, каждый столбец матрицы обработан как независимый канал.

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

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

Укажите необязательные аргументы в виде пар ""имя, значение"", разделенных запятыми. Имя (Name) — это имя аргумента, а значение (Value) — соответствующее значение. Name должен появиться в кавычках. Вы можете задать несколько аргументов в виде пар имен и значений в любом порядке, например: Name1, Value1, ..., NameN, ValueN.

Пример: 'WarmupRuns', 2

Количество прогрева запускается в ответе, заданном как неотрицательное целое число. Функция impzest оценивает импульсный ответ после отбрасывания конкретного количества выполнений прогрева от response.

Количество по умолчанию выполнений прогрева зависит от того, был ли сигнал возбуждения сгенерирован с помощью функции sweeptone или mls:

  • mls – 1

  • sweeptone – 0

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

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

свернуть все

Оценка импульсного ответа аудиосистемы, возвращенной как вектор-столбец или матрица. Размером ir является L-by-C, где:

  • L Длина MLS или длительность развертки настраивают тишину

  • C Количество столбцов (каналы) в сигнале ответа

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

Ссылки

[1] Фарино, Анджело. "Продвижения в импульсных измерениях ответа развертками синуса". Представленный в Обществе звукоинженеров 122-е соглашение, Вена, Австрия, 2007.

[2] Парень-Bart, Стэн, Жан-Жак Эмбрашц и Доминик Аршамбо. "Сравнение Различных Импульсных Техник измерений Ответа". Журнал Общества звукоинженеров. Издание 50, Выпуск 4, 2002, стр 246–262.

[3] Armelloni, Энрико, Кристиан Джиоттоли и Анджело Фарина. "Реализация Разделенной Свертки В реальном времени на Плате DSP". Приложение Обработки сигналов к Аудио и Акустике, 2 003 Семинарам IEEE, стр 71–74. IEEE, 2003.

Смотрите также

| |

Введенный в R2018b