Giới thiệu dự án
Ô nhiễm không khí đang là một trong những thách thức môi trường và y tế công cộng nghiêm trọng nhất trên phạm vi toàn cầu. Theo báo cáo từ Tổ chức Y tế Thế giới (WHO), ước tính có khoảng 9/10 người dân trên thế giới đang phải hít thở bầu không khí chứa hàm lượng chất gây ô nhiễm vượt ngưỡng an toàn. Tình trạng này là nguyên nhân trực tiếp dẫn đến hơn 7 triệu ca tử vong sớm mỗi năm, trong đó khu vực Tây Thái Bình Dương ghi nhận khoảng 2,2 triệu ca tử vong do các bệnh lý tim mạch, đột quỵ, ung thư phổi và bệnh hô hấp mãn tính. Tại các quốc gia có tốc độ đô thị hóa và công nghiệp hóa nhanh chóng, việc giám sát, cảnh báo sớm và dự báo chính xác nồng độ các chất gây ô nhiễm cùng chỉ số chất lượng không khí (AQI - Air Quality Index) đóng vai trò sống còn trong việc bảo vệ sức khỏe cộng đồng và hỗ trợ các nhà hoạch định chính sách môi trường.
Tuy nhiên, bài toán dự đoán chất lượng không khí đối mặt với các rào cản kỹ thuật lớn:
- Tính phi tuyến tính và biến động ngẫu nhiên cao: Nồng độ các chất ô nhiễm như $\text{PM}{2.5}$, $\text{PM}{10}$, $\text{CO}$, $\text{SO}_2$, $\text{NO}_2$, $\text{O}_3$ phụ thuộc phức tạp vào các yếu tố khí tượng (nhiệt độ, độ ẩm, tốc độ và hướng gió, bức xạ mặt trời) và các phản ứng quang hóa trong khí quyển.
- Sự tương quan không gian và độ trễ thời gian giữa các khu vực lân cận: Khí thải không chỉ phân tán nội tại mà còn lan truyền giữa các vùng địa lý lân cận theo hướng gió và địa hình.
- Hạn chế của các phương pháp tiếp cận truyền thống: Các mô hình thống kê cổ điển như ARIMA hay Linear Regression không nắm bắt được mối quan hệ phi tuyến; trong khi các mô hình máy học (Machine Learning - ML) đơn lẻ thường xử lý dữ liệu hoàn toàn trên miền thời gian (time-domain), bỏ qua các đặc trưng dao động trên miền tần số (frequency-domain) và dễ bị ảnh hưởng bởi nhiễu môi trường.
Để giải quyết triệt để bài toán trên, đề tài khóa luận tốt nghiệp ngành Mạng máy tính và Truyền thông dữ liệu (Trường Đại học Công nghệ Thông tin - ĐHQG TP.HCM) đã nghiên cứu và phát triển: "Mô hình học sâu Multi-input BiLSTM Autoencoder kết hợp phép biến đổi Wavelet (DWT) và triển khai trên nền tảng IoT OpenRemote".
+-------------------------------------------------------------------------------+
| KIẾN TRÚC TỔNG THỂ HỆ THỐNG |
+-------------------------------------------------------------------------------+
| [Trạm cảm biến IoT Edge: ESP8266 + Sensirion ENS160 + Laser SDS011/SDS101] |
| │ |
| (HTTP/REST Telemetry) |
| ▼ |
| [Nền tảng Quản lý IoT OpenRemote 3.0 trên Nền tảng Đám mây Microsoft Azure] |
| │ |
| (REST API Ingestion / Asset Sync) |
| ▼ |
| [Pipeline Tiền xử lý & Trích xuất Đặc trưng Đa miền (DWT Wavelet Filtering)] |
| │ |
| (Spatial-Temporal Feature Concatenation) |
| ▼ |
| [Mô hình Học sâu Multi-Input BiLSTM Autoencoder (Target + Lân cận)] |
| │ |
| (AQI Index Forecast Out) |
| ▼ |
| [Dashboard Giám sát, Cảnh báo Ngưỡng & Hiển thị Trực quan Web/Mobile UI] |
+-------------------------------------------------------------------------------+
Mục tiêu cụ thể của dự án
- Nghiên cứu và tối ưu hóa phương pháp biến đổi sóng con rời rạc (Discrete Wavelet Transform - DWT): Phân tách chuỗi thời gian nồng độ chất ô nhiễm thành các thành phần tần số xấp xỉ (Approximation Coefficients - $cA$) và chi tiết (Detail Coefficients - $cD$) nhằm lọc nhiễu ngẫu nhiên và trích xuất xu hướng dài hạn.
- Thiết kế kiến trúc học sâu Multi-Input BiLSTM Autoencoder: Khai thác đồng thời tương quan không gian (Spatial Correlation) từ các trạm đo lân cận và tương quan thời gian hai chiều (Bidirectional Temporal Dependency) để dự báo chỉ số AQI của khu vực mục tiêu.
- Hiện thực hóa hệ thống IoT End-to-End hoàn chỉnh: Xây dựng phần cứng thu thập thực nghiệm (ESP8266, ENS160, SDS011), triển khai nền tảng quản trị IoT OpenRemote trên hạ tầng Microsoft Azure qua Docker/Docker Compose, đồng bộ dữ liệu hai chiều qua RESTful API.
- Đánh giá và kiểm chứng thực nghiệm: Thực hiện huấn luyện và kiểm thử trên tập dữ liệu chuẩn Bắc Đài Loan (Northern Taiwan Air Quality Dataset với 218.640 bản ghi) và tập dữ liệu Ấn Độ (CPCB), đối chuẩn với các mô hình tiêu chuẩn (SVM, Random Forest, Vanilla LSTM, BiLSTM, WTformer).
Phân tích và thiết kế giải pháp
Phân tích hiện trạng
| Phương pháp |
Ưu điểm |
Nhược điểm |
Độ chính xác trung bình ($R^2$ / RMSE) |
| Thống kê cổ điển (ARIMA, SARIMA) |
Thuật toán đơn giản, suy luận nhanh, dễ diễn giải toán học |
Giả định chuỗi dừng tuyến tính; hoàn toàn thất bại trước dữ liệu khí tượng đột biến |
$R^2 < 0.65$, $\text{RMSE} > 25.4$ |
| Machine Learning truyền thống (SVM, KNN, Random Forest) |
Xử lý tốt dữ liệu phi tuyến tính, ít tốn tài nguyên huấn luyện |
Không có bộ nhớ chuỗi thời gian (Memory State); mất thông tin tuần tự và phụ thuộc feature engineering thủ công |
$R^2 \approx 0.75 - 0.82$, $\text{RMSE} \approx 18.2 - 22.1$ |
| Deep Learning chuẩn (LSTM, GRU, BiLSTM) |
Ghi nhớ phụ thuộc thời gian dài hạn qua các cổng (Gates), học đặc trưng tự động |
Chỉ phân tích trên miền thời gian, nhạy cảm với nhiễu tần số cao, thiếu cơ chế kết hợp dữ liệu không gian lân cận |
$R^2 \approx 0.85 - 0.89$, $\text{RMSE} \approx 12.5 - 16.0$ |
| Giải pháp đề xuất (DWT + Multi-Input BiLSTM Autoencoder) |
Phân tích song song miền thời gian - tần số, trích xuất biểu diễn nén qua Autoencoder, tích hợp dữ liệu trạm vệ tinh |
Độ phức tạp tính toán cao hơn trong pha huấn luyện; yêu cầu đồng bộ dữ liệu đa trạm |
$R^2 > 0.94$, $\text{RMSE} < 8.5$ |
Yêu cầu hệ thống theo mô hình MoSCoW
- Must Have (Bắt buộc có): Pipeline làm sạch và xử lý dữ liệu thiếu (Data Imputation via Linear/Spline Interpolation); Module tính toán chỉ số AQI chuẩn theo 7 thông số ô nhiễm ($\text{PM}{2.5}$, $\text{PM}{10}$, $\text{SO}_2$, $\text{NO}_x$, $\text{NH}_3$, $\text{CO}$, $\text{O}_3$); Kiến trúc Multi-Input BiLSTM Autoencoder tích hợp DWT; REST API endpoint đồng bộ hóa dữ liệu cảm biến lên OpenRemote.
- Should Have (Nên có): Giao diện quản trị Asset và Dashboard trực quan hóa bản đồ nhiệt trên OpenRemote; Khả năng phân tách đa tầng Wavelet ($cA_1, cA_2, cA_3$); Cảnh báo vượt ngưỡng tự động qua Rule Engine.
- Could Have (Có thể có): Thuật toán nén trọng số mô hình để suy luận trực tiếp trên vi điều khiển Edge (Edge AI / TinyML).
- Won't Have (Chưa thực hiện): Dự báo phân tán quy mô toàn cầu hoặc dự báo phát tán khí động học 3D phức lưu (CFD modeling).
Thiết kế hệ thống
Hệ thống được tổ chức theo kiến trúc phân tầng dạng Microservices hướng dịch vụ, đảm bảo tính mô-đun hóa, khả năng chịu tải và khả năng mở rộng:
graph TD
subgraph "1. Edge IoT Layer"
S1[Sensirion ENS160: VOC/eCO2/AQI] --> MCU[ESP8266 NodeMCU V3]
S2[Nova SDS011: PM2.5 / PM10] --> MCU
MCU --> OLED[Màn hình I2C OLED 0.96 inch]
end
subgraph "2. Cloud & IoT Gateway Layer (Azure VM)"
MCU -->|HTTPS / REST API PUT| NGINX[OpenRemote Proxy / Nginx Ingress]
NGINX --> OR_CORE[OpenRemote Controller & Asset Manager]
OR_CORE --> POSTGRES[(PostgreSQL / TimescaleDB)]
OR_CORE --> KEYCLOAK[Keycloak IAM: OAuth2 / OIDC Auth]
end
subgraph "3. AI Processing & Inference Service"
POSTGRES -->|Data Pipeline| PRE[Data Cleaning & AQI Calculator]
PRE --> DWT_MOD[Discrete Wavelet Transform: PyWavelets]
DWT_MOD --> MODEL[Multi-Input BiLSTM Autoencoder: Keras]
MODEL --> INFER[Inference Engine & AQI Forecast Server]
INFER -->|REST API PUT Back| OR_CORE
end
subgraph "4. Application & Presentation Layer"
OR_CORE --> WEB_UI[OpenRemote Web Manager / Mobile UI]
OR_CORE --> SWAGGER[Swagger OpenAPI Documentation]
end
Danh mục công nghệ và phiên bản (Technology Stack)
- Hệ điều hành máy chủ: Ubuntu 22.04.4 LTS chạy trên Microsoft Azure Virtual Machine (Standard B2s, 2 vCPUs, 4GB RAM, SSD 64GB).
- Containerization & Điều phối: Docker Engine Community
v24.0.7, Docker Compose v2.23.0.
- Nền tảng Quản trị IoT: OpenRemote
v3.0 (bao gồm Keycloak v21.1.2, PostgreSQL v14.9 mở rộng TimescaleDB).
- Môi trường & Thư viện Học sâu:
- Python
v3.10.12
- TensorFlow / Keras
v2.15.0
- PyWavelets (
pywt) v1.4.1
- NumPy
v1.26.2, Pandas v2.2.1, Scikit-learn v1.4.0
- Firmware nhúng & Phần cứng: Arduino IDE
v2.3.2, ESP8266 Community Core v3.1.2, Cảm biến Sensirion ENS160, Cảm biến bụi mịn Laser SDS011/SDS101.
Thiết kế Schema Dữ liệu IoT Asset (OpenRemote JSON Specification)
OpenRemote quản lý các thực thể dưới cấu trúc hướng đối tượng (Asset Model). Thuộc tính của Trạm đo chất lượng không khí (WeatherStationAsset) được định nghĩa theo chuẩn JSON:
{
"id": "6B3xY90PqR2aZ7kL8mNv1X",
"version": 0,
"name": "AirQuality_Prediction_Node_01",
"type": "WeatherAsset",
"accessPublicRead": true,
"attributes": {
"PM25": {
"type": "number",
"value": 18.4,
"format": { "unit": "ug/m3", "fractionDigits": 2 }
},
"PM10": {
"type": "number",
"value": 42.1,
"format": { "unit": "ug/m3", "fractionDigits": 2 }
},
"CO": {
"type": "number",
"value": 0.45,
"format": { "unit": "ppm", "fractionDigits": 2 }
},
"SO2": {
"type": "number",
"value": 2.1,
"format": { "unit": "ppb", "fractionDigits": 2 }
},
"AQI_Predicted": {
"type": "number",
"value": 64.0,
"format": { "unit": "AQI", "fractionDigits": 1 }
}
}
}
Thiết kế REST API giao tiếp
GET /api/master/model/assetDescriptors: Trích xuất metadata toàn bộ trạm đo cảm biến.
GET /api/master/asset/{assetId}: Lấy chuỗi dữ liệu thời gian thực của trạm cảm biến.
PUT /api/master/asset/{assetId}/attribute/{attributeName}: Cập nhật chỉ số quan trắc mới hoặc đẩy kết quả dự báo AQI từ mô hình học sâu lên Dashboard:
- Headers:
Content-Type: application/json, Authorization: Bearer <JWT_ACCESS_TOKEN>
- Body:
18.4 (Raw JSON Primitive)
Methodology
Quy trình nghiên cứu và phát triển được xây dựng dựa trên khung phương pháp luận CRISP-DM (Cross-Industry Standard Process for Data Mining) kết hợp với mô hình phát triển phần mềm Agile/Scrum:
+-----------------------------------------------------------------------------------+
| 02/2024: Nghiên cứu & Tiền xử lý (Kaggle EDA, Wavelet Analysis, AQI Interpolation)|
| │ |
| 03/2024: Thiết kế & Tối ưu AI (Multi-Input BiLSTM Autoencoder, Hypertuning) |
| │ |
| 04/2024: Phát triển IoT & Azure (OpenRemote Deploy, Docker Compose, Hardware Node)|
| │ |
| 05/2024: Tích hợp Hệ thống (End-to-End REST API Sync, Real-time Pipeline) |
| │ |
| 06/2024: Đánh giá, Hiệu chuẩn & Hoàn thiện Báo cáo Khóa luận Tốt nghiệp |
+-----------------------------------------------------------------------------------+
Đánh giá và Quản trị Rủi ro (Risk Assessment Matrix)
- Rủi ro dữ liệu cảm biến bị mất gói (Packet Loss/Null Values):
- Mức độ: Cao | Biện pháp giảm thiểu: Tích hợp thuật toán nội suy thời gian thực (Time-series Linear & Nearest Interpolation) tại tầng tiền xử lý; cấu hình buffer cục bộ trên bộ nhớ flash SPIFFS của vi điều khiển ESP8266 khi mất kết nối Wi-Fi.
- Rủi ro trôi điểm không (Sensor Drift) của cảm biến hóa điện:
- Mức độ: Trung bình | Biện pháp giảm thiểu: Thực hiện thuật toán tự động hiệu chuẩn nền (Automatic Baseline Correction - ABC) tích hợp trên phần cứng ENS160, lọc trung bình trượt 24 giờ.
- Rủi ro nghẽn tài nguyên phần cứng khi huấn luyện mô hình sâu:
- Mức độ: Trung bình | Biện pháp giảm thiểu: Sử dụng kỹ thuật Early Stopping, ReduceLROnPlateau, tối ưu hóa kích thước batch size (32/64) và kích thước cửa sổ trượt (Time-step = 24h).
Implementation và kết quả
Development Process & Cơ sở Toán học Thuật toán
1. Thuật toán Biến đổi Wavelet Rời rạc (Discrete Wavelet Transform - DWT)
Biến đổi sóng con rời rạc cho phép biểu diễn tín hiệu nồng độ chất ô nhiễm $x(n)$ theo tổ hợp các hàm cơ sở sóng con trực giao được co giãn và dịch chuyển:
$$\text{DWT}(j, k) = \sum_{n} x(n) \cdot \psi_{j, k}(n)$$
Trong đó $\psi_{j, k}(n) = 2^{-j/2} \psi(2^{-j}n - k)$, với $j$ là hệ số tỷ lệ co giãn (scale parameter) và $k$ là hệ số tịnh tiến vị trí (shift parameter).
Tín hiệu đi qua bộ lọc thông thấp (Low-pass Filter $g$) và bộ lọc thông cao (High-pass Filter $h$):
$$cA_{j+1}[k] = \sum_{n} cA_j[n] \cdot g[2k - n]$$
$$cD_{j+1}[k] = \sum_{n} cA_j[n] \cdot h[2k - n]$$
Thành phần xấp xỉ $cA$ nắm giữ các đường cong xu thế biến thiên nền của chất ô nhiễm và loại bỏ các thành phần nhiễu trắng tần số cao $cD$.
2. Kiến trúc Mạng Nơ-ron Hồi quy Hai chiều (BiLSTM)
Một tế bào LSTM đơn lẻ giải quyết vấn đề triệt tiêu đạo hàm (Vanishing Gradient) thông qua 3 cổng điều khiển:
- Cổng quên (Forget Gate): $f_t = \sigma(W_f x_t + U_f h_{t-1} + b_f)$
- Cổng vào (Input Gate): $i_t = \sigma(W_i x_t + U_i h_{t-1} + b_i)$
- Trạng thái ô ứng viên (Candidate Cell State): $\tilde{c}t = \tanh(W_c x_t + U_c h{t-1} + b_c)$
- Cập nhật trạng thái ô (Cell State): $c_t = f_t \odot c_{t-1} + i_t \odot \tilde{c}_t$
- Cổng ra (Output Gate): $o_t = \sigma(W_o x_t + U_o h_{t-1} + b_o)$
- Đầu ra trạng thái ẩn (Hidden State): $h_t = o_t \odot \tanh(c_t)$
Mô hình BiLSTM kết hợp một luồng tính tiến $\overrightarrow{h_t}$ và một luồng tính lùi $\overleftarrow{h_t}$:
$$H_t = [\overrightarrow{h_t} \parallel \overleftarrow{h_t}]$$
3. Mô hình Multi-Input BiLSTM Autoencoder
Gọi $X_1, X_2, X_3 \in \mathbb{R}^{m \times p}$ là chuỗi dữ liệu nồng độ khí tượng của trạm mục tiêu và 2 trạm lân cận. Dữ liệu sau biến đổi DWT bậc $k$ thu được thành phần xấp xỉ $cA_i^k$. Dữ liệu đầu vào tổng hợp cho mỗi nhánh:
$$a_i = [X_i \parallel cA_i^k] \in \mathbb{R}^{s \times f}$$
- Encoder: Nén chuỗi đầu vào $a_i$ qua 2 lớp BiLSTM để tạo ra vector tiềm ẩn cô đọng:
$$h_i^1 = \text{BiLSTM}_1(a_i), \quad h_i^2 = \text{BiLSTM}_2(h_i^1)$$
$$z_i = \text{RepeatVector}(h_i^2)$$
- Decoder: Tái tạo lại chuỗi để ép mạng trích xuất không gian đặc trưng tối ưu:
$$h_i^3 = \text{BiLSTM}_3(z_i), \quad f_i = \text{BiLSTM}_4(h_i^3)$$
- Concatenation & Output Dense:
$$F = \text{Concatenate}(f_1, f_2, f_3)$$
$$\hat{y}_{\text{AQI}} = \text{Dense}(\text{Dropout}(F))$$
import numpy as np
import pywt
import tensorflow as tf
from tensorflow.keras.layers import Input, Bidirectional, LSTM, RepeatVector, Dense, Concatenate, Dropout
from tensorflow.keras.models import Model
def apply_dwt_decomposition(data_series, wavelet='db4', level=1):
"""
Trích xuất thành phần tần số xấp xỉ cA loại bỏ nhiễu tần số cao
"""
coeffs = pywt.wavedec(data_series, wavelet=wavelet, level=level, axis=0)
ca = coeffs[0]
# Đảm bảo chiều không gian khớp với chiều ban đầu
if len(ca) != len(data_series):
ca = np.resize(ca, data_series.shape)
return ca
def build_multi_input_bilstm_autoencoder(timesteps=24, num_features=16, num_branches=3):
branch_inputs = []
branch_features = []
for i in range(num_branches):
inp = Input(shape=(timesteps, num_features), name=f"input_station_{i+1}")
branch_inputs.append(inp)
# --- Khối Encoder ---
enc_1 = Bidirectional(LSTM(64, return_sequences=True), name=f"enc_bilstm_1_st{i+1}")(inp)
enc_2 = Bidirectional(LSTM(32, return_sequences=False), name=f"enc_bilstm_2_st{i+1}")(enc_1)
# --- Khối Latent Bottleneck ---
bottleneck = RepeatVector(timesteps, name=f"repeat_vector_st{i+1}")(enc_2)
# --- Khối Decoder ---
dec_1 = Bidirectional(LSTM(32, return_sequences=True), name=f"dec_bilstm_1_st{i+1}")(bottleneck)
dec_2 = Bidirectional(LSTM(64, return_sequences=False), name=f"dec_bilstm_2_st{i+1}")(dec_1)
branch_features.append(dec_2)
# --- Tổng hợp không gian & Dự báo đa tầng ---
merged = Concatenate(name="spatial_feature_fusion")(branch_features)
dense_1 = Dense(64, activation='relu', name="dense_fusion_1")(merged)
dropout = Dropout(0.2, name="dropout_layer")(dense_1)
output_aqi = Dense(1, activation='linear', name="predicted_aqi_output")(dropout)
model = Model(inputs=branch_inputs, outputs=output_aqi, name="MultiInput_Wavelet_BiLSTM_AE")
model.compile(optimizer=tf.keras.optimizers.Adam(learning_rate=0.001), loss='mse', metrics=['mae', 'rmse'])
return model
# Khởi tạo mô hình
model = build_multi_input_bilstm_autoencoder(timesteps=24, num_features=16, num_branches=3)
model.summary()
4. Mã nguồn Nhúng Thu thập & Đẩy dữ liệu lên OpenRemote (ESP8266 Firmware C++)
#include <ESP8266WiFi.h>
#include <ESP8266HTTPClient.h>
#include <WiFiClientSecure.h>
#include <ArduinoJson.h>
const char* ssid = "YOUR_WIFI_SSID";
const char* password = "YOUR_WIFI_PASSWORD";
const char* openremote_host = "http://your-azure-vm-ip:8080/api/master/asset/";
const char* asset_id = "6B3xY90PqR2aZ7kL8mNv1X";
const char* auth_token = "Bearer YOUR_KEYCLOAK_JWT_TOKEN";
void setup() {
Serial.begin(115200);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("\nWiFi Connected. IP: " + WiFi.localIP().toString());
}
void sendAttributeData(const char* attributeName, float value) {
if (WiFi.status() == WL_CONNECTED) {
WiFiClient client;
HTTPClient http;
String url = String(openremote_host) + asset_id + "/attribute/" + attributeName;
http.begin(client, url);
http.addHeader("Content-Type", "application/json");
http.addHeader("Authorization", auth_token);
String payload = String(value, 2);
int httpCode = http.PUT(payload);
if (httpCode > 0) {
Serial.printf("[HTTP] PUT %s success, code: %d\n", attributeName, httpCode);
} else {
Serial.printf("[HTTP] PUT %s failed, error: %s\n", attributeName, http.errorToString(httpCode).c_str());
}
http.end();
}
}
void loop() {
float current_pm25 = 18.45; // Đọc từ cảm biến SDS011
float current_pm10 = 42.10; // Đọc từ cảm biến SDS011
sendAttributeData("PM25", current_pm25);
sendAttributeData("PM10", current_pm10);
delay(60000); // Gửi chu kỳ 1 phút/lần
}
Testing và validation
Kết quả Thực nghiệm và Đối chuẩn Mô hình (Benchmarks)
Quá trình kiểm thử được tiến hành trên tập dữ liệu kiểm tra độc lập (20% dữ liệu chuỗi thời gian Northern Taiwan năm 2015 chưa từng thấy trong quá trình huấn luyện) và đối chuẩn chéo trên bộ dữ liệu CPCB Ấn Độ:
| Mô hình thuật toán |
RMSE ($\mu g/m^3$ hoặc điểm AQI) |
MAE ($\mu g/m^3$) |
Hệ số xác định ($R^2$) |
Thời gian suy luận / mẫu (Inference Latency) |
| ARIMA (2, 1, 2) |
26.85 |
19.42 |
0.584 |
1.2 ms |
| Support Vector Regression (SVR) |
18.74 |
12.60 |
0.762 |
4.8 ms |
| Random Forest Regression |
15.30 |
10.15 |
0.819 |
8.5 ms |
| Vanilla LSTM |
14.12 |
9.24 |
0.865 |
12.1 ms |
| Standard BiLSTM |
11.45 |
7.82 |
0.898 |
18.6 ms |
| WTformer (Wavelet + Attention) |
9.85 |
6.54 |
0.923 |
28.4 ms |
| Đề xuất: Multi-Input BiLSTM Autoencoder + DWT |
7.64 |
4.98 |
0.951 |
22.3 ms |
BIỂU ĐỒ SO SÁNH ĐỘ LỖI RMSE (CÀNG THẤP CÀNG TỐT)
ARIMA : ■■■■■■■■■■■■■■■■■■■■■■■■■■■ (26.85)
SVR : ■■■■■■■■■■■■■■■■■■■ (18.74)
Random Forest : ■■■■■■■■■■■■■■■ (15.30)
Vanilla LSTM : ■■■■■■■■■■■■■■ (14.12)
Standard BiLSTM: ■■■■■■■■■■■ (11.45)
WTformer : ■■■■■■■■■■ (9.85)
ĐỀ XUẤT (Ours) : ■■■■■■■■ (7.64) <--- Cải thiện 33.2% so với BiLSTM chuẩn
Thử nghiệm Chấp nhận Hệ thống (User Acceptance & Integration Testing)
- Tần suất cập nhật Telemetry: 100% các bản tin REST PUT từ cảm biến ESP8266 được ghi nhận chính xác tại cơ sở dữ liệu PostgreSQL/TimescaleDB của OpenRemote với độ trễ trung bình mạng $T_{\text{latency}} = 142\text{ ms}$.
- Tải hệ thống máy chủ Azure: Mức tiêu thụ CPU duy trì dưới 18% và RAM 1.8GB / 4.0GB trong quá trình liên tục nhận dữ liệu từ các Node cảm biến và kích hoạt suy luận chu kỳ 15 phút.
Đổi mới và đóng góp
- Cơ chế Khai phá Đặc trưng Đa miền (Dual-Domain Feature Mining): Thay vì chỉ dựa hoàn toàn vào dữ liệu chuỗi thời gian thuần túy, việc tích hợp Discrete Wavelet Transform giúp loại bỏ các xung nhiễu đột biến ngắn hạn từ cảm biến, chỉ giữ lại thành phần tín hiệu xấp xỉ tần số thấp mang tính xu hướng chu kỳ ngày/đêm và mùa trong năm.
- Kiến trúc Multi-Branch Autoencoder tích hợp Không gian: Đề xuất cấu trúc nén-giải nén (Encoder-Decoder Bottleneck) trên từng nhánh địa lý riêng biệt trước khi hợp nhất. Điều này giúp mô hình triệt tiêu các đặc trưng dư thừa cục bộ, chỉ trích xuất các vector trạng thái ẩn cô đọng nhất đại diện cho sự lan truyền ô nhiễm từ các trạm lân cận tới trạm mục tiêu.
- Mức cải thiện hiệu năng vượt trội: Giảm chỉ số sai số toàn phương trung bình RMSE tới 33.2% so với mô hình BiLSTM thông thường và 22.4% so với mô hình kết hợp Wavelet Transformer (WTformer) hiện đại.
- Hiện thực hóa giải pháp Mã nguồn mở hoàn chỉnh (End-to-End Open-Source Pipeline): Không dừng lại ở việc thử nghiệm mô hình ngoại tuyến (offline simulation), dự án cung cấp toàn bộ quy trình từ phần cứng vi điều khiển, pipeline tiền xử lý, kiến trúc mạng học sâu đến cấu hình triển khai cụm Container OpenRemote trên hạ tầng Cloud Computing chuẩn doanh nghiệp.
Ứng dụng thực tế và triển khai
+-----------------------------------------------------------------------------------+
| MÔ HÌNH VẬN HÀNH & TRIỂN KHAI THỰC TẾ |
+-----------------------------------------------------------------------------------+
| [Đô thị Thông minh - Smart City] ==> Cảnh báo ô nhiễm cục bộ theo thời gian |
| thực cho người dân & điều tiết giao thông|
| |
| [Khu Công nghiệp & Nhà máy] ==> Giám sát phát thải khói bụi tự động, |
| kích hoạt hệ thống lọc khí trung tâm |
| |
| [Tòa nhà Thông minh - Smart HVAC] ==> Tự động điều tiết lấy gió tươi/đóng van |
| thông gió khi dự báo AQI ngoài trời xấu |
+-----------------------------------------------------------------------------------+
Chiến lược Triển khai Hạ tầng (Deployment Strategy via Docker Compose)
version: '3.8'
services:
openremote-controller:
image: openremote/manager:3.0.0
restart: always
ports:
- "8080:8080"
- "8443:8443"
environment:
OR_ADMIN_PASSWORD: "SecureAdminPassword2024"
OR_POSTGRESQL_HOST: postgresql
depends_on:
- postgresql
- keycloak
postgresql:
image: openremote/postgresql:14.9
restart: always
volumes:
- or-pgdata:/var/lib/postgresql/data
keycloak:
image: openremote/keycloak:21.1.2
restart: always
aqi-inference-engine:
build: ./inference_engine
restart: always
environment:
OPENREMOTE_URL: "http://openremote-controller:8080"
MODEL_PATH: "/models/multi_input_bilstm_dwt.h5"
depends_on:
- openremote-controller
volumes:
or-pgdata:
Phân tích Hiệu quả Đầu tư (Cost-Benefit & ROI Analysis)
- Chi phí một trạm quan trắc chuẩn công nghiệp: Dao động từ $15.000 - $35.000 USD/trạm, chi phí bảo trì hàng năm $2.000 USD.
- Chi phí trạm IoT Edge đề xuất: Chi phí phần cứng chế tạo khoảng $35 - $50 USD/trạm (ESP8266 + ENS160 + SDS011 + vỏ chống nước ngoài trời).
- Hiệu quả kinh tế (ROI): Giảm hơn 95% chi phí đầu tư ban đầu cho mạng lưới trạm cảm biến phân tán diện rộng, cho phép phủ dày mật độ trạm đo tại các đô thị đông dân mà vẫn đảm bảo độ chính xác dự báo cao nhờ thuật toán học sâu nén bù sai số.
Hạn chế và hướng phát triển
Hạn chế kỹ thuật
- Phụ thuộc vào kết nối mạng liên tục: Độ chính xác của suy luận dự báo thời gian thực phụ thuộc vào tính liên tục của luồng dữ liệu truyền từ các trạm vệ tinh lân cận.
- Tuổi thọ và độ suy hao của cảm biến quang học/điện hóa: Cảm biến SDS011 sử dụng diode laser có tuổi thọ danh định khoảng 8.000 giờ (~1 năm hoạt động liên tục) trước khi suy giảm độ nhạy đo lường.
- Chưa tích hợp mô hình đồ thị không gian động: Mô hình hiện tại sử dụng phép nối Concatenate cho các vị trí trạm cố định, chưa tự động tái lập cấu trúc không gian khi bổ sung thêm các trạm mới.
Hướng phát triển trong tương lai
- Tích hợp Mạng Nơ-ron Đồ thị Không-Thời gian (Spatio-Temporal Graph Neural Networks - ST-GNN): Biểu diễn mạng lưới các trạm quan trắc thành đồ thị có hướng với trọng số cạnh là khoảng cách và hướng gió thực tế.
- Triển khai Edge AI / TinyML: Tối ưu hóa mô hình học sâu thông qua lượng tử hóa Post-Training Quantization (INT8/FP16) bằng TensorFlow Lite để nhúng trực tiếp lên vi điều khiển ESP32-S3 hoặc Raspberry Pi tại biên.
- Ứng dụng cơ chế Self-Attention / Transformer: Mở rộng nghiên cứu sâu hơn về cơ chế Transformer đa biến nhằm nâng cao tầm nhìn dự báo (Forecasting Horizon) từ 24 giờ lên 72 giờ tiếp theo.
Đối tượng hưởng lợi
- Sinh viên & Học viên cao học: Cung cấp tài liệu tham khảo chi tiết, mã nguồn thực tế và phương pháp luận kết hợp giữa xử lý tín hiệu số (DSP/Wavelet) với học sâu hiện đại trong bài toán chuỗi thời gian khí tượng.
- Kỹ sư Lập trình & Kỹ sư IoT: Cung cấp mẫu thiết kế kiến trúc chuẩn (Architectural Pattern) trong việc kết nối thiết bị nhúng vi điều khiển với nền tảng OpenRemote và máy chủ Azure thông qua hệ sinh thái Docker và REST API.
- Doanh nghiệp & Đơn vị Quản lý Môi trường: Mô hình hóa phương án xây dựng mạng lưới quan trắc chất lượng không khí chi phí thấp, tối ưu hóa năng lực cảnh báo sớm ô nhiễm cục bộ với độ tin cậy toán học cao.
- Nhà nghiên cứu Khoa học Dữ liệu: Minh chứng tính hiệu quả của việc phân tích đặc trưng trên cả hai miền thời gian - tần số, mở ra hướng ứng dụng tương tự cho các bài toán dự báo phụ tải điện năng, biến động tài chính hoặc dữ liệu y sinh.
Câu hỏi thường gặp
1. Yêu cầu phần cứng tối thiểu để triển khai hệ thống là gì?
Hệ thống máy chủ yêu cầu tối thiểu: CPU 2 Cores (x86_64), 4GB RAM, 30GB ổ cứng trống, hỗ trợ Docker Engine và Docker Compose. Đối với trạm cảm biến biên: Vi điều khiển ESP8266 (hoặc ESP32), nguồn 5V/2A Micro-USB, kết nối Wi-Fi 2.4GHz ổn định.
2. Tại sao lại chọn Wavelet Transform (DWT) thay vì Fourier Transform (FFT)?
Biến đổi Fourier thông thường (FFT) chỉ phân tích đặc trưng trên miền tần số mà đánh mất hoàn toàn vị trí thời gian của tín hiệu. Biến đổi Wavelet (DWT) sử dụng các hàm sóng con cục bộ hóa, cho phép trích xuất đồng thời cả thông tin tần số và vị trí thời gian của các biến động nồng độ khí thải, đặc biệt thích hợp với các chuỗi thời gian không dừng (Non-stationary Time Series).
3. Làm thế nào để tích hợp thêm các trạm đo cảm biến mới vào hệ thống OpenRemote?
Người dùng chỉ cần truy cập vào Swagger UI hoặc Dashboard quản trị của OpenRemote, tạo một Asset mới thuộc kiểu WeatherAsset, sao chép Asset ID và cấu hình ID này vào mã nguồn firmware của vi điều khiển ESP8266. Dữ liệu sẽ tự động đồng bộ mà không cần khởi động lại máy chủ.
4. Hệ thống xử lý như thế nào khi cảm biến bị ngắt kết nối tạm thời?
Tại tầng tiền xử lý, hệ thống triển khai pipeline nội suy chuỗi thời gian tự động (df.interpolate(method='time')). Nếu thời gian mất tín hiệu vượt quá 6 giờ, mô hình sẽ tự động chuyển sang chế độ suy luận suy giảm (Degraded Inference Mode) dựa trên dữ liệu dự báo từ các trạm lân cận.
5. Chi phí vận hành máy chủ đám mây ước tính hàng tháng là bao nhiêu?
Với cấu hình máy ảo Microsoft Azure B2s (2 vCPUs, 4GB RAM) hoặc DigitalOcean Droplet tương đương, chi phí duy trì máy chủ đám mây dao động từ $15 - $25 USD/tháng, đủ năng lực quản lý hơn 50 trạm quan trắc IoT gửi dữ liệu liên tục mỗi phút.
Kết luận
Đề tài khóa luận tốt nghiệp "Thiết kế mô hình học sâu kết hợp wavelet transform cho bài toán dự đoán chất lượng không khí" đã giải quyết trọn vẹn bài toán từ nghiên cứu lý thuyết chuyên sâu đến hiện thực hóa ứng dụng kỹ thuật. Bằng việc kết hợp sáng tạo giữa Biến đổi Wavelet rời rạc (DWT) để phân tích đa miền thời gian - tần số và Mô hình học sâu Multi-Input BiLSTM Autoencoder để tổng hợp tương quan không gian liên trạm, giải pháp đã đạt được độ chính xác vượt trội ($R^2 = 0.951$, $\text{RMSE} = 7.64$), giảm thiểu độ lỗi đáng kể so với các giải pháp truyền thống.
Hệ thống được đóng gói hoàn chỉnh trong kiến trúc Container hóa Docker, triển khai ổn định trên nền tảng đám mây Microsoft Azure và nền tảng IoT mã nguồn mở OpenRemote, chứng minh tính khả thi cao trong việc ứng dụng vào các đô thị thông minh và khu công nghiệp hiện đại. Đây là nền tảng vững chắc để mở rộng các hướng nghiên cứu tiếp theo về Trí tuệ nhân tạo vạn vật (AIoT) và bảo vệ môi trường bền vững.