Truyền dữ liệu kỹ thuật số qua siêu âm khó khăn hơn nhiều so với bạn nghĩ ngay từ cái nhìn đầu tiên. Chúng tôi đang làm điều này trong một sản phẩm hiện đang thử nghiệm thực địa, nhưng khi chúng tôi bắt đầu thiết kế thì có rất ít thông tin về nó ngoài kia.
Hầu hết các vấn đề đến từ thực tế âm thanh lan truyền chậm (khoảng 3ms mỗi mét), và nó có thể phản xạ và dội lại xung quanh một căn phòng trong một thời gian. Chúng tôi đã thực hiện một số thí nghiệm và đại khái là bạn cần giả định rằng bất kỳ âm thanh phát ra nào sẽ dội lại trong khoảng 10 giây hoặc 30ms. Điều này có nghĩa là giao thức phải cho phép người nhận nhận các bản sao tín hiệu phát ra trùng lặp và tín hiệu ngoài trật tự lên đến 30ms. Nói cách khác, hãy tưởng tượng bất cứ điều gì bạn gửi được sắp xếp lại hoặc sao chép không thể đoán trước trong một cửa sổ 30ms.
Một vấn đề khác là đầu dò siêu âm khá cao Q. Họ mất một vài chu kỳ để bắt đầu, và sau đó tiếp tục đổ chuông một vài chu kỳ sau khi không còn đầu vào nữa. Lưu ý rằng dữ liệu mới và cũ trong khoảng thời gian 30ms cũng có thể can thiệp theo chu kỳ xây dựng hoặc phá hủy theo chu kỳ. Điều này, cùng với sự lộn xộn lan truyền sẽ làm cho tốc độ dữ liệu rất thấp. Những thứ như mã hóa manchester là đúng vì nhà mạng có thể đến và đi vì bị can thiệp nếu có bất cứ thứ gì được phát ra trong 30ms trước đó.
Để giải quyết những vấn đề này, chúng tôi đã tạo ra sơ đồ mã hóa của riêng mình trong hệ thống của chúng tôi. Theo như chúng tôi có thể nói, không ai từng làm điều này trước đây. Tôi không chắc chắn, nhưng khách hàng của chúng tôi có thể đã nộp bằng sáng chế về kỹ thuật này. Tất cả dữ liệu được mã hóa theo chênh lệch thời gian giữa các cạnh đầu của cụm ngắn. Tôi nghĩ rằng chúng tôi gửi khoảng 8-10 chu kỳ ở 40kHz cho mỗi lần phát. 10 chu kỳ chỉ 250us, và không khí lan truyền dài 80-85mm. Người nhận tìm kiếm các cạnh hàng đầu của các vụ nổ này và ghi lại thời gian của họ. Sau khi nhận được một vụ nổ, máy thu sẽ tắt trong ít hơn 30ms vì mọi thứ nhận được trong khoảng thời gian đó sẽ chỉ là tiếng vang. Dữ liệu được mã hóa theo thời gian giữa các đợt liên tiếp. Trong hệ thống của chúng tôi, chênh lệch thời gian là trong phạm vi 30-50ms. Chúng tôi đã sử dụng độ phân giải lượng tử thời gian khá dài khoảng 2ms do các lý do khác bên trong các máy thu mà tôi sẽ không truy cập. Sử dụng phương pháp này, chúng tôi có thể gửi một trong 9 ký tự giữa hai cụm. Chúng tôi có một ký tự đặc biệt để bắt đầu tin nhắn và sau đó là các giá trị 0-7. Nói cách khác, chúng tôi gửi 3 bit thông tin cho mỗi lần phát trong một tin nhắn. Trong hệ thống của chúng tôi, chúng tôi chỉ cần gửi 10 bit dữ liệu tại một thời điểm. Chúng tôi thực sự gửi 6 ký tự cho mỗi tin nhắn, SOM và 5 ký tự dữ liệu với tổng số 15 bit. Chúng tôi sử dụng 5 bit bổ sung cho tổng kiểm tra CRC. Chúng tôi thực sự gửi 6 ký tự cho mỗi tin nhắn, SOM và 5 ký tự dữ liệu với tổng số 15 bit. Chúng tôi sử dụng 5 bit bổ sung cho tổng kiểm tra CRC. Chúng tôi thực sự gửi 6 ký tự cho mỗi tin nhắn, SOM và 5 ký tự dữ liệu với tổng số 15 bit. Chúng tôi sử dụng 5 bit bổ sung cho tổng kiểm tra CRC.
Lượng tử thời gian của chúng tôi khoảng 2ms dài hơn thời gian cần thiết nếu bạn nhìn hoàn toàn vào các vấn đề siêu âm. Giới hạn dưới xuất phát từ sự không chắc chắn của việc nhặt cạnh đầu của một vụ nổ tại máy thu và thay đổi chiều dài đường truyền do chuyển động. Bạn có thể sử dụng lượng tử thời gian xuống tới 500us nếu bạn thực sự cẩn thận, mặc dù chúng tôi đã không thử điều đó.