改进频率-时间规范化/hilbert传输运行时

2024-04-29 02:10:31 发布

您现在位置:Python中文网/ 问答频道 /正文

所以这是一个很基本的问题。。。在

我有一个时间序列信号,它有一个非均匀的响应谱,我需要把它变白。我用一种频率-时间标准化方法来做这个白化,我在两个频率端点之间递增地过滤我的信号,使用一个恒定的窄带(大约1/4是最低频率的末端成员)。然后我找到了表征这些窄带的包络线,并规范化了频率分量。然后我用这些标准化的信号重建我的信号。。。全部用python完成(抱歉,必须是python解决方案)。。。在

以下是原始数据: enter image description here

下面是它的光谱: enter image description here

以下是白化数据的频谱: enter image description here

问题是,我必须对大约500000个信号这样做,而且需要一段时间(每个信号大约一分钟)。。。几乎所有的时间都在做实际的(多个)希尔伯特变换

我已经在一个小集群上运行了。我不想把Hilbert所在的循环并行化。在

我在寻找替代的包络例程/函数(非Hilbert),或者不做循环就计算整个窄带响应函数的替代方法。在

另一个选择是使频带适应其滤波的中心频率,这样当我们进行例行程序时,它们会逐渐变大;这只会减少我通过循环的次数。在

欢迎提出任何建议!!!在

示例代码/数据集: https://github.com/ashtonflinders/FTN_Example


Tags: 数据方法信号时间成员序列解决方案端点
1条回答
网友
1楼 · 发布于 2024-04-29 02:10:31

以下是一种通过局部最大值计算enveloop的更快方法:

def calc_envelope(x, ind):
    x_abs = np.abs(x)
    loc = np.where(np.diff(np.sign(np.diff(x_abs))) < 0)[0] + 1
    peak = x_abs[loc]
    envelope = np.interp(ind, loc, peak)
    return envelope

以下是输出示例:

enter image description here

比希尔伯特快6倍。为了提高速度,可以编写一个cython函数来查找下一个局部极大值点,并迭代地对局部极大值点进行规范化。在

相关问题 更多 >