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')

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

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

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

plot(nrec)
title('System Response')

Figure contains an axes object. The axes object with title System Response contains an object of type line.

Передайте сигнал возбуждения и отклик системы к 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')

Figure contains an axes object. The axes object contains 2 objects of type line. These objects represent 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')

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

Реплицируйте сигнал возбуждения четыре раза, чтобы измерить среднее значение трех измерений. Запись первой последовательности 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')

Figure contains an axes object. The axes object with title System Response contains an object of type line.

В реальном сценарии последовательность 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')

Figure contains an axes object. The axes object contains 2 objects of type line. These objects represent Known impulse response, Simulation of estimated impulse response.

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

свернуть все

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

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

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

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

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

Аргументы name-value

Задайте дополнительные разделенные запятой пары 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.

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

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

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

| |

Введенный в R2018b