欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 13325|回復: 1
收起左側

C語言全程線性分段插值算法

[復制鏈接]
ID:65608 發表于 2014-9-13 01:09 | 顯示全部樓層 |閱讀模式
  解決傳感器數據線性不好或非線性問題,實現低次多項插值算法,其曲線逼近程度即插值函數與原函數誤差基本滿足一般的工業控制場合需要。此算法占用系統資源少,在數據采集和數據處理等工業控制領域,往往使用單片機或嵌入式系統等資源受限處理器,通過分段線性插值算法簡化原函數,很多乘除法運算優化成加減法,減少計算量,在沒有乘法器的單片機上也能有很好的表現。
int linear_x8_y8(uint8_t xn,uint8_t x1,uint8_t x2,uint8_t y1,uint8_t y2)
{
    int yn;
    uint8_t tmp;
    if(xn<x1)
    {
        yn=y1;
    }
    else if(xn>x2)
    {
        yn=y2;
    }
    else
    {
        if(y1<y2)
        {
            yn=y2-y1;
            tmp=xn-x1;
            yn=yn*tmp;
            tmp=x2-x1;
            yn=yn+(tmp/2);
            yn=yn/tmp;
            yn=y1+yn;
        }
        else
        {
             yn=y1-y2;
            tmp=xn-x1;
            yn=yn*tmp;
            tmp=x2-x1;
            yn=yn+(tmp/2);
            yn=yn/tmp;
            yn=y1-yn;
        }
    }
    return(yn);
}
int lin_clac_x8_y8(uint8_t xn,uint8_t *queue_x,uint8_t *queue_y,uint8_t n)
{
    uint8_t i;
    int yn;
    for(i=1;i<(n-1);i++){
        if(xn<=queue_x[i])break;}
        yn=linear_x8_y8(xn,queue_x[i-1],queue_x[i],queue_y[i-1],queue_y[i]);
        return (yn);
}
調用示例: uint8_t x[15]={0,52,58,66,72,80,87,92,99,115,139,150,168,186,214,248},y[15]={0,68,73,81,87,94,101,108,114,131,153,166,183,202,229,263};
resul=lin_clac_x8_y8(resul,(uint8_t*)x,(uint8_t*)y,15);


回復

使用道具 舉報

ID:139339 發表于 2017-7-30 16:51 | 顯示全部樓層
上述的x1,x2,y1,y2都是采樣點嗎?或者說是第幾次采樣的數據?
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表