Deteksi sinyal ultrasonik

9

Saya telah menciptakan sistem TDOA yang cukup sederhana yang menggunakan sinyal ultrasonik yang dipancarkan dari dua speaker ke ponsel geolocate (relatif ke speaker). Kedua sinyal dipisahkan oleh frekuensi.

Sistem memiliki batasan-batasan berikut:

  • Sinyal harus tidak terdengar. Untuk itu kami tetap menggunakan frekuensi di atas 17 kHz. Beberapa orang masih bisa mendengarnya, tetapi kebanyakan tidak.
  • Tingkat sampel adalah 44,1 kHz.
  • Musik biasanya akan diputar, sehingga ada banyak gangguan pada frekuensi yang lebih rendah.
  • Kami tidak memiliki kontrol atas seberapa baik speaker dan mikrofon bekerja pada frekuensi atas, jadi kami menjaga batas atas kami sekitar 20 kHz.

Sinyal khusus yang saya gunakan adalah BPSK memodulasi kode 13-bit Barker karena sifat autokorelasi yang baik. Autokorelasi seperti berikut- Sinyal autokorelasi

Ketika saya berkorelasi silang sinyal yang diharapkan dengan sinyal yang diterima dalam kehidupan nyata, apa yang saya dapatkan biasanya terlihat seperti ini- Korelasi lintas tipikal

Biru adalah korelasi silang dengan sinyal speaker 1, dan merah adalah korelasi silang dengan sinyal speaker 2. Tampaknya gema itu penting dan, sayangnya, sering kali lebih kuat daripada sinyal jalur langsung karena penguatan arah mikrofon.

Saya mencoba mendeteksi penampilan sinyal yang paling awal karena kemungkinan itu adalah jalur langsung. Pendekatan ini sangat sensitif terhadap ambang yang saya gunakan untuk memutuskan kapan sinyal hadir dan tidak kuat sama sekali.

Saya ingin pendekatan yang kuat untuk menentukan waktu kedatangan "sebenarnya" dari sinyal - yaitu waktu kedatangan sinyal jalur langsung. Mungkin beberapa bentuk estimasi saluran dan dekonvolusi? Jika demikian, bagaimana cara kerjanya?

Data / Kode: Saya ingin memperjelas bahwa saya tidak mengharapkan siapa pun untuk menganalisis data atau memeriksa kode saya. Saya telah membuatnya tersedia jika Anda ingin melakukannya. Saya sebagian besar tertarik pada ide.

Saya membuat sinyal mentah yang diterima dan sinyal yang diharapkan termodulasi tersedia untuk diunduh. Mereka semua sampel pada 44,1 kHz. Mengaitkan sinyal yang diterima dengan sinyal yang diharapkan akan menghasilkan sesuatu yang serupa tetapi tidak identik dengan gambar di atas karena saya memindahkan sinyal yang diterima ke baseband dan memusnahkan sebelum berkorelasi dengan sinyal yang diharapkan.

Menerima sinyal

Sinyal yang diharapkan # 1

Sinyal yang diharapkan # 2

Skrip Matlab Skrip Matlab memiliki skrip pembuatan sinyal (genLocationSig.m) dan skrip penerimaan / pemrosesan (calcTimingOffset.m).

Jim Clay
sumber
Apakah mungkin bagi Anda untuk membagikan data rx1, rx2, dan templat Anda?
Tarin Ziyaee
@ user4619 Saya akan mencoba melakukannya malam ini.
Jim Clay
Sangat cepat: Saya menerima data Anda dan menghasilkan STFT-PSD yang ditingkatkan kontras . Saya menduga 5 blip di bagian bawah adalah dua sinyal Anda, dipisahkan oleh frekuensi. Sepertinya sinyal Anda sedang dikirim ok, tapi saya tidak percaya gema atau multipath adalah masalah Anda. Seperti yang Anda lihat ada banyak suara (broadband) intermiten antara pulsa, setidaknya di awal. Jika Anda menggeser band kompleks, downsample, berkorelasi dengan barker urutan Anda, dan melihat amplop, apa yang Anda lihat?
Tarin Ziyaee
1
Ok, beberapa hal: I) sudahkah Anda mempertimbangkan untuk menggunakan kicauan linier alih-alih bentuk gelombang seperti ini? Anda memiliki lebih banyak fleksibilitas dengan mereka, dan ada bagian yang bergerak kurang drastis. II) Apa, jika ada, kendala bandwidth Anda? Misalnya templat Anda berukuran sekitar 1 KHz, ada alasan untuk ini? Bisakah kamu naik tinggi? Dengan kicauan linear, ini mudah. III) Sementara saya ragu ada yang salah dengan demodulasi Anda, meletakkannya akan membantu. Itu, dan itu akan menyelamatkan saya dari kesulitan menulisnya!
Tarin Ziyaee
1
Mengenai komentar bit, ada kesalahpahaman: Mari kita sebut masing-masing 1 dari 13 negara bagian kode barker sebagai 'chip'. Jadi jika saya mengirimkan sedikit, saya mengirimkan 13 chip. Jika saya mengirimkan 2 bit, saya mengirimkan 26 chip, dll. Jadi pertanyaan saya adalah, berapa banyak bit yang Anda kirimkan? Saya berasumsi bahwa Anda hanya mentransmisikan 1 bit, dan saya katakan Anda juga dapat mempertimbangkan untuk mentransmisikan lebih banyak, untuk menambah penguatan coding Anda. Apakah itu masuk akal?
Tarin Ziyaee

Jawaban:

3

Ini bukan kode yang Anda cari ...

Seperti yang saya sebutkan di komentar, ada beberapa cara untuk melakukan TDOA yang kuat. (Korelasi silang dengan Kicauan Linier, Kicauan Eksponensial, dan metode tipe CDMA). Anda telah membangun sistem TDOA dengan menggunakan kode, (dan itu memang pilihan yang baik dibandingkan chirps linier jika Anda membutuhkan ketahanan terhadap doppler), namun Anda membatasi diri secara artifisial dalam dua cara:

  • Kode Barker hanya mencapai panjang . Namun kita dapat membuat kode urutan PN dengan panjang acak untuk mendapatkan lebih banyak keuntungan pengkodean.13
  • Penggunaan hanya bit pada transmisi Anda. Kita dapat menyandikan seluruh pembukaan banyak bit untuk ditransmisikan, mendapatkan ketahanan lebih lanjut untuk multipath.1

Gunakan PN-Sequence:

Jadi, sangat sederhana, ubah kode yang Anda gunakan untuk memodulasi operator Anda dengan: Gunakan PN-Sequences sebagai gantinya. Kode-kode PN yang dihasilkan bisa sepanjang (hampir) sewenang-wenang, dan dapat dihasilkan melalui LFSR . (Mereka juga menggunakan nama 'pemutih' dalam beberapa teks). Berikut adalah tiga urutan PN panjang , , dan masing-masing.61 1273161127

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];

Korelasi otomatis sirkuler dan linier dari urutan ditunjukkan di bawah ini. Mereka jelas akan menghasilkan spektrum putih, tetapi lebih dari itu, kita tidak lagi terbatas pada panjang chip. Faktanya, kode terakhir, PN_127, menghasilkan penguatan pengkodean dB gain di atas urutan barker, sambil memastikan spektrum putih.10 l o g [ 1271310 log[12713]10

masukkan deskripsi gambar di sini

Mentransmisikan Pembukaan:

Dalam aplikasi khusus Anda, Anda menyebutkan bahwa Anda hanya mentransmisikan satu bit. Anda harus mencoba untuk menghindari ini jika Anda dapat membantunya, dan mengirimkan bit sebanyak yang diperbolehkan oleh aplikasi Anda, untuk mendapatkan penguatan kode lebih lanjut .

316112713


Cobalah salah satu atau kedua solusi itu, dan pasang hasilnya. Saya berharap akan ada perbaikan nyata yang bisa kita ulangi. (Pembentukan pulsa, urutan PN yang berbeda / lebih lama, dll).

Tarin Ziyaee
sumber
1
Ya, saya berencana mencoba urutan yang lebih lama. Saya tidak tahu bahwa autokorelasi melingkar dari urutan pn begitu menarik. Sayangnya untuk aplikasi saya itu adalah autokorelasi linier yang penting. Mengenai pembukaan-seluruh urutan adalah, dengan cara, "pembukaan", dalam arti bahwa apa yang membuat pembukaan adalah berguna adalah bahwa itu adalah pola data yang dikenal. Seluruh sinyal saya dikenal apriori.
Jim Clay
Saya telah memutuskan untuk sedikit berlebihan dalam panjang sinyal dengan menggunakan perintah 10 lfsr (1023 chip) untuk membuktikan atau mengesampingkan bahwa masalahnya dapat dipecahkan dengan memperpanjang sinyal. Saya akan memposting apa yang terjadi.
Jim Clay
1
@JimClay Senang mendengarnya. Saya ingin tahu seperti apa sinyal xcorrs / sinyal yang diterima sekarang. Itu bagus sekali.
Tarin Ziyaee
1
@endolith Ya, doppler adalah masalah. Saya mengatasinya dengan mengkorelasikan beberapa kali, menggeser frekuensi sinyal yang diterima setiap kali dengan jumlah yang berbeda. Ini mudah dilakukan jika Anda berkorelasi dalam domain frekuensi.
Jim Clay
1
@endolith Ketika Jim Clay menjelaskan metodenya, ia pada dasarnya menghitung apa yang dikenal sebagai Fungsi Ambiguitas . Yaitu, hasil koreksi silang, dengan dimensi kedua sesuai dengan frekuensi basis. Ini kemudian akan mengungkapkan puncak, dan karenanya, karena kita tahu frekuensi asli, tingkat dopplernya.
Tarin Ziyaee