реклама на сайте
подробности

 
 
> BPSK(QPSK) модулятор-демодулятор и гидроакустический модем
Acvarif
сообщение Feb 2 2018, 06:47
Сообщение #1


Знающий
****

Группа: Участник
Сообщений: 998
Регистрация: 27-08-08
Пользователь №: 39 850



Просьба подсобить с общим пониманием как можно построить несложный гидроакустический модем учитывая то, что несущая частота = 35 кГц, а частота передачи данных = 1200 бод/сек (1.2 кГц) Протокол предполагается UART. Проще говоря на несущей нужно передавать последовательный цифровой код (единички и нолики) с частотой 1.2 кГц.

Можно-ли это организовать на базе BPSK?
Как примерно будет выглядеть структура такого устройства?

Спасибо.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Rst7
сообщение Feb 5 2018, 12:24
Сообщение #2


Йа моск ;)
******

Группа: Модераторы
Сообщений: 4 345
Регистрация: 7-07-05
Из: Kharkiv-city
Пользователь №: 6 610



QUOTE
Возможно, что если тот код для 1200бод переложить на ассемблер современного Cortex-M примерно на 200МГц, то он вытянул-бы. biggrin.gif


Не хочу Вас расстраивать, но делал я как-то как раз гидроакустический модем, там была OFDM, скорость данных порядка 140кбит/с, полный дуплекс с несущими 500кГц и 1МГц (аплинк и даунлинк соответственно). Ну справедливости ради там перемножители были внешние. И внешний АЦП (банальный аудио-АЦП двухканальный), цифровать квадратуры уже после смесителя.

Работало это на 100МГц Cortex-M3 без особых проблем, без всякой плавающей точки, с загрузкой проца где-то в 30-40 процентов. Да-да, с Фурье вперед и назад, с эквалайзером и прочими необходимыми для OFDM пирогами.

А еще был другой, там именно GMSK был, на канале управления жил. Тоже, правда, с внешним АЦП, прямо цинично пьезокерамика на дифференциальный вход AK5384 была подключена. И несущая как раз была в районе 40кГц. Цифровал себе спокойно всю полосу, и дальше все по классике. Ну совсем же смешное было
CODE

#define F_CPU (100000000ULL)
#define RXLS_SAMPLE_RATE (97655ULL)

#pragma inline=forced
static long long QMULL(REG32 a, REG32 b, REG32 c, REG32 d)
{
long long r;
asm("SMULL %L0,%H0,%1,%2":"=Rp"®:"r"(a),"r"(cool.gif);
asm("SMLAL %L0,%H0,%1,%2":"+Rp"®:"r"©,"r"(d));
//return ((long long)a * cool.gif + ((long long)c * d);
return r;
}

static long long FMULADD64(long long r, long long a, UREG32 k)
{
asm("SMLAL %L0,%H0,%H1,%2":"+Rp"®:"Rp"(a),"r"(k));
asm("UMULL %L0,%H0,%L0,%1":"+Rp"(a):"r"(k));
a+=0x80000000;
asm("ADDS %L0,%L0,%H1":"+Rp"®:"r"(a):"cc");
asm("ADC %H0,%H0,#0":"+Rp"®);
return r;
}

static long long FMULSUB64(long long r, long long a, UREG32 k)
{
asm("SMLAL %L0,%H0,%H1,%2":"+Rp"®:"Rp"(a),"r"(-k));
asm("UMULL %L0,%H0,%L0,%1":"+Rp"(a):"r"(k));
a+=0x80000000;
asm("SUBS %L0,%L0,%H1":"+Rp"®:"r"(a):"cc");
asm("SBC %H0,%H0,#0":"+Rp"®);
return r;
}

#pragma inline=forced
static inline REG32 EXPDIVfast(long long f, unsigned long long a)
{
UREG ea;
UREG32 a32=a>>32;
REG32 f32=f>>32;
if (a32)
{
ea=__CLZ(a32);
a32=(a32<<ea)|((unsigned long)a>>(32-ea));
ea--;
f32=(f32<<ea)|((unsigned long)f>>(32-ea));
}
else
{
a32=a;
f32=f;
ea=__CLZ(a32);
a32=a32<<ea;
ea--;
f32=f32<<ea;
}
a32>>=16+1;
if (a32)
return (f32/(REG32)a32)<<8;
else
return 0;
}

#define DEFAULT_FREQ_HZ (32010ULL)
#define DEFAULT_FREQ ((DEFAULT_FREQ_HZ<<32)/RXLS_SAMPLE_RATE)
UINT32 freq_a=DEFAULT_FREQ;
UINT32 phase_a;
#define CHLPF_SHIFT (27)
#define CHLPF_PREGAIN_SHIFT (27)
//1.5kHz, 1dB, 5 poles, Z-transform
#define CHLPF_K0 ( 961)
#define CHLPF_K1 ( 98213853)
#define CHLPF_K2 ( 521724849)
#define CHLPF_K3 ( 1109599598)
#define CHLPF_K4 ( 1181066974)
#define CHLPF_K5 ( 629195138)
void I2S_IRQHandler(void)
{
REG32 rxsig;
rxsig=I2SRXFIFO;
REG32 I;
REG32 Q;
UREG32 vo=phase_a;
I=rxsig*SIN8[(vo+0x00000000)>>24];
Q=rxsig*SIN8[(vo+0x40000000)>>24];
phase_a=vo+freq_a;
//Filter I
{
static signed long long y1,y2,y3,y4,y5;
signed long long result;
result=(long long)I*CHLPF_K0;
result=FMULADD64(result, y1,CHLPF_K1);
result=FMULSUB64(result,y1=y2,CHLPF_K2);
result=FMULADD64(result,y2=y3,CHLPF_K3);
result=FMULSUB64(result,y3=y4,CHLPF_K4);
result=FMULADD64(result,y4=y5,CHLPF_K5);
y5=result<<(32-CHLPF_SHIFT);
I=(INT32)(result>>(CHLPF_SHIFT-1));
}
//Filter Q
{
static signed long long y1,y2,y3,y4,y5;
signed long long result;
result=(long long)Q*CHLPF_K0;
result=FMULADD64(result, y1,CHLPF_K1);
result=FMULSUB64(result,y1=y2,CHLPF_K2);
result=FMULADD64(result,y2=y3,CHLPF_K3);
result=FMULSUB64(result,y3=y4,CHLPF_K4);
result=FMULADD64(result,y4=y5,CHLPF_K5);
y5=result<<(32-CHLPF_SHIFT);
Q=(INT32)(result>>(CHLPF_SHIFT-1)); //Без одного защитного бита
}
//Demodulation
{
static INT32 I1,Q1;
REG32 id,qd;
id=I-I1; I1=I;
qd=Q-Q1; Q1=Q;
long long f=QMULL(-I,qd,Q,id);
unsigned long long a=QMULL(I,I,Q,Q);
lsrx_lvl_a=a;
//Qdata=-EXPDIVfast(f,a);
Qdata=f>0?-0x200000:0x200000;
}

... все, тут уже разбор чисто с цифровым потоком, 0/1 это Qdata<0 или >0

}


QUOTE
Передатчик лучше ЦАП-ом.


Нафиг он там не нужен. Делаются таблички для для плавного по Гауссу изменения фазы ШИМ в вариантах переходов бит 0->1 и 1->0 и все.

QUOTE
И 12 бит разрядности АЦП (которая обычно бывает в МК) может не хватить для обеспечения динамического диапазона и чувствительности.


Для такого АЦП да, АРУ надо делать.


--------------------
"Практика выше (теоретического) познания, ибо она имеет не только достоинство всеобщности, но и непосредственной действительности." - В.И. Ленин
Go to the top of the page
 
+Quote Post
jcxz
сообщение Feb 5 2018, 12:40
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713



Цитата(Rst7 @ Feb 5 2018, 14:24) *
Работало это на 100МГц Cortex-M3 без особых проблем, без всякой плавающей точки, с загрузкой проца где-то в 30-40 процентов. Да-да, с Фурье вперед и назад, с эквалайзером и прочими необходимыми для OFDM пирогами.

Дьявол как всегда кроется в деталях. laughing.gif
Такую загрузку у меня вызывала конечно не сама демодуляция - это были сущие пустяки.
Основная нагрузка была - входные фильтры и битовый детектор (выделение битов из потока сэмплов).
Да и по фильтрам и эквалайзерам - думаю не стоит Вам говорить, что даже небольшое ужесточение требований к крутизне АЧХ фильтра приводит к очень большому увеличению длин фильтров.
Я потом на этом же самом МК делал другой модем с частотой сэмплирования кодека на порядок выше, но с гораздо более чистым каналом (модем для фидеров 0.4-10кВ) и получил загрузку CPU всего в несколько процентов насколько помню.
Да и 30% - это было на максимуме - на pi/4 nQPSK непрерывным потоком на приём и передачу. На 9600бод в полосе 7100Гц. Если бы расширить допустимую полосу сигнала раза в два, то загрузка там падает в разы.

Цитата(Rst7 @ Feb 5 2018, 14:24) *
asm("SMULL %L0,%H0,%1,%2":"=Rp"®:"r"(a),"r"(cool.gif);
asm("SMLAL %L0,%H0,%1,%2":"+Rp"®:"r"©,"r"(d));

Что такое и как работают SMLAL и SMULL и прочие команды Cortex-M - я прекрасно знаю. Писал и оптимизировал работу MP3-декодера с отдельными функциями на чистом асм на Cortex-M. Не напугаете laughing.gif

Цитата(Rst7 @ Feb 5 2018, 14:24) *
Нафиг он там не нужен. Делаются таблички для для плавного по Гауссу изменения фазы ШИМ в вариантах переходов бит 0->1 и 1->0 и все.

Конечно наверное можно обойтись. Но зачем? Зачем таблички и более сложные фильтры после ШИМ, если как правило почти в любом приличном МК Cortex-M есть ЦАП?
Go to the top of the page
 
+Quote Post
Acvarif
сообщение Feb 5 2018, 13:09
Сообщение #4


Знающий
****

Группа: Участник
Сообщений: 998
Регистрация: 27-08-08
Пользователь №: 39 850



Да...
Я действительно далек от темы. Придется штудировать буквари.
Читая ответы возникают еще вопросы.
1. Если представить, что гидроакустические передатчики находясь на некотором расстоянии друг от друга передают (излучают) пакеты разных данных одновременно на одной несущей, то в каких-то точках водной среды пакеты могут перекрываться или налагаться друг на друга.
Как в этом случае разделить или идентифицировать нужный пакет от нужного передатчика? Ведь и переотражения от дна и поверхности тоже могут привести к наложению. Как с этим можно бороться? Какой нужно применить способ модуляции (кодирования) сигнала, чтобы выделить (идентифицировать) из смеси наложенных сигналов нужный от нужного передатчика?
Если разделять передатчики по модулирующим частотам то получится сложный приемник для выделения нужной частоты из гребенки частот...
2. Трудно для понимания то, что модулятор и демодулятор можно выполнить на микроконтроллере. Ведь в этом сдучае нужно все оцифровывать, применять АЦП и ЦАП. Как в таком случае, для приемника, определить правильную частоту выборок (семплирования)? Неужели по Найквисту?

Сообщение отредактировал Acvarif - Feb 5 2018, 13:15
Go to the top of the page
 
+Quote Post
jcxz
сообщение Feb 5 2018, 13:22
Сообщение #5


Гуру
******

Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713



Цитата(Acvarif @ Feb 5 2018, 15:09) *
1. Если представить, что гидроакустические передатчики находясь на некотором расстоянии друг от друга передают (излучают) пакеты разных данных одновременно на одной несущей, то в каких-то точках водной среды пакеты могут перекрываться или налагаться друг на друга.
Как в этом случае разделить или идентифицировать нужный пакет от нужного передатчика?

Например: организовать работу так, чтобы в каждый момент времени работал только один передатчик (не было коллизий).
Например - один центр-мастер, остальные - слэйвы. Мастер организует обмен в канале, слэйвы по своей инициативе не выходят на связь.

Цитата(Acvarif @ Feb 5 2018, 15:09) *
Как в таком случае, для приемника, определить правильную частоту выборок (семплирования)? Неужели по Найквисту?

Лучше - с запасом. Читайте теорию, прочитаете - поймёте wink.gif

PS: У Вас вопросы совсем по разным уровням и частям. И сам модем и организация обмена в канале - рановато вам ещё этой темой заниматься. Прочитать придётся очень много. wink.gif
Go to the top of the page
 
+Quote Post
Acvarif
сообщение Feb 6 2018, 06:30
Сообщение #6


Знающий
****

Группа: Участник
Сообщений: 998
Регистрация: 27-08-08
Пользователь №: 39 850



Цитата(jcxz @ Feb 5 2018, 17:22) *
PS: У Вас вопросы совсем по разным уровням и частям. И сам модем и организация обмена в канале - рановато вам ещё этой темой заниматься. Прочитать придётся очень много. wink.gif

Вы правы. Не знаю с какой стороны к этому делу подступиться.
Чем больше информации, даже общего плана, тем больше возникает вопросов.
В тупик поставил еще один вопрос:
Как можно увеличить битовую скорость с 1200, например до 9600, 19200 не меняя длительность посылки?
Читал что для этого применяются сложные виды модуляции (QPSK, 8PSK, OFDM).
Грустно стало после того как прочитал про OFDM...

Нет-ли готовых микросхем модуляторов-демодуляторов способных работать с несущими порядка 35..200 кГц?

Сообщение отредактировал Acvarif - Feb 6 2018, 08:12
Go to the top of the page
 
+Quote Post
jcxz
сообщение Feb 6 2018, 14:17
Сообщение #7


Гуру
******

Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713



Цитата(Acvarif @ Feb 6 2018, 08:30) *
Нет-ли готовых микросхем модуляторов-демодуляторов способных работать с несущими порядка 35..200 кГц?

Вполне возможно есть. Но у Вас-то специфические требования: многолучевой приём, допплеровский эффект + ещё чего-то специфичного для гидроакустики.
Такой модем должен быть заточен под Вашу область применения.
Разработка модема - вещь сложная и с нуля с обучением займёт думаю не меньше года. С полным погружением в тему.
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Acvarif   BPSK(QPSK) модулятор-демодулятор и гидроакустический модем   Feb 2 2018, 06:47
- - Rst7   Тут подробности нужны. А то многое зависит от глуб...   Feb 2 2018, 09:32
|- - Acvarif   Цитата(Rst7 @ Feb 2 2018, 12:32) Тут подр...   Feb 5 2018, 08:26
||- - jcxz   Цитата(Acvarif @ Feb 5 2018, 10:26) Если ...   Feb 5 2018, 11:58
|- - jcxz   Цитата(Rst7 @ Feb 2 2018, 11:32) Передатч...   Feb 5 2018, 12:08
- - litv   вот такой продается http://rfdsp.ru/modem_ga.html   Feb 2 2018, 10:21
- - Rst7   QUOTE Как примерно будет выглядеть структурная схе...   Feb 5 2018, 12:04
||- - megajohn   Цитата(Acvarif @ Feb 6 2018, 10:30) Нет-л...   Feb 15 2018, 08:42
|- - SemperAnte   Цитата(Rst7 @ Feb 5 2018, 15:24) Не хочу ...   Feb 13 2018, 07:58
|- - petrov   Цитата(Rst7 @ Feb 5 2018, 15:24) полный д...   Feb 13 2018, 12:50
|- - jcxz   Цитата(petrov @ Feb 13 2018, 14:50) А как...   Feb 13 2018, 13:11
|- - SemperAnte   Цитата(jcxz @ Feb 13 2018, 16:11) А что м...   Feb 13 2018, 13:24
|- - jcxz   Цитата(SemperAnte @ Feb 13 2018, 15:24) Я...   Feb 13 2018, 14:24
|- - SemperAnte   Цитата(jcxz @ Feb 13 2018, 17:24) А где т...   Feb 14 2018, 07:37
- - Rst7   QUOTE Конечно наверное можно обойтись. Но зачем? ...   Feb 5 2018, 12:47
|- - jcxz   Цитата(Rst7 @ Feb 5 2018, 14:47) А зачем ...   Feb 5 2018, 13:01
- - Kluwert   Если канал распространения глубоководный, то (если...   Feb 12 2018, 09:21
- - Rst7   QUOTE Какую дальность обеспечивал модем? На таких...   Feb 13 2018, 11:30
- - SemperAnte   Так вы компанию baltrobotics представляете? Это он...   Feb 13 2018, 11:44
- - Rst7   QUOTE Так вы компанию baltrobotics представляете? ...   Feb 13 2018, 12:09
- - Rst7   QUOTE А как развязка передатчика и приёмника осуще...   Feb 13 2018, 12:59
- - bve   Возьмите и присвойте какому-либо набору частот циф...   Feb 14 2018, 20:55
|- - Acvarif   Цитата(bve @ Feb 14 2018, 23:55) Возьмите...   Feb 15 2018, 19:49
- - Rst7   QUOTE А если вообще по самому минимому то минималь...   Feb 15 2018, 20:02
|- - Acvarif   Цитата(Rst7 @ Feb 15 2018, 23:02) Эээ, Вы...   Feb 16 2018, 20:20
|- - Acvarif   Подскажите пожалуйста где можно найти исходники дл...   Feb 18 2018, 18:29
|- - megajohn   Цитата(Acvarif @ Feb 18 2018, 21:29) Подс...   Feb 19 2018, 07:21
|- - Acvarif   Цитата(megajohn @ Feb 19 2018, 10:21) ну ...   Feb 28 2018, 17:20
|- - Grizzzly   Цитата(Acvarif @ Feb 28 2018, 20:20) Спас...   Feb 28 2018, 18:09
|- - Acvarif   Цитата(Grizzzly @ Feb 28 2018, 21:09) Это...   Mar 8 2018, 15:17
|- - Grizzzly   Цитата(Acvarif @ Mar 8 2018, 18:17) 1. В ...   Mar 8 2018, 17:52
|- - petrov   Цитата(Acvarif @ Mar 8 2018, 18:17) Читая...   Mar 8 2018, 18:38
|- - Acvarif   Цитата(petrov @ Mar 8 2018, 21:38) Статья...   Mar 8 2018, 19:59
|- - petrov   Цитата(Acvarif @ Mar 8 2018, 22:59) как в...   Mar 8 2018, 21:14
|- - Acvarif   Цитата(petrov @ Mar 9 2018, 00:14) Надо и...   Mar 9 2018, 08:02
- - Grizzzly   Я бы, как посоветовал petrov, в вашем случае осуще...   Mar 9 2018, 10:04
|- - Acvarif   Цитата(Grizzzly @ Mar 9 2018, 13:04) Я бы...   Mar 9 2018, 10:13
|- - Grizzzly   Цитата(Acvarif @ Mar 9 2018, 13:13) Где м...   Mar 9 2018, 11:47
|- - Acvarif   Цитата(Grizzzly @ Mar 9 2018, 15:47) Neza...   Mar 9 2018, 18:14
- - Grizzzly   Схема Костаса должна работать с непрерывным потоко...   Mar 9 2018, 18:30
|- - Acvarif   Цитата(Grizzzly @ Mar 9 2018, 22:30) Схем...   Mar 9 2018, 19:01
|- - quato_a   Цитата(Acvarif @ Mar 9 2018, 22:01) Спаси...   Mar 13 2018, 10:11
|- - petrov   Цитата(quato_a @ Mar 13 2018, 13:11) Да, ...   Mar 13 2018, 11:26
|- - quato_a   Цитата(petrov @ Mar 13 2018, 14:26) А есл...   Mar 14 2018, 17:29
|- - petrov   Цитата(quato_a @ Mar 14 2018, 20:29) Дела...   Mar 14 2018, 18:05
|- - quato_a   Цитата(petrov @ Mar 14 2018, 21:05) Делал...   Mar 15 2018, 06:09
|- - petrov   Цитата(quato_a @ Mar 15 2018, 09:09) Это ...   Mar 15 2018, 10:07
|- - quato_a   Цитата(petrov @ Mar 15 2018, 13:07) Всё с...   Mar 16 2018, 12:04
|- - Rst7   QUOTE (petrov @ Mar 15 2018, 12:07) сразу...   Mar 16 2018, 12:37
|- - petrov   Цитата(Rst7 @ Mar 16 2018, 15:37) А можно...   Mar 16 2018, 13:44
|- - Rst7   QUOTE (petrov @ Mar 16 2018, 15:44) preco...   Mar 16 2018, 13:55
|- - petrov   Цитата(Rst7 @ Mar 16 2018, 16:55) А есть ...   Mar 16 2018, 14:34
- - qxov   Банк согласованных с преамбулой для различных вели...   Mar 12 2018, 05:12


Reply to this topicStart new topic
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 31st July 2025 - 16:43
Рейтинг@Mail.ru


Страница сгенерированна за 0.015 секунд с 7
ELECTRONIX ©2004-2016