簡體   English   中英

Android通過兩台設備之間的聲音獲取距離

[英]Android Getting distance using sound between two devices

這個想法是電話A同時發送聲音信號和藍牙信號,電話B將計算兩個信號之間的延遲。

實際上,從90ms-160ms的延遲中,我得到的結果不一致。 我盡可能地嘗試優化兩端。

在輸出端:
一旦藍牙和音頻輸出都有自己的線程,就會生成音調
AudioTrack.write和AudioTrack處於流模式后藍牙僅輸出
應該在寫入完成之前開始輸出。

在接收端:
同樣是兩個單獨的線程
在每個AudioRecord.read之前記錄系統時間

采樣規格:
44.1
讀取整個緩沖區
使用fft一次采樣100個樣本
考慮到自初始read()以來轉換了多少樣本

您的方法依賴於整個管道的基本零延遲,這實際上是不可能的。 您只是無法以這種准確性進行同步。 如果你可以將延遲降低到5-6毫秒,那么它可能是可能的,但是在你發生這種情況之前你會把頭撞到你的鍵盤上。 即使這樣,它也可能精確到1.5米左右。

考慮一下您收到的延遲的下限。 在90毫秒內,聲音可以傳播超過30m 這就是市售藍牙產品系列的最后一個,甚至沒有考慮到您可能處於非理想的傳輸條件下。

這是一個討論Android中低延遲音頻的線程 TL; DR是它很爛,但是越來越好。 使用最新的API和最新的設備,假設您運行了一些手動調整的音頻功能,則可以將其降低到30毫秒左右。 這里沒有簡單的AudioTrack。 即便如此,這仍然是一個很好的10米圓形錯誤概率。

編輯:

假設您可以同步設備的時鍾,更好的方法是使用簡單的am / fm調制或脈沖序列將時間戳嵌入音頻信號中。 然后你可以在另一端解碼它,並知道它何時被發送。 您仍然需要處理延遲問題,但它可以很好地簡化整個過程。 根本不需要藍牙,因為它實際上並不是一個可靠的時鍾,因為它本身就被認為具有延遲問題。

這為您提供了一個很好的方法http://netscale.cse.nd.edu/twiki/pub/Main/Projects/Analyze_the_frequency_and_strength_of_sound_in_Android.pdf

您必須創建一個具有一定幅度(以dB為單位)的1 kHz聲音,然后嘗試測量到達另一台設備的聲音的幅度。 從鎮靜劑中,您也許可以測量距離。

我記得:a0 = 20 * log(4 * pi * distance / lambda)其中a0是鎮靜劑並給出lambda(你可以從1kHz算起)但是在如此敏感的環境中,噪音可能會破壞整個事物,只是一個想法,如果我是你我該怎么辦。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM