小编典典

平均角度…再次

algorithm

我想计算一组角度的平均值,该角度 代表源方位角(0到360度)-(类似于风向)

我知道它已经被讨论过(几次)。公认的答案是 从各个角度计算单位矢量,并取其平均值的角度

但是,此答案以非直观的方式定义了平均值。0、0和90的平均值将是 atan((sin(0)+ sin(0)+ sin(90))/(cos(0)+
cos(0)+ cos(90)))= atan(1 / 2)= 26.56度

我希望0、0和90的平均值为30度。

因此,我认为再次提出这个问题是很公平的:您将如何计算平均值,因此此类示例将给出直观的预期答案。

编辑2014:

提出这个问题后,我在CodeProject上发表了一篇文章,提供了详尽的分析。本文研究了以下参考问题:

  • 给定在2000年美国发生的每个出生的时间[00:00-24:00]-计算平均出生时间
  • 给定从固定发射器到固定接收器的方向测量的多个集合,请使用具有环绕正态分布误差的测量技术–估计方向。
  • 给定两点之间由“普通”人类做出的方位角估计的多个集合(假设遭受包裹的截断的正态分布误差)–估计方向。

阅读 352

收藏
2020-07-28

共1个答案

小编典典

谢谢大家帮助我更清楚地了解我的问题。

我找到了想要的东西。这称为三 田法

输入和输出在[0..360)范围内。

该方法适用于平均使用恒定采样间隔采样的数据。

该方法假定连续采样之间的差异小于180度(这意味着如果我们采样速度不够快,则采样信号的330度变化将被错误地检测为另一个方向的30度变化,并且在计算中插入错误)。
奈奎斯特-香农采样定理有人吗?

这是一个c ++代码:

double AngAvrg(const vector<double>& Ang)
{
    vector<double>::const_iterator iter= Ang.begin();

    double fD   = *iter;
    double fSigD= *iter;

    while (++iter != Ang.end())
    {
        double fDelta= *iter - fD;

             if (fDelta < -180.) fD+= fDelta + 360.;
        else if (fDelta >  180.) fD+= fDelta - 360.;
        else                     fD+= fDelta       ;

        fSigD+= fD;
    }

    double fAvrg= fSigD / Ang.size();

    if (fAvrg >= 360.) return fAvrg -360.;
    if (fAvrg <  0.  ) return fAvrg +360.;
                       return fAvrg      ;
}

在第51页的http://www.epa.gov/scram001/guidance/met/mmgrma.pdf上对此进行了说明

感谢MaR将链接发送为评论。

如果采样数据恒定,但是我们的采样设备的Von
Mises分布
不准确,则单位矢量计算将是适当的。

2020-07-28