Calculate phase difference between two general signals (e.g. HbO and Hb) using Hilbert transform

1 min read

In a recent fNIRS journal club (vedio recorded here), Dr. Tong talked about their work on the phase difference between oxy and deoxy Hb, and its relationship with participants’ age. This article is a demo of how to use Hilbert transform to calculate the phase difference between two signals, and whether it’s valid if the signals contain a wide range of frequencies.

Tool: We use MatLab’s hilbert function to calculate the instant phase of a signal. The code can be found in the end of this article.

Case 1: single frequency

Here we tried the simplest case: x and y are single frequency signals with phase difference pi/2, as demonstrated in the figure below. We expect that the calculated phase difference is close to pi/2 or 1.57.

As expected, the phase difference is pi/2! Hilbert transform is doing well in picking up the phase difference! It is noted, however, the calculation is more robust in the middle of the signal.

Case 2: 2 frequencies

What about more complex signals? If x and y both contains two frequencies, each with phase difference pi/2, will Hilbert transform find the correct value?

Yes. It turns out Hilbert transform works for two-frequency signals as well.

Case 3: a lot of frequencies

In this case we generated x and y each with 50 random frequencies. The resulted signals are essentially random:

Again, Hilbert transform found the correct phase difference, pi/2:

People may argue that in such a wide-band case the “phase difference” is not meaningful. However, if the phase difference for each frequency is similar, then it is reasonable to say that the phase difference between the overall signals exists and is that value.

Code (MatLab)

Update: in the original version I shift phase manually (and contains an error!). Now we use unwrap and wrapToPi, suggested by Yafeng Pan, which is easier to use and produce the correct phase shift. Thank Yafeng!

% Demo of Hilbert transform to calculate phase difference between two
% signals
% Xu Cui 2021/6/7

% single frequency
t = [0:0.01:100];
x = sin(t);
y = sin(t+pi/2);
figure; plot(t, x, t, y);
legend('x','y');

xh = hilbert(x);
yh = hilbert(y);

xphase = unwrap(angle(xh));
yphase = unwrap(angle(yh));

figure; plot(t, xphase, t, yphase,'.');

phase_diff = wrapToPi(xphase-yphase);
figure; plot(t, phase_diff, '.');

% 2 frequencies
t = [0:0.01:100];
x = sin(t) + sin(2*t);
y = sin(t+pi/2) + sin(2*t+pi/2);
figure; plot(t, x, t, y);
legend('x','y');

xh = hilbert(x);
yh = hilbert(y);

xphase = unwrap(angle(xh));
yphase = unwrap(angle(yh));

figure; plot(t, xphase, t, yphase,'.');

phase_diff = wrapToPi(xphase-yphase);
figure; plot(t, phase_diff, '.');

% a lot of frequencies
t = [0:0.01:100];
x = zeros(size(t));
y = zeros(size(t));
frequency = rand(1,50)*10;
for ii=1:length(frequency)
    f = frequency(ii);
    x = x + sin(f*t);
    y = y + sin(f*t+pi/2);
end

figure; plot(t, x, t, y);
legend('x','y');

xh = hilbert(x);
yh = hilbert(y);

xphase = unwrap(angle(xh));
yphase = unwrap(angle(yh));

figure; plot(t, xphase, t, yphase,'.');

phase_diff = wrapToPi(xphase-yphase);
figure; plot(t, phase_diff, '.');

采用基于频率簇(Cluster)的置换检验(Permutation)方法选取感兴趣频段

作者:北京师范大学 龙宇航,longyuhangwork@163.com代码来源(见本页底部):周思远 在使用wtc计算脑间神经同步后,我们需要在多个频率段、多个通道组合上对神经同步值进行统计检验,因此当进行频段选择时,面临多重比较的问题。为了解决多重比较的问题,可以采取基于参数或非参数检验的多重比较矫正的方法。由于基于非参数检验的多重比较矫正对数据的分布形态没有严格要求,因此具有更广泛的应用场景 (Maris and Oostenveld, 2007)。本文即介绍基于随机置换的非参数检验的方法 (Zheng et al., 2020; Long et al., 2021)。 在寻找感兴趣的效应时,我们采取了基于频率簇(Cluster)的方法,即在频率方向寻找连续显著的Cluster,该方法比基于最强效应点的方法具有更为优秀的抗噪音能力。值得注意的是,我们并没有沿着通道的方向去寻找连续显著的通道簇,这是因为沿着通道方向寻找Cluster容易受到生理噪音的影响。 下面进入具体的实操部分。假设本例招募了22对组1被试及22对组2被试,每对被试分别进行3种条件的任务,因此本例是2(组别,被试间因素)*3(条件,被试内因素)的实验设计。本例对神经同步值进行2*3的混合方差分析,并关注交互作用。 具体来讲,进行置换检验需要进行以下几个步骤:1. 重采样;2. 对随机样本进行计算及统计;3. 计算真实样本的统计量;4. 真实样本与随机样本的对比。下面依次进行介绍。 1. 重采样...
Xu Cui
1 min read

第二十期 fNIRS Journal Club 通知 2021/06/26,10:00am

同时用fNIRS和EEG测量脑信号有哪些好处?技术上应该注意什么?美国斯坦福大学李日辉博士,将为大家讲解他做过的一个同时用fNIRS和EEG测量的实验。热烈欢迎大家参与讨论。 时间: 北京时间2021年6月26日上午10:00地点: https://zoom.com房间号: 856 9352 0230密码: 695930 李博士要讲解的文章如下: Li, Li, Roh, Wang, Zhang (2020) Multimodal Neuroimaging Using Concurrent EEG/fNIRS for Poststroke Recovery Assessment:...
Xu Cui
7 sec read

第十九期 fNIRS Journal Club 视频

北京时间2021年5月29日9:30,美国普渡大学童云杰助理教授,为大家讲解他们组最近被接受的一篇使用近红外相位信息研究脑血流变化的文章。视频如下: Youtube: https://youtu.be/OT7hPVI36PA Youku 优酷:https://v.youku.com/v_show/id_XNTE2MjI0MDY3Mg==.html
Xu Cui
5 sec read

Leave a Reply

Your email address will not be published. Required fields are marked *

Loading