我需要实现一个实时同步正交检测器。该检测器接收来自PCI ADC的输入数据流,并返回谐波w
的幅度。以下是简化的C++代码:
double LowFreqFilter::process(double in)
{
avg = avg * a + in * (1 - a);
return avg;
}
class QuadroDetect
{
double wt;
const double wdt;
LowFreqFilter lf1;
LowFreqFilter lf2;
QuadroDetect(const double w, const double dt) : wt(0), wdt(w * dt)
{}
inline double process(const double in)
{
double f1 = lf1.process(in * sin(wt));
double f2 = lf2.process(in * cos(wt));
double out = sqrt(f1 * f1 + f2 * f2);
wt += wdt;
return out;
}
};
我的问题是计算
sin
和cos
太耗费时间了。有人建议我使用预先计算好的sin
和cos
表,但可用的ADC采样频率不是w
的倍数,因此存在碎片拼接问题。是否有快速计算sin
和cos
的替代方法?如果有关于如何改进这段代码的性能的任何建议,我将不胜感激。
更新
不幸的是,在代码中,我犯了错误,删除过滤调用后,代码失去了意义。感谢Eric Postpischil的指正。