gpt4 book ai didi

python - 改进频率时间归一化/希尔伯特传输运行时间

转载 作者:太空宇宙 更新时间:2023-11-03 11:22:41 31 4
gpt4 key购买 nike

所以这是一个有点棘手的问题......

我有一个时间序列信号,它具有不均匀的响应谱,我需要对其进行白化。我使用频率时间归一化方法进行这种白化,我在两个频率端点之间使用恒定的窄频带(~1/4 最低频率终端成员)递增地过滤我的信号。然后,我找到表征这些窄带中每一个的包络线,并对该频率分量进行归一化。然后我使用这些标准化信号重建我的信号...所有这些都是在 python 中完成的(抱歉,必须是 python 解决方案)...

这是原始数据: enter image description here

这是它的频谱: enter image description here

这里是白化数据的频谱: enter image description here

问题是,我必须对大约 500,000 个这样的信号执行此操作,这需要一段时间(每个大约一分钟)...几乎所有时间都花在了实际(多个)上希尔伯特变换

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

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

另一种选择是使频带适应其过滤的中心频率,因此随着我们进行例程,它们会逐渐变大;这只会减少我必须经历循环的次数。

欢迎提出任何建议!!!

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

最佳答案

这是一种通过局部最大值计算包络环的更快方法:

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

它比 hilbert 快大约 6 倍。为了进一步加速,您可以编写一个 cython 函数来查找下一个局部最大值点并迭代地对局部最大值点进行归一化。

关于python - 改进频率时间归一化/希尔伯特传输运行时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39648038/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com