Обнаружение ультразвукового сигнала


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
Хорошо, пара вещей: I) Вы рассматривали возможность использования линейного ЛЧМ вместо закодированных сигналов, таких как эта? У вас гораздо больше гибкости, и задействовано значительно меньше движущихся частей. II) Каковы, если таковые имеются, ваши ограничения пропускной способности? Например, ваши шаблоны имеют ширину около 1 кГц, есть какая-то причина для этого? Вы можете пойти выше? С линейным чирпом это легко. III) Хотя я сомневаюсь, что с вашей демодуляцией что-то не так, это поможет. Это, и это избавило бы меня от необходимости писать это!
Тарин Зияе

1
Что касается комментариев к битам, есть недоразумение: давайте назовем каждое 1 из 13 состояний кода Баркера «чипом». Поэтому, если я передаю немного, я передаю 13 чипов. Если я передаю 2 бита, я передаю 26 чипов и т. Д. И т. Д. Итак, мой вопрос был: сколько бит вы передаете? Я предполагаю, что вы просто передаете 1 бит, и поэтому я говорю, что вы также можете подумать о передаче гораздо большего, чтобы повысить эффективность кодирования. Имеет ли это смысл?
Тарин Зияе

Ответы:


3

Это не коды, которые вы ищете ...

Как я упоминал в комментариях, существует множество способов сделать надежную TDOA. (Кросс-корреляция с линейными ЧИПами, экспоненциальными ЧИПами и методами типа CDMA). Вы уже построили систему TDOA, использующую коды (и это действительно хороший выбор по сравнению с линейным чирпом, если вам нужна устойчивость к допплеру), однако вы искусственно ограничиваете себя двумя способами:

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

Используйте PN-последовательность:

Таким образом, очень просто, измените коды, которые вы используете для модуляции вашего оператора: Используйте вместо этого PN-последовательности. Генерируемые PN коды могут иметь (почти) произвольную длину и могут генерироваться с помощью LFSR . (В некоторых текстах они также носят название «отбеливатели»). Вот три PN-последовательности длиной , и соответственно.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];

Круговые и линейные автокорреляции последовательностей показаны ниже. Они явно дадут белые спектры, но более того, мы больше не ограничены длинами чипа. Фактически, последний код, PN_127, дает усиление кодирования дБ усиления по последовательности Баркера, при этом гарантируя белые спектры.10 л о г [ 1271310 log[12713]10

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

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

В вашем конкретном приложении вы упомянули, что передаете только один бит. Вам следует избегать этого, если вы можете помочь, и передавать столько битов, сколько может позволить ваше приложение, чтобы получить дополнительный выигрыш в кодировании.

Это то, что обычно делается в протоколах связи для выравнивания с началом пакета. Передается (известная) преамбула, состоящая из множества битов. Каждый бит состоит из множества фишек. (В нашем примере , или чипов с любым из указанных выше кодов PN). Наконец, сама битовая последовательность может состоять из еще одной PN-последовательности, или, если хотите, вы можете передавать битов, составляющих шаблон Баркера, причем каждый бит состоит из одной из вышеуказанных PN-последовательностей.61 127 13316112713


Попробуйте одно или оба из этих решений, и представьте свои результаты. Я ожидаю, что будут ощутимые улучшения, которые мы затем сможем повторить. (Формирование импульса, различные / более длинные последовательности PN и т. Д.).


1
Да, я планирую попробовать более длинные последовательности. Я не знал, что круговые автокорреляции последовательностей pn были настолько хорошими - интересными. К сожалению, для моего приложения важна линейная автокорреляция. Относительно преамбулы - вся последовательность, в некотором смысле, является «преамбулой», в том смысле, что преамбула полезна тем, что она является известным шаблоном данных. Весь мой сигнал известен априори.
Джим Клэй

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

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

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

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