gccphat

Обобщенная взаимная корреляция

Описание

пример

tau = gccphat(sig,refsig) вычисляет задержку, tau, между сигналом, sig, и опорный сигнал, refsig. Оба sig и refsig может иметь несколько каналов. Функция принимает, что сигнал и опорный сигнал прибывают из одного источника. Оценить задержку, gccphat находит местоположение пика взаимной корреляции между sig и refsig. Взаимная корреляция вычисляется с помощью обобщенной фазы взаимной корреляции, преобразовывают алгоритм (GCC-PHAT). Задержки являются множителями демонстрационного интервала, соответствующего частоте дискретизации по умолчанию одного герц.

пример

tau = gccphat(sig,refsig,fs), задает частоту дискретизации сигнала. Задержки являются множителями демонстрационного интервала, соответствующего частоте дискретизации. Все входные сигналы должны иметь ту же частоту дискретизации.

пример

[tau,R,lag] = gccphat(___) возвращает, кроме того, значения взаимной корреляции и задержки корреляции, с помощью любого из аргументов от предыдущих синтаксисов. Задержки являются множителями интервала выборки. Количество каналов взаимной корреляции равняется количеству каналов в sig.

пример

[___] = gccphat(sig) или [___] = gccphat(sig,fs) возвращает предполагаемые задержки и перекрестные корреляции между всеми парами каналов в sig. Если sig имеет столбцы M, получившийся tau и R имейте M2 столбцы. В этих синтаксисах не используется никакой вход опорного сигнала. Первые столбцы M tau и R содержите задержки и перекрестные корреляции, которые используют первый канал в качестве ссылки. Вторые столбцы M содержат задержки и взаимные корреляции, которые используют второй канал в качестве ссылки и так далее.

Примеры

свернуть все

Загрузите сигнал звука гонга. Во-первых, используйте сигнал гонга в качестве опорного сигнала. Затем скопируйте сигнал дважды, введя задержки 5 и 25 секунд. Оставьте частоту дискретизации ее значению по умолчанию одного герц. Используйте gccphat оценить задержки между задержанными сигналами и опорным сигналом.

load gong;
refsig = y;
delay1 = 5;
delay2 = 25;
sig1 = delayseq(refsig,delay1);
sig2 = delayseq(refsig,delay2);
tau_est = gccphat([sig1,sig2],refsig)
tau_est = 1×2

     5    25

Загрузите сигнал звука гонга. Используйте сигнал гонга в качестве опорного сигнала. Затем скопируйте сигнал, введя задержки 5 миллисекунд. Используйте частоту дискретизации 8 192 Гц. Используйте gccphat оценить задержку между задержанным сигналом и опорным сигналом.

load gong;
delay = 0.005;
refsig = y;
sig = delayseq(refsig,delay,Fs);
tau_est = gccphat(sig,refsig,Fs)
tau_est = 0.0050

Загрузка музыкальный звуковой сигнал с частотой дискретизации составляет 8 192 герц. Затем скопируйте сигнал три раза и введите задержки между сигналами. Оцените задержки между задержанными сигналами и опорными сигналами. Постройте значения корреляции.

load handel;
dt = 1/Fs;
refsig = y;

Создайте три задержанных версии сигнала.

delay1 = -5.2*dt;
delay2 = 10.3*dt;
delay3 = 7*dt;
sig1 = delayseq(refsig,delay1,Fs);
sig2 = delayseq(refsig,delay2,Fs);
sig3 = delayseq(refsig,delay3,Fs);

Перекрестный коррелируйте задержанные сигналы с опорным сигналом.

[tau_est,R,lags] = gccphat([sig1,sig2,sig3],refsig,Fs);

gccphat функции оценивают задержку с самым близким демонстрационным интервалом.

disp(tau_est*Fs)
    -5    10     7

Постройте функции корреляции.

plot(1000*lags,real(R(:,1)))
xlabel('Lag Times (ms)')
ylabel('Cross-correlation')
axis([-5,5,-.4,1.1])
hold on
plot(1000*lags,real(R(:,2)))
plot(1000*lags,real(R(:,3)))
hold off

Figure contains an axes object. The axes object contains 3 objects of type line.

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

load handel;
dt = 1/Fs;
refsig = y;

Создайте три задержанных версии сигнала.

delay1 = -5.7*dt;
delay2 = 10.2*dt;
sig1 = delayseq(refsig,delay1,Fs);
sig2 = delayseq(refsig,delay2,Fs);

Перекрестный коррелируйте все сигналы с другим сигналом.

[tau_est,R,lags] = gccphat([refsig,sig1,sig2],Fs);

Покажите задержки модулей демонстрационного интервала. Алгоритм оценивает задержки, квантованные к самому близкому демонстрационному интервалу. Взаимная корреляция трех сигналов производит 9 возможных задержек, один для каждой возможной пары сигнала.

disp(tau_est*Fs)
     0    -6    10     6     0    16   -10   -16     0

Сигнал, коррелируемый с собой, дает нулевую задержку.

Постройте функции корреляции.

for n=1:9
    plot(1000*lags,real(R(:,n)))
    if n==1
        hold on
        xlabel('Lag Times (ms)')
        ylabel('Correlation')
        axis([-5,5,-.4,1.1])
    end
end
hold off

Figure contains an axes object. The axes object contains 9 objects of type line.

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

свернуть все

Датчик сигнализирует в виде N-by-1 о вектор-столбце или N-by-M матрица. N является количеством выборок времени, и M является количеством каналов. Если sig матрица, каждый столбец является различным каналом.

Пример: [0,1,2,3,2,1,0]

Типы данных: single | double
Поддержка комплексного числа: Да

Опорные сигналы в виде N-by-1 вектор-столбец с комплексным знаком или N-by-M матрица с комплексным знаком. Если refsig вектор-столбец, затем все каналы в sig используйте refsig как опорный сигнал при вычислении взаимной корреляции.

Если refsig матрица, затем размер refsig должен совпадать с размером sig. gccphat функция вычисляет взаимную корреляцию между соответствующими каналами в sig и refsig. Сигналы могут прибыть из других источников.

Пример: [1,2,3,2,1,0,0]

Типы данных: single | double
Поддержка комплексного числа: Да

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

Пример: 8000

Типы данных: single | double
Поддержка комплексного числа: Да

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

свернуть все

Задержка, возвращенная как 1 K вектором-строкой с действительным знаком. Значение K зависит от синтаксиса входного параметра.

  • Когда опорный сигнал, refsig, используется, значение K равняется размерности столбца sigM. Каждая запись в tau задает предполагаемую задержку соответствующих пар сигнала в sig и refsig.

  • Когда никакой опорный сигнал не используется, значение K равняется квадрату размерности столбца sigM2. Каждая запись в tau задает предполагаемую задержку соответствующих пар сигнала в sig.

Модули являются секундами.

Взаимная корреляция между сигналами в различных датчиках, возвращенных как (2N-1)-by-K матрица с комплексным знаком.

  • Когда опорный сигнал, refsig, используется, значение K равняется размерности столбца sigM. Каждый столбец является взаимной корреляцией между соответствующими парами сигнала в sig и refsig.

  • Когда никакой опорный сигнал не используется, значение K равняется квадрату размерности столбца sigM2. Каждый столбец является взаимной корреляцией между соответствующими парами сигнала в sig.

Время задержки корреляции, возвращенное как (2N-1) вектор-столбец с действительным знаком. Каждая строка lag содержит время задержки для соответствующей строки R. Отстаньте значения ограничиваются быть множителями интервала выборки. Отстаньте модули находятся в секундах.

Больше о

свернуть все

Обобщенная взаимная корреляция

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

Моделью сигнала, испускаемого источником и полученного в двух датчиках, дают:

r1(t)=s(t)+n1(t)r2(t)=s(tD)+n2(t)

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

От TDOA можно оценить поперечный угол падения плоской волны относительно линии, соединяющей эти два датчика. Для двух датчиков, разделенных расстоянием L, поперечный угол падения, Поперечные Углы, связан с задержкой

sinβ=cτL

где c является скоростью распространения в носителе.

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

R(τ)=E{r1(t)r2(t+τ)}D^ = argmaxτR(τ)

Когда функция корреляции более резко достигнута максимума, эффективность улучшается. Можно увеличить резкость пика взаимной корреляции использование функции взвешивания, которая белит входные сигналы. Этот метод называется generalized cross-correlation (GCC). Одна конкретная функция взвешивания нормирует спектральную плотность сигнала на величину спектра, ведя к методу generalized cross-correlation phase transform (GCC-PHAT).

S(f)=R(τ)ei2πfτdτR˜(τ)=S(f)|S(f)|e+i2πfτdfD˜ = argmaxτ R˜(τ)

Если вы используете всего две пары датчика, можно только оценить поперечный угол прибытия. Однако, если вы используете несколько пар неколлинеарных датчиков, например, в URA, можно оценить азимут прибытия и углы возвышения плоской волны с помощью оценки наименьшего квадрата. Для датчиков N можно записать времени задержки τkj сигнала, прибывающего в kth датчик относительно jth датчик

cτkj=(xkxj)uu=cosαsinθi^+sinαsinθj^+cosθk^

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

Ссылки

[1] Кнапп, C. H. и Г.К. Картер, “Обобщенный метод корреляции для оценки задержки”. Транзакции IEEE на акустике, речи и обработке сигналов. Издание ASSP-24, № 4, август 1976.

[2] Г. К. Картер, “Когерентность и оценка с временной задержкой”. Продолжения IEEE. Издание 75, № 2, февраль 1987.

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

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

Введенный в R2015b