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

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 Как Джим Клэй описал свой метод, он в основном вычисляет то, что известно как Функция Неопределенности . То есть, перекрестные результаты со вторым измерением, соответствующим базовой частоте. Это тогда раскроет пик, и, следовательно, поскольку мы знаем исходную частоту, ее доплеровскую степень.
Тарин Зияе