|
|
  |
демодулятор BPSK, как сделать програмно |
|
|
|
Jul 12 2006, 03:26
|
Участник

Группа: Участник
Сообщений: 60
Регистрация: 11-07-06
Из: Челябинск
Пользователь №: 18 726

|
Есть фазомодулированный сигнал 18kHz. Как програмно демодулировать?
|
|
|
|
|
Jul 12 2006, 04:20
|

Знающий
   
Группа: Свой
Сообщений: 877
Регистрация: 26-01-05
Из: Екатеринбург
Пользователь №: 2 206

|
Цитата(kaf @ Jul 12 2006, 09:26)  Есть фазомодулированный сигнал 18kHz. Как програмно демодулировать? Нужно уточнить, как модулирован сигнал. Сколько значений фаз на символ используется. Наиболее просто демодулируется DBPSK - где 0/1 передается изменением фазы. В этом случае достаточно сравнивать фазу сейчас и на 1 бит назад и использовать некогерентный демодулятор: Домножить входной сигнал на I и Q компоненты локальной несущей. В скользящем окне усреднить результат на длине бита. Перемножить усредненные значения с их задержанной на 1 бит версией. Сложить полученные I и Q и по знаку принять решение о значении бита. Полученный цифровой сигнал пропустить еще раз через ФНЧ. Упрощенно принцип показан в пристегнутом файле.
bpskdemod.rar ( 1.35 килобайт )
Кол-во скачиваний: 555
--------------------
Пасу котов...
|
|
|
|
|
Jul 12 2006, 07:01
|
Участник

Группа: Участник
Сообщений: 60
Регистрация: 11-07-06
Из: Челябинск
Пользователь №: 18 726

|
Цитата(Andy Mozzhevilov @ Jul 12 2006, 10:20)  Наиболее просто демодулируется DBPSK - где 0/1 передается изменением фазы. В этом случае достаточно сравнивать фазу сейчас и на 1 бит назад и использовать некогерентный демодулятор: Домножить входной сигнал на I и Q компоненты локальной несущей. В скользящем окне усреднить результат на длине бита. Перемножить усредненные значения с их задержанной на 1 бит версией. Сложить полученные I и Q и по знаку принять решение о значении бита. Полученный цифровой сигнал пропустить еще раз через ФНЧ. Спасибо за ответ, но проблема в том, что я немогу точно задержать сигнал на один период (гуляет частота, дрожат фронты). Как быть в этом случае
|
|
|
|
|
Jul 12 2006, 07:06
|

Знающий
   
Группа: Свой
Сообщений: 877
Регистрация: 26-01-05
Из: Екатеринбург
Пользователь №: 2 206

|
Цитата(kaf @ Jul 12 2006, 13:01)  Спасибо за ответ, но проблема в том, что я немогу точно задержать сигнал на один период (гуляет частота, дрожат фронты). Как быть в этом случае Поясните, какая частота гуляет, на сколько гуляет? Какие фронты дрожжат и откуда фронты в аналоговом сигнале? Какая все-таки модуляция, какая несущая, какая символьная скорость? Обрисуйте задачу более конкретно.
--------------------
Пасу котов...
|
|
|
|
|
Jul 12 2006, 07:28
|
Участник

Группа: Участник
Сообщений: 60
Регистрация: 11-07-06
Из: Челябинск
Пользователь №: 18 726

|
Цитата(Andy Mozzhevilov @ Jul 12 2006, 13:06)  Поясните, какая частота гуляет, на сколько гуляет? Какие фронты дрожжат и откуда фронты в аналоговом сигнале? Какая все-таки модуляция, какая несущая, какая символьная скорость? Обрисуйте задачу более конкретно. Демодулятор нужно сделать на AVR. Входной сигнал компарируется и при переходе фаз начинается настояций бардак. Входной сигнал 18 +/- 0.5 kHz. Есть две фазы 0 и 180. Минимальный период между изменениями 16 периодов несущей частоты. PS Уже сделан апаратный демодулятор, но передомной лежит коробочка, котороя , кроме демодуляции делает еще кучу дел (а в приведенном алгоритме синусы(пусть табличные) и вагон умножений).
|
|
|
|
|
Jul 12 2006, 07:50
|

Знающий
   
Группа: Свой
Сообщений: 877
Регистрация: 26-01-05
Из: Екатеринбург
Пользователь №: 2 206

|
Цитата(kaf @ Jul 12 2006, 13:28)  Цитата(Andy Mozzhevilov @ Jul 12 2006, 13:06)  Поясните, какая частота гуляет, на сколько гуляет? Какие фронты дрожжат и откуда фронты в аналоговом сигнале? Какая все-таки модуляция, какая несущая, какая символьная скорость? Обрисуйте задачу более конкретно.
Демодулятор нужно сделать на AVR. Входной сигнал компарируется и при переходе фаз начинается настояций бардак. Входной сигнал 18 +/- 0.5 kHz. Есть две фазы 0 и 180. Минимальный период между изменениями 16 периодов несущей частоты. PS Уже сделан апаратный демодулятор, но передомной лежит коробочка, котороя , кроме демодуляции делает еще кучу дел (а в приведенном алгоритме синусы(пусть табличные) и вагон умножений). Приведенный алгоритм показывает принцип демодуляции. Дальше оптимизируйте под свою задачу. Сделайте синусы однобитными, тогда ужмножения заменятся на "исключающие или", соответственно на AVR можно будет множить сразу 8 выборок. Далее сдвигами делаете скользящеее окно на количество выборок на битовом интервале, по таблице определяете количество полученных единичных бит. Можно попробовать делать скользящее окно не на длине бита, а на 1-2 периодах несущей, тогда длина линий задержки будет меньше. Но вам нужно брать частоту дискретизации входного миниму в 5 раз больше, чем несущая, то есть под 100 кГц где-то. Не знаю, как тут AVR справится, давно не работал с ними.
--------------------
Пасу котов...
|
|
|
|
|
Jul 12 2006, 14:28
|

Ambidexter
    
Группа: Свой
Сообщений: 1 589
Регистрация: 22-06-06
Из: Oxford, UK
Пользователь №: 18 282

|
Цитата(Andy Mozzhevilov @ Jul 12 2006, 06:50)  Можно попробовать делать скользящее окно не на длине бита, а на 1-2 периодах несущей, тогда длина линий задержки будет меньше. Но вам нужно брать частоту дискретизации входного миниму в 5 раз больше, чем несущая, то есть под 100 кГц где-то. Не знаю, как тут AVR справится, давно не работал с ними. Лучше взять 8 выборок на период (частота выборок 144 кГц, т.е. прерывание каждые 6,9 мкс), тогда будет легко работать с байтовыми эталонами (просто делать два XOR каждые 8 прерываний, если по таблице, то можно прямо в прерывании). Ну а поскольку решение о принятом бите надо принять за 880 мкс (для авр это вагон времени), то еще останется время на выработку тактовой частоты и другие задачи.
--------------------
Делай сразу хорошо, плохо само получится
|
|
|
|
|
Jul 12 2006, 17:02
|
Участник

Группа: Участник
Сообщений: 60
Регистрация: 11-07-06
Из: Челябинск
Пользователь №: 18 726

|
Цитата(=GM= @ Jul 12 2006, 20:28)  Лучше взять 8 выборок на период (частота выборок 144 кГц, т.е. прерывание каждые 6,9 мкс), тогда будет легко работать с байтовыми эталонами (просто делать два XOR каждые 8 прерываний, если по таблице, то можно прямо в прерывании). Ну а поскольку решение о принятом бите надо принять за 880 мкс (для авр это вагон времени), то еще останется время на выработку тактовой частоты и другие задачи. Еще раз повторюсь есть несколько алгоритмов демодуляции BPSK, но в моем случае ключевую роль играет то, что я не могу выставить точную (кратную) частоту прерываний в контроллере по отношению к частоте несущей (а частота фазовых манипуляций привязана к частоте несущей). При кратных частотах выборки частоте несущей у меня с демодуляцией проблем нет, но только она начинает гулять (а плюс еще дребезг фронта при скачке фазы) у меня получается полный бардак.
|
|
|
|
|
Jul 13 2006, 03:11
|

Знающий
   
Группа: Свой
Сообщений: 877
Регистрация: 26-01-05
Из: Екатеринбург
Пользователь №: 2 206

|
Цитата(kaf @ Jul 12 2006, 23:02)  Цитата(=GM= @ Jul 12 2006, 20:28)  Лучше взять 8 выборок на период (частота выборок 144 кГц, т.е. прерывание каждые 6,9 мкс), тогда будет легко работать с байтовыми эталонами (просто делать два XOR каждые 8 прерываний, если по таблице, то можно прямо в прерывании). Ну а поскольку решение о принятом бите надо принять за 880 мкс (для авр это вагон времени), то еще останется время на выработку тактовой частоты и другие задачи.
Еще раз повторюсь есть несколько алгоритмов демодуляции BPSK, но в моем случае ключевую роль играет то, что я не могу выставить точную (кратную) частоту прерываний в контроллере по отношению к частоте несущей (а частота фазовых манипуляций привязана к частоте несущей). Это не обязательное требование. Хуже то, что у вас несущая гуляет несколько +- ~3%. Но и это может не сказаться так фатально, нужно промоделировать. Сделайте алгоритм в матлабе и посмотрите, что получится. Я бы сам сделал (просто интересно, но времени сейчас нет, через неделю в отпуск и доделываю все дела). Критичное место, которое может не дать нормально работать алгоритму при этих условиях - это то, что когда вы домножаете входной сигнал на несущую, в результате получатся суммарная и разностная частоты. Далее при усреднении на длине, кратной периоду локальной несущей получается следующее: Если локальная частота и несущая сигнала равны, то в выходном сигнале будет присутствовать удвоенная частота, которая при усреднении будет фактически задавлена ФНЧ с АЧХ sin(x)/x. Если частоты разные, но суммарная частота не будет попадать на минимум функции АЧХ, соответственно какая то ее часть пролезет на выход и будет там пакостить. Если при существующих отклонения несущей это становится критично, то можно попробовать: 1. Использовать ФАПЧ на несущую, то есть перейти к когерентному детектированию. Для этого реализовать петлю Костаса, и там демодулированный сигнал можно будет снять прямо с выхода одного из плеч ФАПЧ. 2. Использовать фильтр после перемножителя с другой АЧХ, который не будет обладать недостатком усредняющего фильтра. Цитата При кратных частотах выборки частоте несущей у меня с демодуляцией проблем нет, но только она начинает гулять (а плюс еще дребезг фронта при скачке фазы) у меня получается полный бардак. Какой алгоритм вы используете? Можете привести матлабовскую его реализацию?
--------------------
Пасу котов...
|
|
|
|
|
Jul 13 2006, 18:25
|

Местный
  
Группа: Свой
Сообщений: 314
Регистрация: 13-07-06
Из: Москва
Пользователь №: 18 797

|
При кратных частотах выборки частоте несущей у меня с демодуляцией проблем нет, но только она начинает гулять (а плюс еще дребезг фронта при скачке фазы) у меня получается полный бардак. [/quote] То что вам необходимо называется система тактовой синхронизации, самый прострой способ - запустить счетчик который бы стробировал Ваш сигнал(уже преобразованый по алгоритму предложеному выше) так , как будто частота выборки кратна частоте несущей(с этим у Вас проблем нет  ), а затем подстраивать его значения в те момента когда сигнал(уже преобразованый) меняет полярность.
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|