2つのスピーカーから発せられた超音波信号を使用して、携帯電話を(スピーカーに対して)位置を特定する、かなりシンプルなTDOAシステムを作成しました。2つの信号は周波数で分離されます。
システムには次の制約があります。
- 信号は聞こえないようにする必要があります。そのため、17 kHzを超える周波数を使用します。一部の人はまだそれを聞くことができますが、ほとんどは聞くことができません。
- サンプルレートは44.1 kHzです。
- 通常は音楽が再生されるため、低い周波数では多くの干渉が発生します。
- スピーカーとマイクが高周波数でどのように機能するかを制御することはできないため、上限を約20 kHzに維持しました。
私が使用している特定の信号は、自己相関特性が優れているため、BPSK変調13ビットバーカーコードです。自己相関は次のようになります。
実際の受信信号に対して期待される信号を相互相関させると、通常、次のようになります。
青はスピーカー1の信号との相互相関、赤はスピーカー2の信号との相互相関です。エコーは重要であり、残念ながら、マイクの指向性ゲインにより、直接パス信号よりも強いことが多いようです。
直接パスである可能性が高いため、信号の最も早い出現を単純に検出してみました。このアプローチは、信号がいつ存在するかを決定するために使用するしきい値に非常に敏感であるため、まったく堅牢ではありません。
信号の「真の」到着時間、つまりダイレクトパス信号の到着時間を決定するための堅牢なアプローチが必要です。おそらく何らかのチャネル推定とデコンボリューションですか?もしそうなら、それはどのように機能しますか?
データ/コード:誰かがデータを分析したりコードを検査したりすることを期待していないことを明確にしたいと思います。必要に応じて利用できるようにしました。主にアイデアに興味があります。
未処理の受信信号と変調された予想信号をダウンロードできるようにしました。これらはすべて44.1 kHzでサンプリングされます。受信信号を期待される信号と相関させると、上記の画像と似たようなものになりますが、期待される信号と相関させる前に受信信号をベースバンドに移動して間引きするためです。
Matlabスクリプト Matlabスクリプトには、信号生成スクリプト(genLocationSig.m)と私の受信/処理スクリプト(calcTimingOffset.m)の両方が含まれています。