解释C ++自相关代码

时间:2011-02-11 17:52:04

标签: c++ actionscript frequency

我发现了这个自相关代码,但我根本不知道什么是“float_vec_t”,例如。是一类还是什么? (我正在尝试将其翻译为Action-script或JavaScript,我很清楚)

class LPCAnalysis{
    public:
      float_vec_t LPCAnalysis::autoCorrelation(const float_vec_t &x);

};


/* Calculate the (UN-normalized) autocorrelation for a frame of a
signal   */

float_vec_t LPCAnalysis::autoCorrelation(const float_vec_t &x)
{
    short order=x.size();

    float_vec_t R(order);
    float sum;
    int i,j;

    for (i=0;i<order;i++) {
        sum=0;
        for (j=0;j<order-i;j++) {
            sum+=x[j]*x[j+i];
        }
        R[i]=sum;
    }
    return R;
}

下面是我目前的进展:

function LPCAnalysis (x:Array) {

    var order:int = x.length

    var R:Array= []
    var sum:Number
    var i:int
    var j:int

    for (i=0;i<order;i++) {
        sum = 0
        for (j=0;j<order-i;j++) {
            sum+=x[j]*x[j+i]
        }
        R[i] = sum
    }
    return R

}

另外,如何从阵列R中提取最终频率? (如果R是一个数组)。我应该给这个函数带来什么参数? FFT结果,麦克风信号?

2 个答案:

答案 0 :(得分:2)

您需要找到float_vec_t的声明,以确定是什么(尽管我认为它是std::vector<float>)。尝试对源代码进行全局搜索,以查找声明的位置。

“提取频率”;自相关并不直接给你频率。您需要在R上执行FFT(这将为您提供功率谱密度),然后搜索峰值。在实践中,您可能还需要一些其他处理,例如在执行所有操作之前将窗口函数应用于数据。

答案 1 :(得分:2)

根据其用法,它是一个类/对象。它看起来像是浮标的标准Vector类。

http://newsgroups.derkeiler.com/Archive/Comp/comp.dsp/2006-06/msg01218.html

我发现了这个:

typedef std::vector<float> float_vec_t;

这意味着它几乎肯定是一个std :: vector,它在javascript中只是转移到标准对象,因为javascript不需要对矢量进行任何特殊处理。