最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

嵌入式軟件開發(fā)常用算法---一維線性插值

2023-03-01 21:56 作者:6號課堂  | 我要投稿

各位朋友大家后,今天迎來了繼于最小二乘法之后的第二個算法,一維線性插值法(圖像處理會用到多維插值)。相信很多的朋友在項目開發(fā)的過程中會遇到,隨溫度變化傳感器的輸出數(shù)據(jù)比如電壓、電流、速度、光強、角度、加速度等信息就會隨之發(fā)生變化。這是由于溫度變化引起的傳感器溫漂現(xiàn)象,(基本上所有的電子元器件、傳感器都有溫漂),所以我們一般會用溫度補償算法來抑制溫漂。

? ? 下圖是DS18B20的溫度漂移曲線圖,可以看出隨著溫度的變化,溫度誤差沒有一定的線性度可言,進行溫度補償也是比較困難,那怎么才能解決這個問題呢?

?圖 1?DS18B20

? ? ? 要解決這個問題就不得不提兩個偉大的數(shù)學(xué)家,也就是伴隨我們大學(xué)幾年的恐怖存在:牛頓和尼布萊茨。

? ? ? ? ? 圖 2 ? 牛頓
圖 3 尼布萊茨


為什么要提這兩個死了也不讓活著的人好好活的人呢?,那是因為他們提出了微積分,即無限逼近的先進思想。這個思想在嵌入式開發(fā)過程中可以幫助我們解決大量的現(xiàn)實問題。
什么是一維線性插值法?一維線性插值是針對一維數(shù)據(jù)的數(shù)值常用處理方法,它根據(jù)一維數(shù)據(jù)序列中左右相鄰的兩個數(shù)據(jù)點,來估算這兩個點之間的任意點。說得再明白一點,兩點確定一條直線,也就是確定正比例函數(shù)。

圖 4 線性插值


? ? ? 那這與我們的微積分有什么關(guān)系呢?大家別著急嘛。請繼續(xù)往下看‘。

圖 5 ?微積分簡圖


? 大家一定還記得微積分的本質(zhì):微積分其實就是通過分割、求和、取極限的方式,進而將比較復(fù)雜的問題化簡為簡單問題。通過求解圖7陰影部分的長方形面積來無限逼近曲線部分面積。微積分的思想是這些長方形分的越窄,分的越越細它就越逼近曲線面積,最好能無限細。

? ? ?用它怎么解決我們的現(xiàn)實問題呢?大家請看圖7假設(shè)它是一個受溫度影響比較大的系統(tǒng),其中采集了10個點,由此我們來估計0-50度之間傳感器輸出的值。最簡單的方法就是分段函數(shù)了,這里的分段函數(shù)其實就是體現(xiàn)了微積分思想,我們采集到的點越多,分的函數(shù)段越多越接近傳感器的真實值。

? ? ??對于這個問題(溫度補償)來說,我們只需要將一維線性插值法和分段函數(shù)相結(jié)合就可以了,也就是對上述系統(tǒng)進行溫度補償。那具體的溫度補償函數(shù)線性關(guān)系式是什么樣子的呢?

(1)


? ? ?在該系統(tǒng)中每隔5度采集一次,假設(shè)第10度采集到的傳感器的值是S10,加號后面的一部分就是計算的增量部分,兩者相加就是我們所擬合的值,當(dāng)然這里是計算的是10-15度分段函數(shù),通過改該函數(shù)可以估算傳感器10-15度任意溫度的輸出數(shù)據(jù)。一個擁有溫補的系統(tǒng)中是由多個分段組成的。

要徹底完成溫度補償,我們這里所需要實現(xiàn)的其實是兩個函數(shù):1分段函數(shù)2.這個一維線性插值函數(shù)。
這里我們列出這兩個函數(shù)的代碼供大家參考和學(xué)習(xí)。
分段函數(shù)的代碼實現(xiàn)如下:


圖 5 分段函數(shù)

飛魚模擬了一組數(shù)據(jù)來說明上面算法的功能。請看下面數(shù)據(jù)

圖7 傳感器溫度曲線圖

? ? ? ? 假設(shè)X軸表示傳感器的溫度值,Y軸表示傳感器在該溫度對應(yīng)的數(shù)據(jù)輸出。工程實現(xiàn)過程中在傳感器的標(biāo)定階段,我們會把不同溫度點的值(圖7中Y軸數(shù)據(jù))存儲到FLASH中。使用時把FLASH中的這些數(shù)據(jù)讀出來放到數(shù)組中。然后再用分段函數(shù)和線性插值法計算傳感器的輸出,接下來我們說說具體實現(xiàn)過程。圖7所示傳感器在0-45度范圍內(nèi),采集了10個溫度點的數(shù)據(jù)。假設(shè)我們要計算27度時傳感器輸出值,上面的分段函數(shù)可以這么調(diào)用:subsection(0?,45,10 ,27, segment , ?output ),第一個參數(shù)是溫度的最小值,第二個參數(shù)是溫度的最大值,第三個參數(shù)是是多少個采樣點,第四個參數(shù)是傳感器當(dāng)前時刻的溫度值,第5、第6個是輸出信息。把上述入?yún)У椒侄魏瘮?shù)里面,可以發(fā)現(xiàn)該分段函數(shù)計算的輸出值,segment[0]為5,segment[0]為6,說明27度位于第5和第6個采樣點之間,out[0]為25,out[1]為30。說明27度在25度到30度之間的分段。確定了函數(shù)分段,接下來就可以采用線性插值法把傳感器的值計算出來。假設(shè)我們把Y軸的數(shù)據(jù)讀出來放在一個叫做Sensor_Val[10]的數(shù)組中,Sensor_Val[]={7,12,14,16,21,25,29,33,36,40}。將上述分段函數(shù)執(zhí)行的結(jié)果帶入到公式(1)中 S27?=?S25?+(?S30-S25)/(30-25)*(27-25);所以27度時傳感器的輸出為26.6。如果用折線圖表示擬合的結(jié)果如圖8所示:

圖 8 傳感器數(shù)據(jù)折線擬合


? ? ? ?? ?好了,今天的算法就分享到這里了,越是簡單的方法越是能解決我們的現(xiàn)實問題,大道至簡嘛。下面是飛魚的個人微信:fei_yu_90,歡迎技術(shù)交流。



嵌入式軟件開發(fā)常用算法---一維線性插值的評論 (共 條)

分享到微博請遵守國家法律
通渭县| 静宁县| 宜城市| 栾城县| 石家庄市| 太湖县| 海林市| 辉县市| 昌都县| 台北市| 镇巴县| 叙永县| 兴义市| 竹北市| 泾川县| 隆德县| 康保县| 漳州市| 栾城县| 云林县| 永宁县| 全椒县| 伊宁县| 江门市| 新丰县| 瓦房店市| 德江县| 沭阳县| 阜新| 阿克陶县| 丹东市| 临沂市| 南昌县| 仁怀市| 武强县| 通道| 呼伦贝尔市| 宜良县| 墨竹工卡县| 读书| 白沙|