← Quay lại blog

Tần số gửi báo cáo của chuột và hiện tượng rung cảm biến: Vật lý học đằng sau chẩn đoán con trỏ hiệu năng cao

PetexSpace

Dữ liệu đầu vào không gian chính xác trong các môi trường điện toán hiện đại phụ thuộc vào một chuỗi xử lý phức tạp, trải dài từ việc thu nhận bề mặt quang điện tử, lập lịch firmware vi điều khiển, các giao thức truyền tải USB, ngắt nhân hệ điều hành cho đến vòng lặp sự kiện của trình duyệt. Đối với thể thao điện tử, minh họa kỹ thuật số và nghiên cứu tương tác người - máy, việc hiểu rõ cách các cập nhật con trỏ chuyển dịch từ độ dời vật lý sang tọa độ hiển thị trên màn hình là điều vô cùng thiết yếu.

Khi các nhà sản xuất phần cứng quảng bá tần số gửi báo cáo (polling rate) ở mức 1.000 Hz, 4.000 Hz hoặc 8.000 Hz, thông số kỹ thuật này mô tả tần suất bộ điều khiển máy chủ (host controller) truy vấn điểm cuối (endpoint) của chuột để nhận các gói tin chuyển động mới. Tuy nhiên, chỉ riêng tần số thô không thể đảm bảo khả năng theo dõi chuyển động mượt mà. Sự biến thiên khoảng thời gian giữa các gói tin đến (packet inter-arrival variance), hay còn gọi là hiện tượng rung cảm biến (sensor jitter), cùng với các điểm nghẽn xử lý và hiện tượng giật vi mô (micro-stutter), có thể làm suy giảm độ trung thực khi theo dõi không gian.

Bài phân tích này đi sâu vào cơ chế vật lý của cảm biến điều hướng quang học, giao thức Thiết bị Giao diện Con người qua USB (USB Human Interface Device - HID), chuỗi điều phối sự kiện tần số cao trong trình duyệt, toán học thống kê của độ rung (jitter), động lực học khử rung tiếp điểm (debounce) của công tắc cơ điện và các chẩn đoán phía client-side.

1. Kiến trúc USB HID: Từ cảm biến vật lý đến báo cáo hệ điều hành

Chuột máy tính hiện đại ghi nhận chuyển động trên bề mặt thông qua các mạch tích hợp quang điện tử chuyên dụng được gọi là cảm biến điều hướng quang học. Thay vì sử dụng các con lăn hoặc bánh xe cơ học, một cảm biến quang học kết hợp một nguồn sáng siêu vi, thường là diode phát quang (LED) hồng ngoại hoặc đỏ, hoặc laser phát xạ bề mặt khoang thẳng đứng (VCSEL) hồng ngoại, cùng một cảm biến hình ảnh Bán dẫn Ô-xít Kim loại Bổ sung (CMOS) tốc độ cao và một bộ xử lý tín hiệu số (DSP) tích hợp.

+-----------------------------------------------------------------------+
|                       HARDWARE SUBSYSTEM                              |
|                                                                       |
|  [Surface] ---> [Lens / LED] ---> [CMOS Matrix (36x36 px)]            |
|                                         |                             |
|                                         v                             |
|                                 [Sensor DSP Core]                     |
|                           (Normalized Cross-Correlation)              |
|                                         |                             |
|                                 Delta Accumulator                     |
|                                   (dX, dY, Squal)                     |
|                                         | SPI Bus                     |
|                                         v                             |
|                           [USB Peripheral Microcontroller]           |
|                              (Endpoint FIFO Buffers)                  |
+-----------------------------------------------------------------------+
                                          |
                                          | USB D+/D- Differential Bus
                                          v
+-----------------------------------------------------------------------+
|                       HOST OPERATING SYSTEM                           |
|                                                                       |
|                         [Host Controller (xHCI)]                      |
|                                    | Periodic Schedule Interrupt      |
|                         [Kernel HID Driver Stack]                     |
|                                    | Input Subsystem Packet Parsing   |
|                         [Windowing Server / Compositor]               |
+-----------------------------------------------------------------------+
                                          |
                                          | OS Event Queue
                                          v
+-----------------------------------------------------------------------+
|                         APPLICATION RUNTIME                           |
|                                                                       |
|                       [Browser Rendering Engine]                      |
|                     (Pointer Events & Coalesced APIs)                 |
+-----------------------------------------------------------------------+

Luồng quang học và tích lũy độ dời (Delta Accumulation)

Mảng CMOS chụp lại các hình ảnh bề mặt ở tốc độ khung hình cực cao, dao động từ 10.000 đến hơn 20.000 khung hình mỗi giây (FPS). DSP tích hợp sẽ phân tích các khung hình liên tiếp bằng thuật toán luồng quang học (optical flow) dựa trên phép tương quan chéo chuẩn hóa hai chiều:

C(Δx,Δy)=∑i∑j[It(i,j)−Iˉt]⋅[It−1(i−Δx,j−Δy)−Iˉt−1]C(\Delta x, \Delta y) = \sum_{i} \sum_{j} \left[ I_t(i, j) - \bar{I}_t \right] \cdot \left[ I_{t-1}(i - \Delta x, j - \Delta y) - \bar{I}_{t-1} \right]

Tại đây, It(i,j)I_t(i, j) đại diện cho cường độ điểm ảnh tại thời điểm tt, và Iˉ\bar{I} đại diện cho độ sáng trung bình của khung hình. Bằng cách tính toán độ lệch tọa độ (Δx,Δy)(\Delta x, \Delta y) giúp cực đại hóa tương quan chéo, DSP xác định độ dời bề mặt ở mức độ chi tiết siêu vi.

Các độ dời (delta) này tích lũy bên trong các thanh ghi phần cứng cho đến khi vi điều khiển ngoại vi đọc chúng qua bus Giao diện Ngoại vi Nối tiếp (SPI). Cảm biến báo cáo độ dời dưới dạng các đơn vị đếm (counts), được chia tỉ lệ theo độ phân giải cảm biến cấu hình bằng Số đếm trên mỗi inch (CPI - Counts Per Inch), thường được gọi là Điểm trên mỗi inch (DPI - Dots Per Inch).

Cơ chế truyền ngắt USB (Interrupt Transfer)

USB là một bus bất đối xứng, được lập lịch hoàn toàn bởi máy chủ. Thiết bị ngoại vi không thể đơn phương truyền dữ liệu lên các đường dây bus vật lý. Thay vào đó, bộ điều khiển máy chủ sẽ định kỳ lập lịch gửi các truy vấn thăm dò đến điểm cuối ngắt IN (interrupt IN endpoint) của thiết bị ngoại vi.

Trong quá trình định danh thiết bị (enumeration), chuột cung cấp một bộ mô tả báo cáo HID (HID report descriptor) để xác định cấu trúc gói tin và đặc tính điểm cuối. Bộ mô tả này định nghĩa khoảng thời gian gửi báo cáo của điểm cuối, gọi là bInterval. Đối với USB Full-Speed (12 Mbps), bInterval được biểu thị bằng số nguyên mili-giây:

  • 125 Hz  ⟹  bInterval=8 ms125 \text{ Hz} \implies \text{bInterval} = 8 \text{ ms}
  • 500 Hz  ⟹  bInterval=2 ms500 \text{ Hz} \implies \text{bInterval} = 2 \text{ ms}
  • 1,000 Hz  ⟹  bInterval=1 ms1,000 \text{ Hz} \implies \text{bInterval} = 1 \text{ ms}

USB High-Speed (480 Mbps) xác định bInterval theo các vi khung (microframe) 125 microsecond (0.125 ms0.125 \text{ ms}):

  • bInterval=1  ⟹  8,000 Hz (125 μs)\text{bInterval} = 1 \implies 8,000 \text{ Hz } (125 \text{ } \mu\text{s})
  • bInterval=2  ⟹  4,000 Hz (250 μs)\text{bInterval} = 2 \implies 4,000 \text{ Hz } (250 \text{ } \mu\text{s})
  • bInterval=4  ⟹  2,000 Hz (500 μs)\text{bInterval} = 4 \implies 2,000 \text{ Hz } (500 \text{ } \mu\text{s})
  • bInterval=8  ⟹  1,000 Hz (1,000 μs)\text{bInterval} = 8 \implies 1,000 \text{ Hz } (1,000 \text{ } \mu\text{s})

Khi bộ điều khiển xHCI của máy chủ thực thi một giao dịch truyền ngắt, nó phát một token IN tới địa chỉ điểm cuối của chuột. Nếu các độ dời đã tích lũy trong bộ đệm FIFO của thiết bị, vi điều khiển sẽ phản hồi bằng một gói tin DATA0/DATA1 chứa báo cáo HID:

+------------+-----------+-----------+-----------+---------------+
| Byte 0     | Byte 1    | Byte 2    | Byte 3    | Bytes 4-5     |
| Button Bit | Delta X   | Delta Y   | Wheel     | High-Res Tilt |
| Mask (1-8) | (Low 8)   | (Low 8)   | Stepper   | (Optional)    |
+------------+-----------+-----------+-----------+---------------+

Nếu chuột vật lý không di chuyển và không có nút bấm nào thay đổi trạng thái, vi điều khiển sẽ phản hồi bằng một tín hiệu bắt tay NAK, biểu thị rằng không có báo cáo mới nào đang chờ xử lý.

2. Điều phối sự kiện trong trình duyệt: Luồng xử lý Pointer Events

Khi trình điều khiển của bộ điều khiển máy chủ xử lý ngắt USB gửi đến, hệ thống con nhập liệu của nhân hệ điều hành sẽ chuyển đổi các byte HID thô thành các sự kiện chuyển động trong trình quản lý cửa sổ. Trong runtime trình duyệt, luồng dữ liệu cấp thấp này phải giao tiếp liền mạch với vòng lặp sự kiện và chuỗi kết xuất giao diện.

W3C Pointer Events và gom cụm sự kiện (Event Coalescing)

Trong các triển khai kế thừa trước đây, các ứng dụng web lắng nghe sự kiện DOM mousemove. Do chuỗi kết xuất của trình duyệt hoạt động gắn liền với chu kỳ làm mới màn hình (chẳng hạn như 60 Hz, 144 Hz hoặc 240 Hz), việc kích hoạt các sự kiện JavaScript riêng lẻ cho từng ngắt HID đến ở tần số 1.000 Hz hoặc 8.000 Hz sẽ làm quá tải thread thực thi chính, dẫn đến việc rớt khung hình và làm tăng độ trễ đầu vào.

Để giảm thiểu tình trạng cạn kiệt tài nguyên vòng lặp sự kiện, các engine trình duyệt hiện đại triển khai cơ chế gom cụm sự kiện được chỉ định trong tiêu chuẩn W3C Pointer Events Level 3. Trình duyệt thu thập tất cả các báo cáo phần cứng trung gian nhận được trong một khung hình hoạt họa đơn lẻ và chỉ điều phối một sự kiện pointermove tổng hợp duy nhất tới JavaScript.

Các ứng dụng yêu cầu báo cáo phần cứng nguyên bản, không bị gom cụm, phải truy vấn thông qua event.getCoalescedEvents(). Phương thức này trả về một mảng chứa các đối tượng PointerEvent rời rạc, mỗi đối tượng đại diện cho một gói tin ngắt phần cứng riêng biệt mà hệ điều hành đã nhận:

// Register high-frequency uncoalesced pointer tracking
const canvasElement = document.getElementById('tracking-canvas') as HTMLCanvasElement;

canvasElement.addEventListener('pointermove', (event: PointerEvent) => {
  // Access intermediate reports accumulated during the frame interval
  const coalescedEvents = typeof event.getCoalescedEvents === 'function'
    ? event.getCoalescedEvents()
    : [event];

  for (let i = 0; i < coalescedEvents.length; i++) {
    const rawReport = coalescedEvents[i];
    recordHardwareSample({
      timestamp: rawReport.timeStamp,
      x: rawReport.clientX,
      y: rawReport.clientY,
      pressure: rawReport.pressure
    });
  }
});

Dấu thời gian độ phân giải cao và lượng tử hóa bộ đếm thời gian

Việc phân tích các khoảng thời gian gửi báo cáo đòi hỏi phép đo thời gian chính xác ở cấp độ microsecond. Thuộc tính tiêu chuẩn event.timeStamp cung cấp dấu thời gian dạng số thực dấu phẩy động tính bằng mili-giây kể từ mốc bắt đầu điều hướng, khớp với độ phân giải của performance.now().

Để phòng chống các cuộc tấn công định thời vi kiến trúc như Spectre, các trình duyệt áp dụng kỹ thuật lượng tử hóa bộ đếm thời gian, làm giảm độ chính xác gốc xuống các khoảng từ 5 microsecond đến 100 microsecond tùy thuộc vào các tiêu đề cô lập nguồn gốc chéo (cross-origin isolation headers):

  • Cross-Origin-Opener-Policy: same-origin
  • Cross-Origin-Embedder-Policy: require-corp

Khi các tiêu đề bảo mật này hiện diện, runtime của trình duyệt sẽ khôi phục độ chính xác thời gian phân giải cao xuống khoảng 5 microsecond. Điều này cho phép các kỹ sư đánh giá các thiết bị 1.000 Hz (khoảng thời gian 1.000 microsecond) và 8.000 Hz (khoảng thời gian 125 microsecond) mà không bị nhiễu lượng tử hóa đồng hồ làm sai lệch các tính toán phương sai khoảng cách thời gian.

3. Công thức toán học của tần số báo cáo và độ rung (Jitter)

Độ rung cảm biến (sensor jitter) được định nghĩa là sự sai lệch so với tính tuần hoàn nghiêm ngặt trong khoảng thời gian giữa các lần báo cáo đến. Trong một hệ thống gửi báo cáo 1.000 Hz lý tưởng, các gói tin báo cáo đến với khoảng thời gian cách nhau liên tục không đổi Δt=1.0 ms\Delta t = 1.0 \text{ ms}. Trong môi trường phần cứng thực tế, việc lập lịch tác vụ của hệ điều hành, độ trễ DPC/ISR của trình điều khiển và sự biến thiên truyền dữ liệu của vi điều khiển sẽ tạo ra nhiễu định thời.

Ideal 1,000 Hz Polling (Zero Jitter, dt = 1.0 ms):
|------- 1.0 ms -------|------- 1.0 ms -------|------- 1.0 ms -------|
P1                     P2                     P3                     P4

Real-World Polling with Timing Jitter:
|--- 0.72 ms ---|------ 1.45 ms ------|--- 0.83 ms ---|--- 1.00 ms ---|
P1              P2                    P3              P4              P5
                ^ Early arrival       ^ Late delivery

Tần số tức thời và phân phối thống kê

Gọi tit_i là dấu thời gian độ phân giải cao của gói tin con trỏ thứ ii liên tiếp. Khoảng cách thời gian giữa hai gói tin đến được tính theo công thức:

Δti=ti−ti−1\Delta t_i = t_i - t_{i-1}

Tần số gửi báo cáo tức thời fif_i tính bằng Hertz được xác định bởi:

fi=1000Δti(trong đoˊ Δti được biểu thị ba˘ˋng mili-giaˆy)f_i = \frac{1000}{\Delta t_i} \quad (\text{trong đó } \Delta t_i \text{ được biểu thị bằng mili-giây})

Để đánh giá trạng thái hoạt động của cảm biến chuột qua một cửa sổ quan sát dịch chuyển gồm NN mẫu, chúng ta tính khoảng thời gian trung bình số học μΔt\mu_{\Delta t} và độ lệch chuẩn mẫu σΔt\sigma_{\Delta t}:

μΔt=1N∑i=1NΔti\mu_{\Delta t} = \frac{1}{N} \sum_{i=1}^N \Delta t_i
σΔt=1N−1∑i=1N(Δti−μΔt)2\sigma_{\Delta t} = \sqrt{\frac{1}{N - 1} \sum_{i=1}^N (\Delta t_i - \mu_{\Delta t})^2}

Độ lệch chuẩn σΔt\sigma_{\Delta t} đóng vai trò là thước đo chính của hiện tượng rung báo cáo. Độ lệch chuẩn thấp phản ánh trạng thái báo cáo tuần hoàn ổn định. Giá trị độ lệch chuẩn cao cho thấy hiện tượng dồn cục gói tin, DPC (Deferred Procedure Calls) bị trì hoãn, hoặc việc ưu tiên chiếm quyền luồng (thread preemption) trong hệ điều hành máy chủ.

Phân loại các bất thường về rung cảm biến

Các chẩn đoán cảm biến thực nghiệm xác định ba nhóm bất thường định thời chính:

  1. Hiện tượng giật vi mô và ngắt bị rớt (Micro-Stutter and Dropped Interrupts): Xảy ra khi một khoảng thời gian báo cáo đã lên lịch không trả về được báo cáo cập nhật. Trên đồ thị tần số, hiện tượng này biểu hiện dưới dạng các lần sụt giảm tức thời xuống 500 Hz500 \text{ Hz} hoặc 0 Hz0 \text{ Hz}, ngay sau đó là một xung đột biến báo cáo tổng hợp.
  2. Xung đột biến chu kỳ (Sai lệch đồng hồ - Clock Aliasing): Xuất phát từ sự sai lệch giữa tinh thể dao động nội bộ của vi điều khiển chuột và đồng hồ của root hub máy chủ. Độ lệch pha tích lũy theo thời gian, dẫn đến các hiệu chỉnh khoảng thời gian định kỳ.
  3. Hiện tượng làm mịn cảm biến (Sensor Smoothing Artifacts): Một số cảm biến quang học CPI cao áp dụng bộ lọc trung bình động không gian qua các khung hình liên tiếp để triệt tiêu độ rung vật lý tần số cao trên các lót chuột thô ráp. Mặc dù bộ lọc làm mịn tạo ra các đường thẳng nhìn mượt mà hơn về mặt thẩm mỹ, nó lại tạo ra độ trễ đầu vào từ 2 ms đến 16 ms và làm méo tính toàn vẹn thời gian của các vectơ chuyển động.
// Statistical accumulator for rolling jitter calculation
export class PointerJitterAnalyzer {
  private timestamps: number[] = [];
  private readonly windowSize: number;

  constructor(windowSize: number = 200) {
    this.windowSize = windowSize;
  }

  public pushSample(timestamp: number): void {
    this.timestamps.push(timestamp);
    if (this.timestamps.length > this.windowSize) {
      this.timestamps.shift();
    }
  }

  public calculateMetrics(): { meanFrequencyHz: number; jitterStdDevMs: number; minIntervalMs: number; maxIntervalMs: number } | null {
    if (this.timestamps.length < 10) {
      return null;
    }

    const deltas: number[] = [];
    for (let i = 1; i < this.timestamps.length; i++) {
      const dt = this.timestamps[i] - this.timestamps[i - 1];
      if (dt > 0) {
        deltas.push(dt);
      }
    }

    if (deltas.length === 0) return null;

    const sum = deltas.reduce((acc, val) => acc + val, 0);
    const meanDt = sum / deltas.length;

    let varianceSum = 0;
    let minDt = Infinity;
    let maxDt = -Infinity;

    for (let i = 0; i < deltas.length; i++) {
      const diff = deltas[i] - meanDt;
      varianceSum += diff * diff;
      if (deltas[i] < minDt) minDt = deltas[i];
      if (deltas[i] > maxDt) maxDt = deltas[i];
    }

    const variance = varianceSum / (deltas.length - 1);
    const stdDev = Math.sqrt(variance);
    const meanHz = meanDt > 0 ? 1000 / meanDt : 0;

    return {
      meanFrequencyHz: Math.round(meanHz * 10) / 10,
      jitterStdDevMs: Math.round(stdDev * 1000) / 1000,
      minIntervalMs: Math.round(minDt * 1000) / 1000,
      maxIntervalMs: Math.round(maxDt * 1000) / 1000
    };
  }
}

4. Khử rung công tắc vật lý và các dạng lỗi nhấp đúp

Trong khi việc theo dõi chuyển động cảm biến đánh giá độ dời liên tục ở tần số cao, các nút chuột lại đại diện cho các chuyển đổi trạng thái kỹ thuật số rời rạc. Bản chất vật lý của công tắc cơ học gây ra hiện tượng mất ổn định cơ học trong quá trình kích hoạt.

Mechanical Switch Actuation Contact Bounce:
Voltage
  ^
  |        Depression              Bouncing Interval              Settled
Vcc |           /                   | | | | | | |                 +-------
  |          /                    | | | | | | |                 |
  |         /                     | | | | | | |                 |
GND +------+----------------------+-----------+-----------------+-------> Time
           Physical Contact       Multiple Electrical Rebounds

Vật lý học về hiện tượng nảy tiếp điểm (Contact Bounce)

Các công tắc vi mô cơ học (như công tắc tác động nhanh siêu nhỏ với các tiếp điểm hợp kim bạc hoặc vàng) dựa vào một lá lò xo kim loại uốn cong. Khi một bộ truyền động bên ngoài tác dụng một lực đủ lớn, lò xo sẽ bật nhanh xuống dưới, đẩy tiếp điểm chuyển động tiếp xúc với một tiếp điểm điện cố định.

Khi va chạm vật lý xảy ra, động năng khiến các tiếp điểm kim loại nảy qua lại liên tục với nhau trong vài trăm microsecond cho đến vài mili-giây trước khi đạt trạng thái tiếp xúc ổn định hoàn toàn. Trong khoảng thời gian nảy này, mạch điện liên tục đóng và mở, tạo ra một chuỗi xung điện áp vuông tạm thời.

Nếu không có biện pháp bù đắp, chân đầu vào của vi điều khiển sẽ ghi nhận những xung nảy này thành nhiều lần nhấn nút riêng biệt, gây ra hiện tượng nhấp đúp (double-click) ngoài ý muốn chỉ trong một lần nhấn ngón tay.

Các kiến trúc khử rung (Debounce): Thuật toán so với Quang học

Để ngăn chặn các cú nhấp đúp giả, firmware ngoại vi áp dụng các bộ lọc khử rung tiếp điểm:

  1. Khử rung tức thì (Eager Debouncing): Firmware truyền một gói tin nhấn chuột (mouse-down) ngay ở cạnh xung điện đầu tiên được phát hiện, mang lại độ trễ ban đầu bằng không. Sau đó, nó khởi chạy một bộ đếm thời gian khóa (thường từ 4 ms đến 16 ms), trong suốt thời gian này mọi chuyển đổi trạng thái tiếp theo đều bị bỏ qua. Dù phương pháp này duy trì độ trễ đầu vào thấp, nếu tiếp điểm nảy kéo dài vượt quá khung thời gian khóa, hiện tượng nhấp đúp ngẫu nhiên vẫn xuất hiện.
  2. Khử rung bảo thủ (Conservative Debouncing): Firmware chờ đợi tín hiệu điện duy trì ổn định ở mức điện áp mới trong một ngưỡng thời gian liên tục trước khi gửi báo cáo tới máy chủ. Cách tiếp cận này đảm bảo triệt tiêu hoàn toàn hiện tượng nảy, nhưng lại tăng thêm một khoảng trễ tất định đúng bằng khoảng thời gian debounce vào mỗi lần nhấn.
  3. Công tắc vi mô quang học (Optical Microswitches): Chuột chơi game hiện đại ngày càng thay thế các tiếp điểm kim loại cơ học bằng công tắc quang học. Trong một công tắc quang học, việc nhấn thân phím sẽ chặn hoặc mở đường truyền ánh sáng hồng ngoại do một phototransistor giám sát. Do không có sự va chạm vật lý giữa các tiếp điểm kim loại, hiện tượng nảy tiếp điểm hoàn toàn không thể xảy ra về mặt vật lý. Điều này loại bỏ hoàn toàn độ trễ khử rung, cho phép phát báo cáo ngay lập tức mà không có nguy cơ suy giảm chất lượng tiếp điểm theo thời gian.

5. Kiến trúc chẩn đoán chuột của PetexSpace

Việc đo lường chính xác các cảm biến chuột đòi hỏi một runtime chẩn đoán có khả năng xử lý hàng nghìn mẫu nhận được mỗi giây mà không làm sai lệch thời gian đo lường do chi phí tài nguyên ứng dụng.

+------------------------------------------------------------------------+
|                   PetexSpace Browser Processing Model                  |
|                                                                        |
|  [Hardware Events] ---> [Pointer Listener (Coalesced API)]             |
|                                       |                                |
|                                       v                                |
|                          [Circular Ring Buffer]                        |
|                        (Preallocated Float64Array)                     |
|                                       |                                |
|                  +--------------------+--------------------+           |
|                  |                                         |           |
|                  v                                         v           |
|         [Statistical Math Core]                [Canvas Rendering Core] |
|     (Hz, Jitter StDev, Histogram)           (requestAnimationFrame)    |
|                  |                                         |           |
|                  +--------------------+--------------------+           |
|                                       |                                |
|                                       v                                |
|                           [Zero Egress Local UI]                       |
+------------------------------------------------------------------------+

Kết xuất Canvas thông lượng cao và bộ đệm vòng (Ring Buffers)

Dưới các điều kiện gửi báo cáo ở mức 8.000 Hz, trình duyệt nhận được 8 báo cáo mỗi mili-giây khi con trỏ chuyển động chủ động. Việc cấp phát các đối tượng JavaScript mới cho từng mẫu thử sẽ kích hoạt các chu kỳ thu gom rác (garbage collection) thường xuyên, gây ra các khoảng dừng đáng chú ý trên thread chính làm sai lệch thời gian đo khoảng cách.

Công cụ kiểm tra tần số gửi báo cáo và độ rung của chuột của PetexSpace tránh việc cấp phát tài nguyên lúc runtime bằng cách chuyển các cập nhật con trỏ qua các bộ đệm vòng có kiểu Float64Array được cấp phát trước. Khi các sự kiện con trỏ mới đến qua getCoalescedEvents(), trình lắng nghe sự kiện sẽ cập nhật trực tiếp dấu thời gian và giá trị tọa độ thô vào các bộ đệm bộ nhớ liền kề mà không cần cấp phát thêm các đối tượng heap mới:

// High-efficiency circular buffer for high-frequency samples
export class SampleRingBuffer {
  public readonly timestamps: Float64Array;
  public readonly deltaX: Int32Array;
  public readonly deltaY: Int32Array;
  private head: number = 0;
  private count: number = 0;
  public readonly capacity: number;

  constructor(capacity: number = 16384) {
    this.capacity = capacity;
    this.timestamps = new Float64Array(capacity);
    this.deltaX = new Int32Array(capacity);
    this.deltaY = new Int32Array(capacity);
  }

  public insert(ts: number, dx: number, dy: number): void {
    const idx = this.head;
    this.timestamps[idx] = ts;
    this.deltaX[idx] = dx;
    this.deltaY[idx] = dy;

    this.head = (this.head + 1) % this.capacity;
    if (this.count < this.capacity) {
      this.count++;
    }
  }

  public getSampleCount(): number {
    return this.count;
  }
}

Quá trình kết xuất hình ảnh được tách biệt hoàn toàn khỏi luồng dữ liệu đầu vào phần cứng. Trong khi bộ xử lý sự kiện con trỏ cập nhật bộ đệm vòng ở tần số gửi báo cáo gốc, việc kết xuất giao diện hiển thị chạy bên trong một vòng lặp requestAnimationFrame được đồng bộ với tần số làm mới của màn hình.

Module canvas tính toán các nhóm biểu đồ phân bố (histogram) và các đường cong tần số báo cáo trên cửa sổ bộ đệm gần nhất, kết xuất phân phối tần số theo thời gian thực mà không làm rớt khung hình. Người dùng cũng có thể kết hợp các chỉ số này với bộ công cụ PetexSpace để đo điểm chuẩn độ trễ đầu vào phần cứng trên nhiều cấu hình hệ điều hành khác nhau.

Thực thi trong trình duyệt bảo vệ quyền riêng tư

Các chuyển động của con trỏ chuột bộc lộ các đặc điểm hành vi sinh trắc học rõ nét, bao gồm các rung động vi mô, mô hình kiểm soát vận động và các cấu hình gia tốc. Phù hợp với mô hình quyền riêng tư của PetexSpace, toàn bộ các tính toán chẩn đoán đều diễn ra thông qua việc thực thi trực tiếp ngay trong trình duyệt.

Tọa độ thô, các phép đo tần số gửi báo cáo và dòng thời gian khử rung công tắc hoàn toàn được lưu giữ cục bộ trong bộ nhớ trình duyệt. Không có bất kỳ gói tin đo đạc từ xa (telemetry), cờ theo dõi hay luồng tọa độ không gian nào bị gửi tới các máy chủ từ xa. Kiến trúc này mang đến cho các kỹ sư và những người đam mê công nghệ khả năng chẩn đoán với độ chính xác cao, đồng thời vẫn bảo toàn tuyệt đối quyền riêng tư dữ liệu trên phần cứng của người dùng.

CryptographyXác thựcSecurity

Kiến trúc của Mật khẩu Một lần Dựa trên Thời gian: Khám phá RFC 6238 và Cơ chế Tạo HMAC

Phân tích toán học và giao thức toàn diện về Mật khẩu Một lần Dựa trên Thời gian (TOTP) theo chuẩn RFC 6238, khám phá kỹ thuật dynamic truncation, bộ đếm bước HMAC-SHA1, xử lý lệch đồng hồ và thực thi an toàn ngay trên trình duyệt.

PetexSpace
CryptographyData EncodingMã QR

Giải phẫu mã QR: Cơ chế sửa lỗi Reed-Solomon và mã hóa ma trận

Khám phá chuyên sâu về mặt toán học của mã QR chuẩn ISO/IEC 18004, phân tích chi tiết số học trường Galois GF(2^8), đa thức sinh, cơ chế sửa lỗi Reed-Solomon và kỹ thuật kết xuất ma trận ngay trên trình duyệt.

PetexSpace
CryptographyWeb CryptoSecurity

Tính ngẫu nhiên mật mã học trong trình duyệt: Math.random so với crypto.getRandomValues

Nghiên cứu chuyên sâu về kiến trúc giữa bộ tạo số giả ngẫu nhiên (PRNG) và bộ tạo số giả ngẫu nhiên an toàn về mặt mật mã (CSPRNG) trong môi trường runtime trình duyệt, phân tích chi tiết xorshift128+, các cuộc tấn công tái tạo trạng thái và Web Cryptography API.

PetexSpace
CryptographyData EncodingBase32

So sánh Base32 và Base64: Khác biệt cấu trúc, quy tắc đệm và ứng dụng mật mã học

Đặc tả kỹ thuật chuyên sâu về các chuẩn mã hóa nhị phân sang văn bản theo RFC 4648, đối chiếu cơ chế đóng gói bitwise, ma trận đệm (padding), tính công thái học của bảng chữ cái và quá trình thực thi trực tiếp trên trình duyệt giữa Base32 và Base64.

PetexSpace