超音波信号検出


9

2つのスピーカーから発せられた超音波信号を使用して、携帯電話を(スピーカーに対して)位置を特定する、かなりシンプルなTDOAシステムを作成しました。2つの信号は周波数で分離されます。

システムには次の制約があります。

  • 信号は聞こえないようにする必要があります。そのため、17 kHzを超える周波数を使用します。一部の人はまだそれを聞くことができますが、ほとんどは聞くことができません。
  • サンプルレートは44.1 kHzです。
  • 通常は音楽が再生されるため、低い周波数では多くの干渉が発生します。
  • スピーカーとマイクが高周波数でどのように機能するかを制御することはできないため、上限を約20 kHzに維持しました。

私が使用している特定の信号は、自己相関特性が優れているため、BPSK変調13ビットバーカーコードです。自己相関は次のようになります。 信号の自己相関

実際の受信信号に対して期待される信号を相互相関させると、通常、次のようになります。 典型的な相互相関

青はスピーカー1の信号との相互相関、赤はスピーカー2の信号との相互相関です。エコーは重要であり、残念ながら、マイクの指向性ゲインにより、直接パス信号よりも強いことが多いようです。

直接パスである可能性が高いため、信号の最も早い出現を単純に検出してみました。このアプローチは、信号がいつ存在するかを決定するために使用するしきい値に非常に敏感であるため、まったく堅牢ではありません。

信号の「真の」到着時間、つまりダイレクトパス信号の到着時間を決定するための堅牢なアプローチが必要です。おそらく何らかのチャネル推定とデコンボリューションですか?もしそうなら、それはどのように機能しますか?

データ/コード:誰かがデータを分析したりコードを検査したりすることを期待していないことを明確にしたいと思います。必要に応じて利用できるようにしました。主にアイデアに興味があります。

未処理の受信信号と変調された予想信号をダウンロードできるようにしました。これらはすべて44.1 kHzでサンプリングされます。受信信号を期待される信号と相関させると、上記の画像と似たようなものになりますが、期待される信号と相関させる前に受信信号をベースバンドに移動して間引きするためです。

受信信号

予期される信号#1

予期される信号#2

Matlabスクリプト Matlabスクリプトには、信号生成スクリプト(genLocationSig.m)と私の受信/処理スクリプト(calcTimingOffset.m)の両方が含まれています。


rx1、rx2、およびテンプレートデータを共有することは可能ですか?
Tarin Ziyaee、2014年

@ user4619私は今晩それをやろうとします。
ジム・クレイ

非常に迅速:私はあなたのデータを受け取り、コントラストが強化されたSTFT-PSDを作成しました。下部の5つのブリップは、周波数で分離された2つの信号だと思います。信号は正常に送信されているようですが、エコーやマルチパスが問題であるとは思いません。ご覧のとおり、少なくとも最初は、パルス間に断続的な(ブロードバンド)ノイズがたくさんあります。複雑なバンドシフト、ダウンサンプリング、バーカーシーケンスとの相関、エンベロープの確認をすると、何が見えますか?
Tarin Ziyaee、2014年

1
さて、いくつかのこと:I)このようなコード化された波形の代わりに線形チャープを使用することを検討しましたか?それらを使用すると、柔軟性が大幅に向上し、可動部分が大幅に少なくなります。II)もしあれば、帯域幅の制約は何ですか?たとえば、テンプレートの幅が約1 KHzのように見えますが、これには何らかの理由がありますか?高くなれますか?線形チャープを使うとこれは簡単です。III)復調に何か問題があるとは思えませんが、復調することは役立ちます。それで、それを書く手間が省けます!
Tarin Ziyaee

1
ビットコメントに関して、誤解があります。バーカーコードの13の状態のそれぞれを「チップ」と呼びましょう。したがって、ビットを送信する場合、13チップを送信します。2ビットを送信する場合、26チップなどを送信します。それで私の質問は、何ビットを送信するのですか?私はあなたが1ビットを送信していると仮定しているので、コーディングゲインを強化するために、さらに多くの送信を検討してもよいと言っています。それは理にかなっていますか?
Tarin Ziyaee 2014年

回答:


3

これらはあなたが探しているコードではありません...

コメントで述べたように、堅牢なTDOAを行う方法は数多くあります。(線形チャープ、指数チャープ、およびCDMAタイプの方法との相互相関)。コードを利用してTDOAシステムを既に構築しています(そして、ドップラーに対する堅牢性が必要な場合は、線形チャープよりも優れた選択肢です)。ただし、次の2つの方法で人為的に制限しています。

  • 13
  • 1

PNシーケンスを使用します。

3161127

PN_31 = [ 1  1 -1 -1  1  1 -1  1 -1 -1  1 -1 -1 -1 -1  1 -1  1 -1  1  1  1 -1  1  1 -1 -1 -1  1  1  1];

PN_61 = [ 1  1  1 -1  1  1 -1  1 -1 -1  1 -1 -1  1  1  1 -1 -1 -1  1 -1  1  1  1  1 -1 -1  1 ...
     -1  1 -1 -1 -1  1  1 -1 -1 -1 -1  1 -1 -1 -1 -1 -1  1  1  1  1  1  1 -1  1 -1  1 -1 ...
      1  1 -1 -1  1  1 -1];

PN_127 = [-1     1     1     1    -1     1    -1    -1     1    -1     1     1    -1    -1    -1     1     1    -1     1     1     1     1    -1     1     1    -1     1    -1 ...
       1     1    -1     1     1    -1    -1     1    -1    -1     1    -1    -1    -1     1     1     1    -1    -1    -1    -1     1    -1     1     1     1     1     1 ...
      -1    -1     1    -1     1    -1     1     1     1    -1    -1     1     1    -1     1    -1    -1    -1     1    -1    -1     1     1     1     1    -1    -1    -1 ...
       1    -1     1    -1    -1    -1    -1     1     1    -1    -1    -1    -1    -1     1    -1    -1    -1    -1    -1    -1     1     1     1     1     1     1     1 ...
      -1     1    -1     1    -1     1    -1    -1     1     1    -1    -1     1     1     1];

1310 log[12713]10

ここに画像の説明を入力してください

プリアンブルを送信します。

特定のアプリケーションで、1ビットしか送信していないとおっしゃっていました。あなたがそれを助けることができるならこれを避け、あなたのアプリケーションが許す限り多くのビットを送信して、さらなるコーディングの利益を得るように努めるべきです。

316112713、バーカーパターンを構成するビットをし、各ビットを上記のPNシーケンスのいずれかで構成することができます。


これらのソリューションのいずれかまたは両方を試して、結果を出してください。私たちが繰り返し使える具体的な改善があると思います。(パルス成形、異なる/長いPNシーケンスなど)。


1
はい、もっと長いシーケンスを試す予定です。私は、pnシーケンスの循環自己相関がとても興味深いものであることを知りませんでした。残念ながら、私のアプリケーションでは、重要なのは線形自己相関です。プリアンブルに関して、シーケンス全体は、ある意味では「プリアンブル」であり、プリアンブルを有用にするのは、それが既知のデータパターンであるという意味です。私の信号全体はアプリオリに知られています。
ジム・クレイ

私は、信号を長くすることで問題が解決できることを証明または除外するために、10 LFSR(1023チップ)の次数を使用して、信号の長さを少し過剰にすることにしました。何が起こるかを投稿します。
ジム・クレイ

1
@JimClayそれを聞いてうれしい。受信したxcorrs /信号がどのように見えるかを知りたいです。それは素晴らしいことです。
Tarin Ziyaee 2014年

1
@endolithはい、ドップラーが問題です。私はそれを複数回相関させ、受信信号の周波数を毎回異なる量だけシフトすることによって処理します。これは、周波数領域で相関している場合は簡単です。
ジム・クレイ

1
@endolithジム・クレイが彼の方法を説明したように、彼は基本的に曖昧性関数として知られているものを計算しています。つまり、クロスコアが発生し、2番目の次元はベース周波数に対応します。これにより、ピークが明らかになるため、元の周波数がわかっているため、そのドップラー次数がわかります。
Tarin Ziyaee、2014年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.