ĐÁNH GIÁ CÁC GIAO THỨC CÂY TRUY VẤN DỰA TRÊN TRI THỨC VỚI CÁC PHÂN BỐ THẺ RFID KHÁC NHAU
hue-hujos-tt-8158.pdf · Phiên bản 1 · 17 trang
jos.hueuni.edu.vn Tập 134, Số 2A, 2025 113 2.2 Giao thức cây truy vấn dựa trên tri thức Giao thức KQT Giao thức KQT là biến thể của giao thức QT, khai thác tri thức về số lượng thẻ cần nhận dạng và phân bố ID của chúng [1]. Ý tưởng chính của KQT là hạn chế số thẻ phản hồi đồng thời để xử lý xung đột hiệu quả hơn. Ban đầu, đầu đọc sử dụng số lượng thẻ đã biết, ký hiệu 𝑁exp, để chia miền ID thẻ thành 𝑁exp khoảng. Mỗi khoảng thứ 𝑖 được ký hiệu I𝑖 = [𝑆𝑃i, 𝐸𝑃i], trong đó 𝑆𝑃i và 𝐸𝑃i lần lượt là điểm đầu và điểm cuối của khoảng ID; về mặt lý thuyết, mỗi khoảng có thể chỉ chứa một thẻ. Sau đó, đầu đọc tiến hành nhận dạng trong 𝑁exp chu kỳ, mỗi chu kỳ tương ứng với một khoảng I𝑖. Trong chu kỳ thứ 𝑖, đầu đọc truy vấn cặp giá trị (𝑆𝑃i, 𝐸𝑃i); tất cả các thẻ có ID thuộc khoảng I𝑖 sẽ phản hồi ID của mình. Nếu chỉ có một thẻ phản hồi, thẻ đó được nhận dạng thành công và đầu đọc chuyển sang chu kỳ tiếp theo. Nếu xảy ra xung đột, đầu đọc áp dụng quy trình QT cơ bản trên tập thẻ trong khoảng đó. Quá trình này được lặp lại cho đến khi xử lý xong tất cả các khoảng. Do tri thức sử dụng trong KQT dựa trên một tập ID thẻ cụ thể, giao thức này cho hiệu suất cao hơn QT trong trường hợp các ID thẻ phân bố tập trung trong một vùng nhất định. Thuật toán KQT được minh họa trong Thuật toán 2. Thuật toán 2. KQT reader procedure Input: N_exp; // Số lượng thẻ ước tính g(.); // Hàm giả định xác suất rời rạc của phân phối ID thẻ Output: ID_list; // Danh sách ID các thẻ đọc thành công idle, success, collision; // Các biến đếm số khe nhàn rỗi, thành công và xung đột
1. makeIntervals(g(.), N_exp, L, R); // Chia N_exp khoảng từ L đến R theo hàm g(.) 2. idle ← 0; success ← 0; collision ← 0; 3. ID_list ← ∅; // Danh sách các thẻ trả lời tại mỗi vòng truy vấn 4. for (i = 0; i < N_exp; i++) 5. broadcast(act, sp[i], ep[i]); // Broadcast lệnh activation đến các thẻ trong (sp[i], ep[i]) 6. receiveAnswer; 7. if (channelStatus == 1) then // Chỉ một thẻ trả lời (success) 8. success ← success + 1; 9. ID_list.append(receivedID); // Thêm thẻ đọc thành công (receivedID) vào ID_list 10. elseif (channelStatus > 1) then // Có nhiều hơn 1 thẻ trả lời (collision) 11. collision ← collision + 1; 12. broadcast(sub, sp[i], h); // Broadcast lệnh subtract đến các thẻ trong (sp[i], h)