Точный расчет задержки сигнала в Python - PullRequest
2 голосов
/ 29 сентября 2010

Я пытаюсь вычислить лаг между двумя сигналами в Python, используя взаимную корреляцию. Два сигнала практически идентичны, за исключением очень маленького временного интервала. Я попытался numpy.correlate и scipy.convolve (много быстрее), и оба работают относительно хорошо, но выдает небольшую ошибку. Я начинаю подозревать, что ошибка является результатом того, что Python / scipy / numpy где-то урезал float. Кто-нибудь смог получить высокоточные вычисления задержки сигнала, работающие в Python?

С наилучшими пожеланиями Фредрик

1 Ответ

0 голосов
/ 05 марта 2011

В зависимости от спектра мощности двух сигналов вы получаете небольшую ошибку из-за того, что кросс-корреляция не нормируется должным образом при каждом запаздывании.Вот небольшая функция, которую я использую;он нормализует область перекрытия в каждом лаге, и я обнаружил, что это дает точные результаты:

def NormCrossCorrSlow(x1, x2,
                  nlags=400):
res=[]
for i in range(-(nlags/2),nlags/2,1):
    if i<0:
        xx1=x1[:i]
        xx2=x2[-i:]
    elif i==0:
        xx1=x1
        xx2=x2
    else:
        xx1=x1[i:]
        xx2=x2[:-i]
    res.append( (xx1*xx2).sum() /( (xx1**2).sum() *(xx2**2).sum() )**0.5)
return numpy.array(res)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...