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

穆阿兹

我是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

我遵循此代码来计算功率谱。

编辑2

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

编辑3

通过使用面膜的解决方案可以减少时间。实际上,我有10个以上的1D信号通道,并且我想以相同的方式处理它们,即,每个通道范围内的平均频率分别存在。我认为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
ez

以下对选定区域进行平均:

mask = numpy.logical_and( freqs >= lF, freqs <= uF )
avgValue = ps[ mask ].mean()

为了适当地缩放已计算为abs(fft系数的幂值)**2,您需要乘以(2.0 / len(data))**2Parseval定理

请注意,如果您的频率范围包含奈奎斯特频率,则可能会变得有些data.size奇怪-为了获得精确的结果,处理单个频率分量将取决于偶数还是奇数。因此,为简单起见,请确保uF严格小于max(freqs)[出于类似原因,您应确保lF > 0

这样做的原因很繁琐,但更难以纠正,但基本上:DC分量在DFT中仅表示一次,而大多数其他频率分量则在两次半振幅时分别表示两次(正频率和负频率) 。更加令人讨厌的例外是奈奎斯特频率,如果信号长度为偶数,则以全振幅表示一次,但如果信号长度为奇数,则以半振幅表示两次。如果要对振幅平均,那么所有这些都不会影响您:在线性系统中,两次代表会补偿一半的振幅。但是您要平均功率,即在平均之前对值进行平方,因此这种补偿无法实现。

我已经粘贴了所有代码这段代码还显示了如何使用一个numpy数组堆叠多个信号,从而解决了有关避免在多通道情况下出现循环的后续问题。请记住,正确的电源axis参数numpy.fft.fft()和我fft2ap()

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何将连续数字折叠到范围内并获得平均值

来自分类Dev

计算日期范围内的平均值

来自分类Dev

计算日期范围内的平均值

来自分类Dev

计算模式范围内的平均值

来自分类Dev

在多个范围内寻找平均值

来自分类Dev

熊猫-比较给定日期范围内小时平均值的平均值

来自分类Dev

如果与其关联的日期在日期范围内,则取值范围的平均值

来自分类Dev

如何使用LINQ获取日期范围内的平均值

来自分类Dev

Excel函数-如果日期在范围内,则显示平均值

来自分类Dev

获取特定日期范围内熊猫的平均值

来自分类Dev

MS Excel 2016:如何获取大量离散范围内的数字平均值?

来自分类Dev

ACCESS女士:计算不同日期范围内的过去年度平均值

来自分类Dev

如何使用Python生成具有特定平均值的范围内的数字?

来自分类Dev

从单独的输入文件计算特定行范围内的列平均值

来自分类Dev

如何取数据帧中落在特定容差范围内的行的平均值

来自分类Dev

scala spark - groupBy 查找日期范围内月份之间的平均值

来自分类Dev

计算每个指标平均值的最快方法

来自分类Dev

如何在python中具有特定平均值的范围内生成随机数?

来自分类Dev

如何在一系列特定的恒定宽度列范围内计算平均值?

来自分类Dev

Google表格列功能可使用当前行获取右侧范围内所有列的平均值

来自分类Dev

取值范围的平均值

来自分类Dev

在定义的时间范围内计算每日总和与一周中同一天的平均值之间的差异。SQL 10g Oracle

来自分类Dev

计算在定义的时间范围内一周中同一天的每日总和与平均值之间的差异。SQL 10g Oracle

来自分类Dev

查找范围内元素数量的最快方法

来自分类Dev

平均间隔内的多个平均值

来自分类Dev

平均间隔内的多个平均值

来自分类Dev

确定点给定半径内网格值平均值的最快方法

来自分类Dev

使用熊猫计算日期时间行平均值的最快方法

来自分类Dev

确定点给定半径内网格值平均值的最快方法

Related 相关文章

  1. 1

    如何将连续数字折叠到范围内并获得平均值

  2. 2

    计算日期范围内的平均值

  3. 3

    计算日期范围内的平均值

  4. 4

    计算模式范围内的平均值

  5. 5

    在多个范围内寻找平均值

  6. 6

    熊猫-比较给定日期范围内小时平均值的平均值

  7. 7

    如果与其关联的日期在日期范围内,则取值范围的平均值

  8. 8

    如何使用LINQ获取日期范围内的平均值

  9. 9

    Excel函数-如果日期在范围内,则显示平均值

  10. 10

    获取特定日期范围内熊猫的平均值

  11. 11

    MS Excel 2016:如何获取大量离散范围内的数字平均值?

  12. 12

    ACCESS女士:计算不同日期范围内的过去年度平均值

  13. 13

    如何使用Python生成具有特定平均值的范围内的数字?

  14. 14

    从单独的输入文件计算特定行范围内的列平均值

  15. 15

    如何取数据帧中落在特定容差范围内的行的平均值

  16. 16

    scala spark - groupBy 查找日期范围内月份之间的平均值

  17. 17

    计算每个指标平均值的最快方法

  18. 18

    如何在python中具有特定平均值的范围内生成随机数?

  19. 19

    如何在一系列特定的恒定宽度列范围内计算平均值?

  20. 20

    Google表格列功能可使用当前行获取右侧范围内所有列的平均值

  21. 21

    取值范围的平均值

  22. 22

    在定义的时间范围内计算每日总和与一周中同一天的平均值之间的差异。SQL 10g Oracle

  23. 23

    计算在定义的时间范围内一周中同一天的每日总和与平均值之间的差异。SQL 10g Oracle

  24. 24

    查找范围内元素数量的最快方法

  25. 25

    平均间隔内的多个平均值

  26. 26

    平均间隔内的多个平均值

  27. 27

    确定点给定半径内网格值平均值的最快方法

  28. 28

    使用熊猫计算日期时间行平均值的最快方法

  29. 29

    确定点给定半径内网格值平均值的最快方法

热门标签

归档