我使用Arduino Leonardo和GPSTiny ++库来解析我的GPS接收器中的NMEA字符串。在这段代码中,我对锁定的卫星的所有卫星SNR数进行平均(用于导航)。平均值提供了一些关于整体性能的一般信息,但我也非常关注avg Top 4值。
我相信我需要做一些排序算法。通过前4名增加并平均这些值。
这是我的输出窗口的片段: 12/13 0.92 SNR = 17 10 27 27 30 29 25 27 33 0 0 0 31 25.60 0.00
倒数第二个是平均值。
我如何开始?
int totalSNR = 0;
float avgSNR = 0;
int count = 0;
Serial.print(F(" SNR="));
for (int i = 0; i < MAX_SATELLITES; ++i)
if (sats[i].active)
{
if (sats[i].snr > 0) {
count++;
totalSNR = totalSNR + sats[i].snr;
}
Serial.print(sats[i].snr);
Serial.print(F(" "));
}
avgSNR = float(totalSNR) / float(count);
Serial.print(avgSNR);
答案 0 :(得分:0)
你会做这样的事情:
使用您的值创建一个数组,然后对该数组进行排序。
这将为您提供一系列值,这些值以元素编号1中的最高值和最后一个元素中的最低值排列
前4名将是您的前4名最高值。然后你可以将它们加在一起并除以4得到最高4的平均值
确保数组大小与&#34; MAX_SATELLITES&#34;相同。
for (int i = 0; i <= MAX_SATELLITES; ++i)
{
for (int j = 0; j < MAX_SATELLITES; ++j)
{
if (VALUES_ARRAY[j] < VALUES_ARRAY[j+1])
{
VALUE_HIGH = VALUES_ARRAY[j+1];
VALUE_LOW = VALUES_ARRAY[j];
else
VALUE_HIGH = VALUES_ARRAY[j];
VALUE_LOW = VALUES_ARRAY[j+1];
}
VALUES_ARRAY[j] = VALUE_HIGH;
VALUES_ARRAY[j+1] = VALUE_LOW;
}
}