空氣淨化器和卡爾曼濾波器

前段北京的霧霾非常嚴重。大家紛紛把空氣淨化器打開。在路上的時候,我突然想到幾年前的關於小米空氣淨化器造假的新聞,感覺這是一個非常好例子來幫助工科生來理解一個重要的算法:卡爾曼濾波器。

空氣淨化器和卡爾曼濾波器

小米空氣淨化器

大概是三年前的這個時候,號稱中國打假第一人王海發佈了一條微博。內容大概是一個用戶偶然忘了把小米空氣淨化器的濾芯包裝拆開了,但是發現淨化器運行一會兒之後,上面顯示的空氣質量的燈,就從紅燈(汙染嚴重)變綠燈了(空氣質量好)。

空氣淨化器和卡爾曼濾波器

王海關於小米造假的微博

緊接著,科技媒體泡泡網做的一個測評也證明了這一點:

在不拆除濾芯膜的情況下,小米淨化器打開後APP顯示空氣中汙染物的濃度,隨著運行時間的增加,不斷下降。

一時出現了很多帖子,都是說小米空氣淨化器自身的PM2.5檢測數據與實際出入巨大。一時間網上紛紛對小米造假表示憤慨,都對小米空氣淨化器的淨化效果產生了很大的疑慮。

智米科技,也就是生產小米空氣淨化器的公司的CEO蘇峻,通過微博回應稱:

不拆除濾芯塑料膜使用時,傳感器檢查到的空氣質量也會由於顆粒物沉澱和局部空氣流動而發生變化。

不過,該條微博在不久後又被刪除。小米公司公共關係部的一位負責人向記者解釋,刪除微博是因為其中一些內容過於技術性,讀者難以理解,發佈之後覺得不合適,所以刪除了。他同時強調,小米的空氣淨化器產品不存在質量問題。

後來事情出現了部分反轉:很多網友,包括官方機構都用先進的PM2.5檢測儀器對小米空氣淨化器的效果做了評測。評測結果是,

正常工作(拆了濾芯塑料膜)之後的小米空氣淨化器的確有效,而且效果還相當不錯。

好了,所有的事實擺在這裡了,大家怎麼看呢?

基於以上的事實,一個比較客觀的結論是,小米空氣淨化器在淨化效果上有效,但是在顯示效果上面存在問題。

能在網上找到的基本上也是這個觀點,但是繼續往下深挖的就沒有了。我今天接著這個話題來好好給大家捋一捋。

這裡值得我們理科生思考的問題是,

小米的空氣淨化器APP給出的空氣質量,到底是什麼決定的呢?

通常人們的理解是,肯定是根據檢測空氣質量的傳感器來的。測的多少就是多少嘛。這個從大體上來說沒錯,讓我們先來看一下PM2.5是如何檢測的。

空氣中漂浮著各種大小的顆粒物,PM2.5是其中較細小的那部分。要想測定PM2.5的濃度,需要分兩步走:

第一步:把PM2.5與較大的顆粒物分離;
第二步:測定分離出來的PM2.5的重量。

目前,各國環保部門廣泛採用的PM2.5測定方法有三種:重量法、β射線吸收法和微量振盪天平法。這三種方法的第一步是一樣的,區別在於第二步。具體的方法從網上能夠找到,我就不具體闡述了。這三種方法都被納入了檢測標準。

然而可惜的是,這三種方法所需要的設備都太貴了。像空氣淨化器和絕大部分手持小型PM2.5檢測儀器,都是用的是另外一種未被納入標準的方法:光散射法。

該測定方法的原理是:空氣中的顆粒物濃度越高,對光的散射就越強。當直接測定空間內光的散射後,理論上就可以算出各種顆粒物的濃度。

這個方法簡單而且器件便宜。但在實際運用中有一個最大的問題,就是不準!

由於光的散射與顆粒物濃度之間的關係受到諸多因素的干擾,例如顆粒物的化學組成,形狀比重粒徑分佈等等,例如顆粒物可能是煤粉,可能是尾氣,可能是沙土。他們的比例是不確定的。

而且光散射的問題是,顆粒物形狀會導致不同的散射率,顆粒物大小也會導致不同的散射率,空氣溼度也會影響結果。

有研究者做過理論計算。利用光散射儀測定PM25,至少有30% ~ 40%的不確定性,這種不確定性是這類儀器固有的,是不可消除的。

好了,到現在我們似乎已經可以得出結論了,因為測量儀器不準,才會導致小米空氣淨化器的APP顯示出問題。

可是如果你再進一步想的話,似乎還是有點不對勁。我們回顧一下前面提到的泡泡網做的測評:

在不拆除濾芯膜的情況下,小米淨化器打開後APP顯示空氣中汙染物的濃度,隨著運行時間的增加,不斷下降。

這個現象,就不能用測量儀器不準來解釋了。同時,我認為智米科技的CEO蘇峻的回應

,“不拆除濾芯塑料膜使用時,傳感器檢查到的空氣質量也會由於顆粒物沉澱和局部空氣流動而發生變化”這也是不準確的。

因為沒拆開濾芯膜,淨化器沒工作,空氣傳感器檢查到的空氣質量會發生變化,但不應該呈現下降的趨勢。

就說明,還有一股神奇的力量,在使得小米淨化器全力工作的時候,讓APP顯示的數值下降了。

這就是算法的力量

儘管我沒有看到小米APP顯示出的數值的算法(網上也不會公佈),但是我可以幾乎99%的肯定,它的算法是這樣的:

APP給出的實時空氣質量,是由兩個途徑得到的信息綜合的結果。第一個信息是空氣質量傳感器測到的當前的空氣質量,第二個信息是根據當前該淨化器工作的時間長度、風力大小等因素推算出來的當前的空氣質量。

具體的說,當把小米空氣淨化打開以後,APP一方面會實時收集傳感器測到的空氣質量。另一方面, APP還會結合你設定的強度大小和持續時間來對當前的傳感器的值進行修正。開的時間越長,強度越大,那麼APP就會自動的將當前傳感器的測量汙染濃度降低一個等級再輸出。

這就是為什麼一個濾芯膜沒有拆開的小米淨化器打開以後,輸出的汙染濃度會隨著時間的長度不斷下降的真正原因。

你說小米這樣太無賴了,怎麼能這麼做呢?但是你實際想一想,這種思想是非常精妙的:

因為大多數人只能想到傳感器的測量中包含信息,但忽略了淨化器的運行的時間和強度也包含信息。這個信息,就是空氣質量的變化規律。這個規律如果利用的好,的的確確可以幫助我們提高精度。

有效的綜合兩種信息:(1)當前的測量得到的結果,(2)根據規律推測出來的結果,這就是卡爾曼濾波器的核心思想。

我們舉一個最常用的定位的例子。如果你在一個沙漠裡開車,你怎麼能知道自己的位置呢?大家首先想到的就是GPS。GPS通過測量多顆衛星和車的距離,可以給你提供實時的車的位置。但是GPS提供的信息是包含很多噪聲,並且誤差很大的。

我們還有沒有別的信息來源呢?有的。這個來自於車子提供的信息。

例如,我們可以拿到車的速度(大小和方向)。這個信息可以幫助我們提高定位精度。具體的,假若上一時刻的位置我們知道了,當前的位置,除了用GPS當前直接的位置之外,我們還可以根據車的速度的大小和方向來推測出來!

把這兩個信息融合起來,就可以得到更準確的定位結果。

卡爾曼濾波器就是這樣的。卡爾曼濾波器的目的,是要得到對某一個量的估計,這個量在卡爾曼濾波器裡被稱為狀態。為了得到狀態的估計,卡爾曼濾波器利用了兩個信息,一個是狀態自身的變化規律,另外一個是觀測

稍微具體一點,卡爾曼濾波器包含兩個方程,一個是狀態方程,一個是觀測方程。狀態方程,描述了狀態的變化規律,而觀測方程,則描述了狀態和觀測之間的關係。

現在我們就很清楚了,卡爾曼濾波器在每一時刻的狀態估計,都結合了這兩個信息。

簡單的說,通過狀態方程,卡爾曼濾波器可以估計出當前的狀態,通過觀測方程,卡爾曼濾波器也可以推測出來當前的狀態,然後卡爾曼濾波器把這兩個信息結合起來,就得到了一個最終的狀態估計。

有人問,這兩個信息是如何結合的呢?非常簡單,就是看這兩個信息的準確度:

1. 如果描述狀態演化規律的狀態方程很準確,那麼我們就更有理由相信由狀態方程得到的估計,這時候就把這個估計的權重加大,而把觀測得到的估計的權重降低。
2. 如果我們認為觀測很準,那麼我們就把由觀測方程得到的估計的權重加大。這就是卡爾曼濾波器的核心思想。

卡爾曼濾波器的思想,在實際中有非常多的應用。我小孩不到一歲的時候,因為不會說話,我就用卡爾曼濾波器的思想來推斷她是否餓了。

具體是怎麼做的呢?和卡爾曼濾波器一樣,我結合了兩種信息。第一種信息是當前的觀測:我會觀察她當前的表情、是否哭鬧,以及哭鬧的方式和程度,來判斷其是不是餓了。這個就是利用卡爾曼濾波里的觀測方程。例如她哭得很厲害,那麼很有可能是餓了。

第二種信息,我會結合上次餵奶的時間,以及孩子飢餓程度的變化規律來進行推斷。一般而言,孩子剛餵過奶的時候是飽的,但是隨著時間的推移,飢餓的程度會慢慢加深,直到下一次餵奶。這就是利用卡爾曼濾波的

狀態方程來做推斷。

例如,如果剛剛餵過奶,那麼她餓的可能性比較低,而如果已經四個小時沒有喝奶了,那麼餓的概率就很高了。

然後我會把這兩個信息結合起來,做出更準確的判斷。

好了,今天通過小米空氣淨化器的例子,我講到了卡爾曼濾波的原理,還有我判斷孩子是否餓了的方式。總體而言,這些判斷,都是結合了兩個不同的信息來源:事物本身的變化規律,以及觀察到的現象。將這兩種信息源有效的融合,可以幫助我們做出更準確的判斷。

如果大家有收穫的話,請把鏈接發給你周圍的人吧。


分享到:


相關文章: