python相关函数中的时间滞后以发现2个信号之间的相位差

时间:2018-11-25 14:03:06

标签: python cross-correlation

我需要获取2个信号之间的相位差。我是信号处理的新手,在浏览过多之后,尝试了各种帖子中建议的许多不同内容。我使用python,无法在python中找到matlab函数,也无法确定我的结果是否正确。

我在identifying phase shift between signals中找到了此代码段,非常希望具有相同的功能,但是发现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。

帖子称希尔伯特函数仅适用于单分量信号。如果我理解正确,这意味着信号应该只有一个频率,但是我正在处理的信号中就有不同的频率分量。因此,我不能使用希尔伯特函数。

请帮助。

谢谢, 埃萨什

0 个答案:

没有答案