QuakeWatch 是一個用於處理 ES-Net 地震感測器資料的 Python 應用程式,支援即時接收、解析和視覺化三軸加速度與震度資料。ES-Net 使用二進位格式傳輸地震感測器資料,包含精確的 NTP 時間戳記。
專案名稱: QuakeWatch(地震監看系統)
語言: Python 3
用途: 地震感測器資料的即時處理與視覺化
- Python 3.6 或更高版本
- 序列埠連接(USB 或藍牙)
pip install -r requirements.txtpyserial: 序列埠通訊matplotlib: 資料視覺化numpy: 數值運算
-
執行程式:
python3 main.py
-
選擇序列埠:程式會自動列出可用埠口,請選擇連接 ESP32 的埠口
-
即時監看:程式會自動接收資料並顯示即時圖表
以下是 ES-Net 通訊協定的詳細技術文件:
頻率: 50 Hz(每 0.5 秒一次,每秒 25 筆) 大小: 21 bytes
+--------+------------------+----------+----------+----------+
| Header | Timestamp | X | Y | Z |
+--------+------------------+----------+----------+----------+
| 1 byte | 8 bytes | 4 bytes | 4 bytes | 4 bytes |
| 0x53 | uint64 (ms) | float | float | float |
+--------+------------------+----------+----------+----------+
欄位說明:
- Header:
0x53('S' for Sensor) - Timestamp: NTP 時間戳記(毫秒,Unix epoch)
- X, Y, Z: 三軸加速度(Gal)
頻率: 2 Hz(每 0.5 秒一次,每秒 1 筆) 大小: 17 bytes
+--------+------------------+-------------+----------+
| Header | Timestamp | Intensity | a |
+--------+------------------+-------------+----------+
| 1 byte | 8 bytes | 4 bytes | 4 bytes |
| 0x49 | uint64 (ms) | float | float |
+--------+------------------+-------------+----------+
欄位說明:
- Header:
0x49('I' for Intensity) - Timestamp: NTP 時間戳記(毫秒,Unix epoch)
- Intensity: JMA 震度值
- a: PGA 值(Gal)
Note
資料窗參數:
- 資料窗長度:60 秒
- FFT 填充長度:4096 點
-
$T_{target}$ :0.3 秒 - 用於定義
$a$ 值(峰值地面加速度)的計算時間長度 -
閾值查找(Threshold
$a$ ):對合成波形進行排序和二分查找,確定 0.3 秒累積時間所對應的加速度閾值$a$
綜合濾波(FL x FH x FF):
- FL(低切濾波):0.5 Hz
- FH(高切濾波):10 Hz
- FF(週期效果濾波):∝ √(1/f)(與頻率的平方根成反比)
震度計算公式:
I = 2 * log10(a) + 0.94
其中
- 類型:
unsigned long long(64-bit) - 單位: 毫秒(milliseconds)
- 基準: Unix epoch (1970-01-01 00:00:00 UTC)
- 有 NTP 同步: 使用 NTP 時間
- 無 NTP 同步: 使用
0
- 靜默跳過,不輸出警告
- 計入錯誤統計
- 當讀取的 bytes 數不符合預期時,丟棄該封包
- 計入錯誤統計
- 時間戳記為 0 或很小的值
- 輸出顯示 "No NTP"
- 使用相對時間顯示
Header: 53
Timestamp: 1738065015234 (2025-01-27 14:30:15.234)
X: 12.34 Gal
Y: -5.67 Gal
Z: 8.90 Gal
Header: 49
Timestamp: 1738065015734 (2025-01-27 14:30:15.734)
Intensity: 2.5
a: 125.67 Gal