儀器儀表的程式上中常用的線性擬合方法

2021-10-25 06:05:32 字數 1521 閱讀 6328

在測量儀器上經常會用到線性擬合,通過測量的標準儀器標定出幾個點,寫進mcu的flash裡面,比如說採到adc的值500對應標準鹽溶液濃度的10%,1000對應鹽溶液濃度20%,如果測量得知中間的值都是線性的,那麼adc採到的值750,就對應濃度15%。

線性擬合分為兩種情況,一種是整個量程線性度都非常的好,那麼只需計算出乙個k值就好,然後其他的點根據公式就可以計算出來,二是整個量程線性度不好,需要分段計算k值,那麼這就需要多段線性擬合。線性相關的程度可以通過matalab的curvefiting工具來幫你自動計算出k值,然後看rms的大小表示出的相關度的大小,也就是線性擬合出來的誤差。這個curvefiting的使用後面我電腦裝上matalab再在這裡補充上,這個工具確實很重要的。

1、整個量程線性度都很好的情況。

以我之前做過的乙個雷射測距儀的溫度補償為例,首先以室溫25℃測出的距離為標準,溫度公升高距離增加,溫度降低距離減小,比如測得資料如下:

10℃     900mm

15℃     902mm

20℃     904mm

25℃     906mm

30℃     908mm

35℃     910mm

40℃     912mm

從資料可以看出溫度變化5℃時,距離也會增加或者減小2mm,也就是k=2/5=0.4,那麼首先機器在室溫標準距離時就需要記錄標定時的溫度t,然後補償的時候,根據當時的溫度與標定時的溫度做差,例如當前溫度是32℃,標準時的溫度是25℃,那麼相減就是7攝氏度,然後再乘以0.4,就是變化2.8mm,所以最終的距離就是906mm+2.8mm=908.8mm。實際中的k值計算可以直接通過matalab的curvefitting工具自動計算出來的。

2、多段線性擬合

原理和多段擬合差不多,原因是從曲線看,不同量程段的線性度有差異的,下面我貼一下我的多選線性擬合的**:

u16 fitting_curve(u32 num)//多段線性擬合

; for( number=1; number= numr)

number = numr-1;

kr = (number_2[number] - number_2[number-1]);

kr = kr/(data_buff[number] - data_buff[number-1]);

br = (number_2[number-1] - kr * data_buff[number-1]);

_main_pro.salinity_double = kr * num + br;

result = (u16)_main_pro.salinity_double;

/* if((result%10)<5)

result = result/10;

else

result = result/10 + 1;

if((result_current - result) * (result_current - result) >= 4)

else

*/ return result;

}

儀器儀表資訊化系統對企業的三大好處

儀器是認識世界的工具,是科學研究的 先行官 同時,儀器還是工業生產的 倍增器 是軍事上的 戰鬥力 是現代社會活動的 物化法官 這些在顯微鏡 電氣控制 數控系統 衛星等儀器的應用上,就能夠證明,可以說生活的方方面面都涉及到了儀器儀表的使用,這也就決定著,儀器儀表行業這塊蛋糕注定不好啃,那麼,對於儀器儀...

FrameBuffer程式設計二(簡單的程式上)

1.framebuffer裝置介紹 2 裝置的基本用法 顯然,用上述方法使用螢幕記憶體並不經濟方便。在讀或寫之前持續的定址 見man lseek 將會導致很多的開銷。這就是為什麼你要對映你的螢幕記憶體。當你將螢幕記憶體對映到你的應用程式時,你將得到乙個直接指向螢幕記憶體的指標。在我們可以對映螢幕記憶...

C 呼叫其他程式,比如控制別的程式上的按鈕

dllimport user32.dll entrypoint findwindow setlasterror true private static extern intptr findwindow string lpclassname,string lpwindowname dllimport ...