Skip to content

ExpTechTW/QuakeWatch

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

5 Commits
 
 
 
 
 
 

Repository files navigation

QuakeWatch - ES-Net 地震資料解析器

概述

QuakeWatch 是一個用於處理 ES-Net 地震感測器資料的 Python 應用程式,支援即時接收、解析和視覺化三軸加速度與震度資料。ES-Net 使用二進位格式傳輸地震感測器資料,包含精確的 NTP 時間戳記。

專案資訊

專案名稱: QuakeWatch(地震監看系統)
語言: Python 3
用途: 地震感測器資料的即時處理與視覺化

安裝需求

系統需求

  • Python 3.6 或更高版本
  • 序列埠連接(USB 或藍牙)

安裝套件

pip install -r requirements.txt

主要套件

  • pyserial: 序列埠通訊
  • matplotlib: 資料視覺化
  • numpy: 數值運算

使用說明

  1. 執行程式:

    python3 main.py
  2. 選擇序列埠:程式會自動列出可用埠口,請選擇連接 ESP32 的埠口

  3. 即時監看:程式會自動接收資料並顯示即時圖表


技術文件

以下是 ES-Net 通訊協定的詳細技術文件:

資料格式

1. 感測器資料封包(0x53)

頻率: 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)

Note

感測器資料說明

感測器原始資料輸出,無額外濾波處理。

2. 震度資料封包(0x49)

頻率: 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 點

$a$ 值閾值時間

  • $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

其中 $a$ 為 PGA(峰值地面加速度,單位:Gal)

時間戳記

格式

  • 類型: unsigned long long (64-bit)
  • 單位: 毫秒(milliseconds)
  • 基準: Unix epoch (1970-01-01 00:00:00 UTC)

來源

  1. 有 NTP 同步: 使用 NTP 時間
  2. 無 NTP 同步: 使用 0

錯誤處理

未知 Header

  • 靜默跳過,不輸出警告
  • 計入錯誤統計

資料不完整

  • 當讀取的 bytes 數不符合預期時,丟棄該封包
  • 計入錯誤統計

NTP 未同步

  • 時間戳記為 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

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages