finddelay
Оценка задержки между сигналами.
| Библиотека |
|
Аргументы
Входные аргументы
#
x —
опорный входной сигнал
вектор | матрица
Details
Опорный входной сигнал, заданный как вектор или матрица.
#
y —
входной сигнал
вектор | матрица
Details
Входной сигнал, заданный как вектор или матрица.
#
maxlag —
максимальный размер окна корреляции
скаляр | вектор
Details
Максимальный размер окна корреляции, заданный как целочисленный скаляр или вектор. Если какой-либо элемент maxlag отрицательный, то он заменяется своим абсолютным значением. Если какой-либо элемент maxlag не является целым числом, является комплексным, равен Inf или NaN, то finddelay возвращает ошибку.
Выходные аргументы
#
d —
задержка
скаляр | вектор
Details
Задержка между входными сигналами, возвращаемая в виде целочисленного скаляра или вектора. Если y задерживается относительно x, то d положительно. Если y опережает x, то d отрицательно. Если возможно несколько задержек, как в случае периодических сигналов, то возвращается задержка с наименьшим абсолютным значением. В случае если возможны как положительная, так и отрицательная задержки с одинаковыми абсолютными значениями, возвращается положительная задержка.
Примеры
Входные сигналы X и Y — вектора, максимальный размер окна корреляции maxlag не задан
Details
Пример, когда Y задерживается относительно X на два отсчета:
import EngeeDSP.Functions: finddelay
X = [1 2 3]
Y = [0 0 1 2 3]
D = finddelay(X,Y)
print("D = ", D)
D = 2
Пример, когда Y опережает X на три отсчета:
import EngeeDSP.Functions: finddelay
X = [0 0 0 1 2 3 0 0]'
Y = [1 2 3 0]'
D = finddelay(X,Y)
print("D = ", D)
D = -3
Пример, когда Y совпадает с X, но является зашумленным:
import EngeeDSP.Functions: finddelay
X = [0 0 1 2 3 0]
Y = [0.02 0.12 1.08 2.21 2.95 -0.09]
D = finddelay(X,Y)
print("D = ", D)
D = 0
Пример, когда Y является периодической версией X и возвращается наименьшая возможная задержка:
import EngeeDSP.Functions: finddelay
X = [0 1 2 3]
Y = [1 2 3 0 0 0 0 1 2 3 0 0]
D = finddelay(X,Y)
print("D = ", D)
D = -1
Входной сигнал X — вектор, Y — матрица, максимальный размер окна корреляции maxlag — скаляр
Details
Пример, когда сигнал X — вектор, Y — матрица, максимальный размер окна корреляции maxlag — скаляр:
import EngeeDSP.Functions: finddelay
X = [0 1 2]
Y = [0 1 0 0;
1 2 0 0;
2 0 1 0;
0 0 2 1]
maxlag = 3
D = finddelay(X,Y,maxlag)
print("D = ", D)
D = [0 -1 1 1]
Входные сигналы X и Y — матрицы, максимальный размер окна корреляции maxlag не задан
Details
Пример, когда сигнал X и Y — матрицы одинаковой размерности:
import EngeeDSP.Functions: finddelay
X = [0 1 0 0;
1 2 0 0;
2 0 1 0;
1 0 2 1;
0 0 0 2]
Y = [0 0 1 0;
1 1 2 0;
2 2 0 1;
1 0 0 2;
0 0 0 0]
D = finddelay(X,Y)
print("D = ", D)
D = [0 1 -2 -1]
Теперь добавим к Y еще одну строку:
import EngeeDSP.Functions: finddelay
X = [0 1 0 0;
1 2 0 0;
2 0 1 0;
1 0 2 1;
0 0 0 2]
Y = [0 0 1 0;
0 0 0 0;
1 1 2 0;
2 2 0 1;
1 0 0 2;
0 0 0 0]
D = finddelay(X,Y)
print("D = ", D)
D = [1 2 -1 0]
Входные сигналы X и Y — матрицы, максимальный размер окна корреляции maxlag — вектор
Details
Создадим два многоканальных сигнала X и Y таким образом, чтобы каждый канал Y имел задержанную идентичную копию каждого канала X. Установим максимальный размер окна корреляции 8 для каждого канала и рассчитаем задержки по столбцам:
import EngeeDSP.Functions: finddelay
X = [1 3 2 0 0 0 0 0;
0 0 0 0 0 1 3 2]'
Y = [0 0 0 1 3 2;
1 3 2 0 0 0]'
maxlag = [8 8]
D = finddelay(X,Y,maxlag)
print("D = ", D)
D = [3 -5]
Уменьшим размер окна корреляции до 3 для первого канала и до 5 для второго:
import EngeeDSP.Functions: finddelay
X = [1 3 2 0 0 0 0 0;
0 0 0 0 0 1 3 2]'
Y = [0 0 0 1 3 2;
1 3 2 0 0 0]'
maxlag = [3 5]
D = finddelay(X,Y,maxlag)
print("D = ", D)
D = [3 -5]
Увеличим размер окна корреляции до 5 для первого канала и уменьшим до 3 для второго:
import EngeeDSP.Functions: finddelay
X = [1 3 2 0 0 0 0 0;
0 0 0 0 0 1 3 2]'
Y = [0 0 0 1 3 2;
1 3 2 0 0 0]'
maxlag = [5 3]
D = finddelay(X,Y,maxlag)
print("D = ", D)
D = [3 -3]
Советы
-
Аргументы
xиyне обязательно должны быть точными запаздывающими копиями друг друга, посколькуfinddelay(x, y)возвращает оценку задержки посредством кросс-корреляции. Однако эта оценка задержки имеет смысл только при наличии достаточной корреляции между запаздывающими версиямиxиy. -
Расчет вектора предполагаемых значений задержки
dзависит отx,yиmaxlag, как показано в таблице.maxlagxydЦелочисленный скаляр
Вектор-строка, вектор-столбец или матрица
Вектор-строка, вектор-столбец или матрица
Кросс-корреляция столбцов
xиyв диапазоне периода задержки от−maxlagдоmaxlag.Вектор-строка или вектор-столбец с целочисленными значениями
Вектор-строка, вектор-столбец длины
Матрица размерностью на ( )
Кросс-корреляция
xи столбца матрицыyв диапазоне периода задержки от−maxlagдоmaxlagдля .Вектор-строка или вектор-столбец с целочисленными значениями
Матрица размерностью на ( )
Вектор-строка, вектор-столбец длины
Кросс-корреляция столбца матрицы
xиyв диапазоне периода задержки от−maxlagдоmaxlagдля .Вектор-строка или вектор-столбец с целочисленными значениями
Матрица размерностью на ( )
Матрица размерностью на ( )
Кросс-корреляция столбца матрицы
xи столбца матрицыyв диапазоне периода задержки от−maxlagдоmaxlagдля . -
Если вы хотите рассматривать вектор-строку
xдлины как содержащий один отсчет из различных каналов, то необходимо добавить кxодну или несколько строк нулей, чтобы он принял вид матрицы. Тогда каждый столбецxбудет считаться каналом.Например,
x = [1 1 1 1]считается одним каналом, содержащим четыре отсчета. Чтобы рассматривать его как четыре различных канала, каждый из которых содержит один отсчет, определите новую матрицуxm, такую, что каждый столбецxmсоответствует одному каналу, каждый из которых содержит отсчеты1и0.
xm = [1 1 1 1;
0 0 0 0]
Алгоритмы
Функция finddelay использует функцию xcorr для определения взаимной корреляции между каждой парой сигналов при всех возможных задержках, указанных пользователем. Затем рассчитывается нормализованная взаимная корреляция между каждой парой сигналов. Оценочная задержка определяется как отрицательное значение запаздывания, для которого нормализованная взаимная корреляция имеет наибольшее абсолютное значение.
Если возможно несколько задержек, как в случае периодических сигналов, то возвращается задержка с наименьшим абсолютным значением. В случае если возможны как положительная, так и отрицательная задержки с одинаковыми абсолютными значениями, возвращается положительная задержка.
Пары сигналов не обязательно должны быть точными запаздывающими копиями друг друга. Однако оцененная задержка имеет смысл только при наличии достаточной корреляции хотя бы между одной парой задержанных сигналов.