Лучший способ отправить сигнал на очень низкой частоте (250 Гц)?

8

Я программист, сталкивающийся с электронным вопросом, поэтому я подумал, что это то место, где можно задать вопрос!

  • У меня есть датчик магнитного поля, который дает мне значения магнитного поля (ось XYZ) 250 раз в секунду.
  • Электронная схема с программируемым микропроцессором управляет катушкой, которая может изменять магнитное поле достаточно близко к этому датчику. Тем не менее, эти два устройства не являются строго позиционированными, поэтому я не могу передать измерение позиционирования.
  • Я хочу отправить 2 разных типа сигналов от схемы на датчик, которые могут выдерживать сильные шумы на магнитном поле и быть короче, чем полсекунды (да, секунды - мы находимся в 250 Гц!)

Текущее решение состоит в передаче прямоугольной волны 17 Гц, затем 12 Гц, затем 17 Гц для сигнала А, в обратном порядке для сигнала В. Но для обнаружения этих сигналов необходимо посылать достаточно длинные волны, что приводит к длине сигналов около 1,5 секунд.

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

rubmz
источник

Ответы:

7

С частотой дискретизации 250 Гц вы можете легко отправлять 100 бит / с или более. Через 0,5 секунды это будет порядка 50-60 бит.

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

Метод DSP, известный как « согласованный фильтр », может использоваться для обнаружения кодов.

Дэйв Твид
источник
Звучит интересно! Но я бродил, насколько сложным в вычислительном отношении может быть «согласованный фильтр»? Это потребовало бы большого FFT / других вычислений?
rubmz
Я проверил реализации c ++ для согласованного фильтра, и кажется, что для обнаружения сигнала потребуются довольно тяжелые вычисления. Так что это может быть не так полезно для меня, потому что мой код на стороне датчика будет работать в среде RT, поэтому есть ли другой фильтр, который мог бы позволить мне отправлять 2 типа сигналов, менее чем за 0,5 секунды, без слишком большого количества вычислений ?
Rubmz
2
Для этого не требуется преобразование Фурье, но для него требуется эквивалент фильтра FIR (конечной импульсной характеристики) на каждом из трех входных каналов, что математически эквивалентно созданию точечного произведения на двух векторах с 128 выборками для каждого нового входящая выборка (128 умножений и 128 сложений, 250 раз в секунду, в общей сложности ~ 33k операций умножения-добавления каждую секунду на фильтр или всего около 100k MAC / s в секунду). Даже очень дешевый DSP-чип, такой как Microchip dsPIC, может легко выполнять такие вычисления в реальном времени.
Дэйв Твид
2
Просто чтобы прояснить, вам нужно выполнить этот расчет отдельно для каждого кода, который вы хотите обнаружить. Так, например, если у вас есть 10 различных кодов, любой из которых может быть передан в любое время, вам нужно будет запустить десять согласованных фильтров параллельно, в общей сложности до 1M MAC / сек - все еще в пределах возможностей DSPPIC или аналогичный чип. Если вы обнаружите, что более короткие коды достаточно надежны в вашем приложении, то вы можете использовать соответственно более короткие фильтры, и вычислительная нагрузка уменьшается пропорционально.
Дэйв Твид