我发现了这个自相关代码,但我根本不知道什么是“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结果,麦克风信号?
答案 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不需要对矢量进行任何特殊处理。