gpt4 book ai didi

python - 获得范围内频率平均值的最快方法

转载 作者:行者123 更新时间:2023-11-28 19:35:16 25 4
gpt4 key购买 nike

<分区>

我是 python 和信号处理方面的新手。我正在尝试计算信号的某些频率范围内的 mean 值。

我想做的是如下:

import numpy as np
data = <my 1d signal>
lF = <lower frequency>
uF = <upper frequency>
ps = np.abs(np.fft.fft(data)) ** 2 #array of power spectrum

time_step = 1.0 / 2000.0

freqs = np.fft.fftfreq(data.size, time_step) # array of frequencies
idx = np.argsort(freqs) # sorting frequencies

sum = 0
c =0
for i in idx:
if (freqs[i] >= lF) and (freqs[i] <= uF) :
sum += ps[i]
c +=1
avgValue = sum/c
print 'mean value is=',avgValue

我觉得计算还可以,但是需要很多时间,比如超过 15GB 的数据,处理时间呈指数级增长。有没有最快的方法可以使我能够以最快的方式在某个频率范围内获得功率谱的平均值。提前致谢。

编辑 1

我关注了this code用于计算功率谱。

编辑 2

This没有回答我的问题,因为它计算整个数组/列表的平均值,但我想要数组的一部分。

编辑 3

jez 使用掩码的解决方案减少了时间。实际上我有超过 10 个一维信号 channel ,我想以相同的方式处理它们,即分别在每个 channel 的范围内平均频率。我认为 python 循环很慢。有什么替代方案吗?像这样:

for i in xrange(0,15):
data = signals[:, i]
ps = np.abs(np.fft.fft(data)) ** 2
freqs = np.fft.fftfreq(data.size, time_step)
mask = np.logical_and(freqs >= lF, freqs <= uF )
avgValue = ps[mask].mean()
print 'mean value is=',avgValue

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