觉晓01 2023-06-05 20:54 采纳率: 0%
浏览 63
已结题

正弦波的峰值查找算法

我在做公司的一个项目时遇到一个问题,我用示波器抓取到了正弦波数据,在我的python程序中是一个数组,长度很长,有20M个数据。我需要得到这组正弦波数据的峰峰值,我已经用过了直接求最大最小值的方法,但我对此算法并不满意,因为不够高大上。即我需要一个合适的峰值查找算法,要求这个算法具有较低的时间复杂度(如果时间复杂度确实无法降下来,也行,我可以用多线程加快计算时间,但最好能有较低的时间复杂度),如果您知道的话,告诉我算法的名字,如果能加上算法的代码和思想更好。

  • 写回答

10条回答 默认 最新

  • Jackyin0720 2023-06-05 21:45
    关注
    获得1.50元问题酬金

    需要的是峰值搜索算法(Peak Search Algorithm),以下是一个简单的实现:

    def find_peak_valley(arr):  
        if len(arr) < 3:  
            return arr  
      
        # Initialize variables  
        max_val = max(arr)  
        min_val = min(arr)  
        peak_val = None  
        valley_val = None  
      
        # Binary search for peak and valley values  
        mid = len(arr) // 2  
        while mid > 0:  
            if arr[mid-1] < arr[mid] < arr[mid+1]:  
                peak_val = arr[mid]  
                valley_val = arr[mid-1] if arr[mid-1] < arr[mid] else arr[mid+1]  
            elif arr[mid-1] < arr[mid] and arr[mid] < arr[mid+1]:  
                peak_val = arr[mid]  
                valley_val = arr[mid+1] if arr[mid+1] < arr[mid] else arr[mid-1]  
            elif arr[mid-1] > arr[mid] and arr[mid] > arr[mid+1]:  
                valley_val = arr[mid]  
                peak_val = arr[mid-1] if arr[mid-1] > arr[mid] else arr[mid+1]  
            elif arr[mid-1] > arr[mid] and arr[mid] < arr[mid+1]:  
                valley_val = arr[mid]  
                peak_val = arr[mid+1] if arr[mid+1] > arr[mid] else arr[mid-1]  
      
            max_val = max(arr[0:mid], max_val) if peak_val <= max_val else peak_val  
            min_val = min(arr[0:mid], min_val) if valley_val >= min_val else valley_val  
      
            mid = len(arr) // 2 - mid + 1 if mid > 0 else len(arr)  
      
        return [peak_val, valley_val, max_val, min_val]
    
    评论

报告相同问题?

问题事件

  • 系统已结题 6月13日
  • 创建了问题 6月5日

悬赏问题

  • ¥15 oracle数据库查询语句问题
  • ¥15 有没有c++绘制算法的佬们吗救孩一下
  • ¥15 android 蓝牙闪退
  • ¥15 绝缘子污秽comsol仿真参数
  • ¥15 Fatal error in Process MEMORY
  • ¥15 labelme生成的json有乱码?
  • ¥30 arduino vector defined in discarded section `.text' of wiring.c.o (symbol from plugin)
  • ¥20 如何训练大模型在复杂因素组成的系统中求得最优解
  • ¥15 关于#r语言#的问题:在进行倾向性评分匹配时,使用“match it"包提示”错误于eval(family$initialize): y值必需满足0 <= y <= 1“请问在进行PSM时
  • ¥45 求17位带符号原码乘法器verilog代码