impzest

Оцените импульсную характеристику аудиосистемы

Описание

пример

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 имя аргумента и Value соответствующее значение. Name должен появиться в кавычках. Вы можете задать несколько аргументов в виде пар имен и значений в любом порядке, например: Name1, Value1, ..., NameN, ValueN.

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

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

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

  • 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