我在做一个信号处理的程序,将采集的信号做完FFT变换之后存在一个数组里(下标表示频率,数组元素表示峰值),现在需要显示这个数组里的十个最大峰值和对应的频率,请问有没有高效率一点的方法呢?求源码!

解决方案 »

  1.   

    楼主这个问题比较具有挑战性;呵呵;什么叫高效的;我觉得下面这种方法可以用;
    定义一个数组max【10】用来存放10个最大值;其中max【1】最大;max【10】最小
    用循环处理;在发现有比max【10】更大的值;让该数值跟max【1】..max【9】进行重新排序;
      

  2.   

    快速排序法,最快的排序方法。
    说明:对整形数组A进行排序procedure QSort(var A: array of Integer);  procedure QuickSort(var A: array of Integer; iLo, iHi: Integer);
      var
        Lo, Hi, Mid, T: Integer;
      begin
        Lo := iLo;
        Hi := iHi;
        Mid := A[(Lo + Hi) div 2];
        repeat
          while A[Lo] < Mid do Inc(Lo);
          while A[Hi] > Mid do Dec(Hi);
          if Lo <= Hi then
          begin
            VisualSwap(A[Lo], A[Hi], Lo, Hi);
            T := A[Lo];
            A[Lo] := A[Hi];
            A[Hi] := T;
            Inc(Lo);
            Dec(Hi);
          end;
        until Lo > Hi;
        if Hi > iLo then QuickSort(A, iLo, Hi);
        if Lo < iHi then QuickSort(A, Lo, iHi);
        if Terminated then Exit;
      end;begin
      QuickSort(A, Low(A), High(A));
    end;
      

  3.   

    把你数组里的值读到一张表里XTableName
    然后,select top 10 from XTableName oder by XFieldName Desc
    就可以了,简单吧!(哈哈)
      

  4.   

    47522341(睡到8:30) 是目前找到的最好方法,在发现有比max【10】更大的值;让该数值跟max【1】..max【9】进行重新排序可以找到更快的办法,但已经没有意义 yoic(我是一棵菠菜,菜,菜,菜,菜,菜,菜) 听说过一种排序的算法,以为天下的事情都是在排序!dancedog(猪熔鸡) 学过数据结构,但没有学过使用自己的大脑!bcghb 认识了斧子,就觉得所有的问题都是钉子!
      

  5.   

    还是hiflower理解我,就是这个意思,你的方法看来不错,我马上试试。一解决就给分
      

  6.   

    TO:csntgao(小高) 
    "认识了斧子,就觉得所有的问题都是钉子!",哈哈哈!
    谢谢你对我的评价,其实这也是解决问题的一种方式,我们不一定都要落俗套!
      

  7.   

    今天突然发现,我要求的频率还不仅仅是用下标表示的整数,我师兄给我出的题目原来是要求出一长串数字(信号FFT变换后的数)里的前十个最大值,而且要把这十个值对应的频率也记下来,而这十个频率值也有小数,有做过这方面开发的同志点播一下,好吗?