做嵌入式開發,經常需要通過邏輯分析儀對數字信號進行數據分析。如果信號源附近有強干擾源,並且邏輯分析儀濾波效果不好的話,獲取到的數字信號,經常帶有一些“毛刺”,這些“毛刺”信號根據干擾的強弱不同,持續時間可能會由幾納秒到幾百納秒不等。嘗試過在數字口加電容進行硬件濾波,電容加得太小,濾波不干凈;電容加得太大,信號失真嚴重。
通過觀察邏輯分析儀獲取到的波形可以看到,干擾信號一般是在信號跳變之后的一小段時間內出現(這是我所遇到的信號的情況),如下圖1所示信號由低變成高,2us內,都是干擾信號。實際上前面2 us內的電平信號應該是高電平。軟件濾波的目的,就是要將干擾信號還原成它原來的電平。

先將邏輯分析儀獲取到的數據,轉成csv格式的文件,命名為src_data.csv。src_data.csv 文件記錄的是每個信號跳變瞬間的時間和對應的電平狀態(0或1),如下圖2為src_data.csv的格式。

如果沒有邏輯分析儀,也可以通過將其他途徑獲取到的數據,以類似的格式保存。
實現算法:
1. 將信號產生的時間,轉換成統一的計時單位。
2. 截取每一個信號周期內高電平和低電平所占的時間。並按照信號產生的順序,依次存放在同一個列表(信號描述表)中。
3. 遍歷一遍信號描述列表,把小於xxns的低電平都認為是干擾信號。把這個低電平持續的時間,加到上一個高電平持續的時間里,並把這個低電平從列表中去掉。
4. 遍歷一遍信號描述表,把可能連續出現的連續相同電平合並。此時,信號描述表中的元素,都是按照高低高低這樣的排列。
源碼地址如下:https://git.oschina.net/liujiangyi123/digital_signal_filter/blob/master/digital_signal_filtering.py
