2016-11-15 63 views
1

目标:找到复合摆中传感器数据的峰值(v,t)。CSV振荡数据,用excel找到简单峰值

使用的传感器每秒提供1024个脉冲数据。测试的时间从15秒到1分钟不等,所以很多行都写入文件。我有一个在Excel中打开的是48000行。当绘制时,这会产生经过0的阻尼振荡图(有+ v和-v)。我想自动找到峰值(v,t),并将它们写在正确的位置

所有的数据分为两列,时间在左边,速度在右边。有时会出现长峰,在再次下降之前,最大速度会保持不变。我想绝对的高峰,所以平均的时间。 Capture from excel

我曾尝试:

在细胞向右

= IF(AA6 < = AA5; 1; 0)

并将细胞于该

右=(IF((OR(AND(AB5 = 1; AB6 = 0); AND(AB5 = 0; AB6 = 1))); 1; 0)

这里的想法是它产生一个0或1。当两个单元格都是1时,那应该是最高点,但是由于速度在高峰时段保持不变,所以不起作用。

有没有一种简单的方法可以在Excel中执行此操作,还是应考虑其他方法(VBA)?

预先感谢您!

回答

1

谢谢您的快速回答。

我确实在VBA中完成了它,但没有用你的方法。我使用的基本逻辑对我的数据应用来说工作得很好。代码可能不是最优的,但我相当满意。

下面是代码:

私人小组peak_find()

Dim j, k As Integer 
Dim t As Double 

j = 0 



    Do While Not IsEmpty(ActiveCell.Value) 

      If ActiveCell.Value = ActiveCell.Offset(1, 0).Value Then 

       k = 0 


       Do While ActiveCell.Value = ActiveCell.Offset(k, 0).Value 

        k = k + 1 

       Loop 




       If ActiveCell.Value > ActiveCell.Offset(k, 0).Value And ActiveCell.Value > ActiveCell.Offset(-1, 0).Value And ActiveCell.Value > 0 Then 


        k = k - 1 
        Range("E1").Offset(j, 0).Value = ActiveCell.Value 

        t = (ActiveCell.Offset(0, -1).Value + ActiveCell.Offset(k, -1))/2 

        Range("D1").Offset(j, 0).Value = t 

        j = j + 1 


       ElseIf ActiveCell.Value < ActiveCell.Offset(k, 0).Value And ActiveCell.Value < ActiveCell.Offset(-1, 0).Value And ActiveCell.Value < 0 Then 


        k = k - 1 

        Range("G1").Offset(j, 0).Value = ActiveCell.Value 

        t = (ActiveCell.Offset(0, -1).Value + ActiveCell.Offset(k, -1).Value)/2 

        Range("F1").Offset(j, 0).Value = t 


       ElseIf ActiveCell.Value > ActiveCell.Offset(k, 0).Value And ActiveCell.Value < ActiveCell.Offset(-1, 0).Value Then 


      End If 


     ElseIf ActiveCell.Value > ActiveCell.Offset(1, 0).Value And ActiveCell.Value > ActiveCell.Offset(-1, 0).Value Then 


      Range("E1").Offset(j, 0).Value = ActiveCell.Value 
      Range("D1").Offset(j, 0).Value = ActiveCell.Offset(0, -1).Value 


      j = j + 1 


     ElseIf ActiveCell.Value < ActiveCell.Offset(1, 0).Value And ActiveCell.Value < ActiveCell.Offset(-1, 0).Value Then 


      Range("G1").Offset(j, 0).Value = ActiveCell.Value 
      Range("F1").Offset(j, 0).Value = ActiveCell.Offset(0, -1).Value 




     End If 


     ActiveCell.Offset(1, 0).Activate 




    Loop 

    Range("D1").Activate 

末次

它可能是,如果我避免与活细胞的工作速度更快,但我会在有效的后来。它为我节省了很多时间。

2

假设你将有几个MAXes和Mins,你不能用简单的电子表格公式来完成。你需要做一些VBA来:

  1. 计算频率/周期,

  2. 使用结果来设定在其中你寻找一个最大/最小范围的大小,

  3. 扫描您的数据以查找最大值和最小值。

最好的办法是执行一个文方拟合,提取频率和相位,并利用所产生的参数来养活,会给你最大和分钟的功能。