求一个数组压缩算法!

2019-07-14 18:42发布

需求:规定一次波形显示的数据时231个点。算法要求:采集到的数值是可以确定的。10000个点以内的点数都压缩成231个点,比如(采了1W个点,压缩成231显示出来)(5000个点还是压缩成231个点显示出来)(500个点还是压缩成231个点显示出来),传进来的点数是不确定的,不能写死,但是可以确定是在1W以内的点数,
总之就是232-10000指点的点数都压缩成231个点来显示到屏幕上

  数学太差了,想了半天这种算法,但是画出来的波形总是和实际上显示的波形不太一样。

有没有大神指点,能有具体参考代码最好了!感激不尽。

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
3条回答
bzzgzs
1楼-- · 2019-07-15 00:03
采用下采样就可以了,多个点中取一个点
liujinyi016
2楼-- · 2019-07-15 03:54
你可以把你的采样点按显示点平分后,再计算平均值进行显示
灬今何在灬
3楼-- · 2019-07-15 05:32

unsigned char Compressed_array(unsigned char *array,unsigned char Len,unsigned char *array_New)
{
  unsigned int Multiple;
  unsigned short int i;
  unsigned short int Cnt;
  if(Len>10000||Len<232)return flase;//³¤¶ÈÅжÏ
  Multiple=(unsigned int)Len*10/231;  //µÃ³ö±¶Êý
  for(i=0;i<Len*10;)  //¿ªÊ¼Ñ¹Ëõ
  {
                if(Multiple<20)//±¶Êý²»³¬¹ý2
                {       
                                array_New[i/10]=array[Cnt/10];
                                i+=10;
                                Cnt+=Multiple;
                }
                else //Èç¹û±¶Êý´óÓÚ2
                {
                        if(i%(Multiple)==0)//ÿ¹ý±¶Êý³éÈ¡Ò»¸öÖµ
                        {
                                array_New[Cnt++]=array[i/10];
                        }
                        i++;
                }
                if(Cnt>=231)return true;
  }
}
精度你自己去优化咯

一周热门 更多>