我談學習型紅外遙控(二)

      基於上一篇文章對紅外遙控的分析,由於用於存儲的FLASH大小有限,希望紅外學習部分用於存儲的內容能儘可能少。於是,需要對其進行壓縮。

     之前的思路是把每一個學到的電平都存儲到FLASH中,佔用空間比較大。所以考慮對學到的電平進行歸類,壓縮。

     通過對接收到的數據包分析,其中數據都是載波信息和閒置無載波信息間隔構成。我暫且將這樣的一對信息稱作“碼元”,所以一個數據包可以看成是由多個“碼元”構成。我的判定思路是:每次取一個碼元與之前已經確定的碼元種類進行比較,先比較碼元長度即兩種信息總的時長是否在誤差允許範圍內,若不在,則表明新的碼元種類出現,若在,再去比較碼元中兩種信息的時長是否在各自誤差允許範圍內,兩個中只要有一個不在其誤差範圍內,就判定新的碼元種類出現。碼元區分過程中,難點在於誤差範圍的設定。我的程序中設定了兩個誤差設定值,一個是碼元長度允許誤差COUPLEEROERAGE,一個是碼元中載波信息和閒置信息允許誤差SINGALERRORATE。設定COUPLEEROERAGE爲2ms,因爲有些紅外數據包,它的不同種類碼元間的時長最小誤差在2ms左右。基於相同思路,本打算給SINGALERRORATE也設定某個定值,開始時設定200us。但通過測試發現,有些紅外編碼分析的結果不理想,像紅外格式M50560,因爲我學習部分學了兩個數據包,發現長按情況下,數據包中兩個停止位的誤差允許達到3ms,若設定200us,學習之後會認爲這是一種新的“碼元”,導致分析錯誤。我發現出現這種情況的紅外編碼大都有個特點,就是它們停止位時長都會在20ms到50ms之間,所以我會判斷碼元中兩種信息的時長有無存在該範圍內的,如果有,則將SINGALERRORATE設爲3ms,如果沒有,則設定SINGALERRORATE設爲200us。

    之後按這種方式測試各紅外編碼格式,驗證解析成功!!微笑

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章