Мне нужно получить разность фаз между 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