Ультразвукове виявлення сигналу


9

Я створив досить просту систему TDOA, яка використовує ультразвукові сигнали, що випромінюються з двох динаміків для геолокації (відносно колонок) мобільних телефонів. Два сигнали розділені за частотою.

Система має такі обмеження:

  • Сигнали повинні бути не чутими. З цією метою ми дотримуємось частот понад 17 кГц. Кілька людей все ще можуть це почути, але більшість не може.
  • Частота вибірки - 44,1 кГц.
  • Музика, як правило, відтворюється, тому на низьких частотах є багато перешкод.
  • Ми не маємо контролю над тим, наскільки добре працюють динаміки та мікрофони на верхніх частотах, тому ми зберегли верхню межу приблизно на рівні 20 кГц.

Сигнал, який я використовую, - це модульовані BPSK 13-бітні коди Баркера через їх хороші властивості автокореляції. Автокореляція виглядає так: Автокореляція сигналу

Однак, коли я перехрещую співвідношення очікуваного сигналу з прийнятим сигналом у реальному житті, те, що я отримую, зазвичай виглядає так: Типова перехресна кореляція

Синій - це поперечна кореляція із сигналом 1 динаміка, а червоний - це поперечна кореляція із сигналом 2 динаміка. Здається, відлуння значні і, на жаль, часто сильніші, ніж сигнал прямого шляху внаслідок направленого посилення мікрофона.

Я намагався просто виявити якнайшвидшу появу сигналу, оскільки це, ймовірно, прямий шлях. Цей підхід дуже чутливий до порогу, який я використовую для вирішення, коли сигнал присутній, і тому він не є надійним.

Я хотів би надійний підхід до визначення "справжнього" часу прибуття сигналу, тобто часу прибуття сигналу прямого шляху. Можливо, якась форма оцінки каналу та деконволюція? Якщо так, то як би це працювало?

Дані / Код: Я хочу уточнити, що я не очікую, що хтось аналізуватиме дані чи перевірятиме мій код. Я зробив їх доступними у випадку, якщо ви хочете зробити це. Мене найбільше цікавлять ідеї.

Я зробив вихідний сигнал і модулював очікувані сигнали для завантаження. Всі вони беруть вибірку на частоті 44,1 кГц. Співвіднесення отриманого сигналу з очікуваними сигналами призведе до отримання подібного, але не тотожного малюнку вище, тому що я переміщую отримані сигнали до базової смуги і зменшується перед співвідношенням з очікуваними сигналами.

Отриманий сигнал

Очікуваний сигнал №1

Очікуваний сигнал №2

Сценарії Matlab Сценарії Matlab мають як сценарій генерації сигналу (genLocationSig.m), так і мій сценарій прийому / обробки (calcTimingOffset.m).


Чи можливо вам поділитися даними вашими rx1, rx2 та шаблонами?
Тарін Зіяее

@ user4619 Я спробую це зробити сьогодні ввечері.
Джим Клей

По-справжньому швидко: я отримав ваші дані та створив STFT-PSD з покращеним контрастом . Я здогадуюсь, що ці 5 провалів внизу - це два ваших сигнали, розділені за частотою. Схоже, ваші сигнали передаються нормально, але я не вірю, що відлуння чи багатостороння є вашою проблемою. Як бачите, між імпульсами дуже багато переривчастих (широкосмугових) шумів, принаймні на початку. Якщо ви маєте складну зміну смуги, зменшуєте вибірку, співвідноситесь із послідовністю баркера та дивитесь на конверт, що ви бачите?
Тарін Зіяее

1
Гаразд, кілька речей: я) Ви думали про використання лінійного чирпу замість кодованих форм хвиль, таких як ця? Ви маєте набагато більшу гнучкість з ними, і в них різко менше рухаються деталей. II) Які, якщо такі є, ваші обмеження пропускної здатності? Наприклад, ваші шаблони мають ширину приблизно 1 КГц, чи є якась причина для цього? Ви можете піти вище? З лінійним чирпом це легко. III) Хоча я сумніваюся, що у вашій демодуляції щось не так, допомога може допомогти. Це, і це врятувало б мені клопоту, коли я це написав!
Тарін Зіяее

1
Щодо бітових коментарів, є непорозуміння: назвемо кожне 1 з 13 станів коду баркера «фішкою». Отже, якщо я передаю трохи, я передаю 13 фішок. Якщо я передаю 2 біти, я передаю 26 мікросхем і т. Д. І тому моє питання було, скільки бітів ви передаєте? Я припускаю, що ви просто передаєте 1 біт, і тому я кажу, що ви можете також розглянути можливість передачі набагато більше, щоб збільшити ваш коефіцієнт посилення. Чи має це сенс?
Тарін Зіяе

Відповіді:


3

Це не коди, які ви шукаєте ...

Як я вже згадував у коментарях, існує досить багато способів зробити надійну TDOA. (Перехресна кореляція з лінійними щебенями, експонентними щебетаннями та методами типу CDMA). Ви вже створили систему TDOA, що використовує коди, (і це справді хороший вибір для лінійних чирів, якщо вам потрібна надійність доплерів), проте ви обмежуєте себе штучно двома способами:

  • Коди Баркера досягають лише . Однак ми можемо зробити коди PN-послідовності довільної довжини, щоб отримати набагато більше посилення кодування.13
  • Використання лише біта у вашій передачі. Ми можемо кодувати цілу преамбулу з безліччю бітів для передачі, набуваючи подальшої стійкості до багатошлях.1

Використовуйте послідовність PN:

Таким чином, дуже просто змінити коди, які ви використовуєте для модуляції свого оператора: Використовуйте замість PN-послідовностей. Коди, згенеровані PN, можуть мати (майже) довільну довжину і можуть генеруватися через LFSR . (У деяких текстах вони також ходять за назвою «відбілювачі»). Ось три 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];

Кругові та лінійні автокореляції послідовностей показані нижче. Вони чітко дають спектри білого кольору, але більше того, ми більше не обмежуємося довжиною чіпа. Фактично, останній код, PN_127, дає посилення кодування дБ посилення над послідовністю баркера, весь час гарантуючи спектри білого кольору.1310 log[12713]10

введіть тут опис зображення

Передайте преамбулу:

У своїй конкретній заяві ви згадали, що ви передаєте лише один біт. Ви повинні спробувати уникнути цього, якщо можете допомогти, і передати стільки бітів, скільки дозволяє ваше додаток, щоб отримати подальше посилення кодування.

Це те, що зазвичай робиться в протоколах зв'язку, щоб вирівняти початок пакету. Передається (відома) преамбула, складена з безлічі бітів. Кожен біт складається з безлічі фішок. (У нашому прикладі , або мікросхем з будь-яким з вищезазначених PN-кодів). Нарешті, бітова послідовність сама може складатися з ще однієї послідовності PN, або, якщо вам подобається, ви можете передавати біт, що складають візерунок баркера, при цьому кожен біт складається з будь-якої з вищезазначених послідовностей PN.316112713


Спробуйте одне або обидва ці рішення та поставте свої результати. Я очікую, що відбудуться відчутні поліпшення, які ми можемо потім повторити. (Формування імпульсу, різні / довші послідовності PN тощо).


1
Так, я планую спробувати довші послідовності. Я не знав, що кругові автокореляції pn-послідовностей такі приємні- цікаві. На жаль, для мого застосування важлива саме лінійна автокореляція. Стосовно преамбули - вся послідовність певним чином є "преамбулою", в тому сенсі, що робить преамбулу корисною, що це відомий шаблон даних. Весь мій сигнал апріорі відомий.
Джим Клей

Я вирішив трохи переоцінити довжину сигналу, використовуючи замовлення 10 lfsr (1023 фішки), щоб або довести, або виключити, що проблема вирішується подовженням сигналу. Я опублікую те, що станеться.
Джим Клей

1
@JimClay Радий почути це. Мені цікаво подивитися, як виглядають отримані xcorrs / сигнали зараз. Це чудово, хоча.
Тарін Зіяее

1
@endolith Так, доплерівська проблема. Я вирішую це, співвідносивши кілька разів, зміщуючи частоту прийнятого сигналу кожен раз на різну кількість. Це легко зробити, якщо ви співвідносите частотну область.
Джим Клей

1
@endolith Як описав свій метод Джим Клей, він в основному обчислює те, що відомо як функція неоднозначності . Тобто, перехресні результати, з другим виміром, відповідним базовій частоті. Потім це виявить пік, а отже, оскільки ми знаємо початкову частоту, її ступінь допплера.
Тарін Зіяее
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.