matlabhill 的 hilbert 代码,挺适合做信号的朋友参考参考。它把扫动拍动这类比较复杂的信号,用希尔伯特变换拆解成了相位幅度偏移这几部分。这样一来,起来就清爽多了。

基于 UCSD 神经物理实验室的原始 MATLAB 实现,这个 Python 版本代码复刻得还不错。输入是晶须角的向量信号,外加采样率Fs和带通范围bp,输出就是你想要的相位估计和过滤信号。

说白了,希尔伯特变换就是把一个实数信号搞成一个复数形式,比如cos(t)变成cos(t) + i sin(t),相位就能直接拿出来用了。适合像小鼠须运动、脑电振荡这种有节律的信号。

代码风格也蛮清爽,注释还行,逻辑清晰。如果你对振动模式感兴趣,或者想看看希尔伯特变换在神经科学场景下怎么落地的,这套代码还蛮值得下下来看。

不过要注意哦,输入信号得先带通滤波一下,不然出来的相位估计容易飘。如果你要拓展到别的信号形式,也记得改下滤波参数。

相关参考你也可以看看这些:

如果你做的是神经信号、节律、动物运动这一类的活,真的可以试试看。