временная задержка в корреляционной функции питона для определения разности фаз между двумя сигналами - PullRequest
0 голосов
/ 25 ноября 2018

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

Я нашел этот фрагмент кода в , идентифицирующий фазовый сдвиг между сигналами и очень многохотел такую ​​же функциональность, но обнаружил, что коррелированные функции numpy и scipy не выводят задержку во времени и, следовательно, не могли использовать эту функцию.Это выглядит действительно надежно, и я могу реализовать функцию временной задержки, если знаю алгоритм для нее.

fr = 20; % input signal freq
timeStep = 1e-4;
t = 0:timeStep:50; % time vector
y1 = sin(2*pi*t); % reference signal
ph = 0.5; % phase difference to be detected in radians
y2 = 0.9 * sin(2*pi*t + ph); % signal, the phase of which, is to be measured relative to the reference signal

[c,lag]=xcorr(y1,y2); % calc. cross-corel-n
[maxC,I]=max(c); % find max
PH = (lag(I) * timeStep) * 2 * pi; % calculated phase in radians

>> PH

PH =

0.4995

У меня есть эта простая функция.импортировать numpy как np

t = np.linspace(0.0, 1.0, 10000)

amp = 1
freq = 6
phase = [0, 0.5]
offset = 0

sine1 = np.array([])
sine2 = np.array([])
for i in t:
    val = amp * np.sin(2 * np.pi * freq * i + phase[0]) + offset
    sine1 = np.append(sine1, val)

for i in t:
    val = amp * np.sin(2 * np.pi * freq * i + phase[1]) + offset
    sine2 = np.append(sine2, val)

Мне нужно получить точные сдвиги фаз между этими двумя сигналами, чтобы я мог использовать их для реальных нейронных сигналов.Это означает, что фазовый сдвиг может быть любым и не обязательно 0,5.

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

Пожалуйста, помогите.

Спасибо, Esash

...