Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: BPSK(QPSK) модулятор-демодулятор и гидроакустический модем
Форум разработчиков электроники ELECTRONIX.ru > Цифровая обработка сигналов - ЦОС (DSP) > Алгоритмы ЦОС (DSP)
Страницы: 1, 2
Acvarif
Просьба подсобить с общим пониманием как можно построить несложный гидроакустический модем учитывая то, что несущая частота = 35 кГц, а частота передачи данных = 1200 бод/сек (1.2 кГц) Протокол предполагается UART. Проще говоря на несущей нужно передавать последовательный цифровой код (единички и нолики) с частотой 1.2 кГц.

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

Спасибо.
Rst7
Тут подробности нужны. А то многое зависит от глубины. Если вблизи поверхности (или дна) работать, то очень сильное многолучевое распространение будет мешать. И тогда "несложно" не получится.

Но если по-простому, то нынче можно все просто в цифре сделать. Модуляцию, взять, например, GMSK. Передатчик просто ШИМ'ом контроллера сделать, а приемник - после некоторого предварительного усиления сразу цифровать штатным АЦП контроллера и дальше все в цифре - квадратуры, ЧМ-детектор и так далее.
litv
вот такой продается http://rfdsp.ru/modem_ga.html
Acvarif
Цитата(Rst7 @ Feb 2 2018, 12:32) *
Тут подробности нужны. А то многое зависит от глубины. Если вблизи поверхности (или дна) работать, то очень сильное многолучевое распространение будет мешать. И тогда "несложно" не получится.

Но если по-простому, то нынче можно все просто в цифре сделать. Модуляцию, взять, например, GMSK. Передатчик просто ШИМ'ом контроллера сделать, а приемник - после некоторого предварительного усиления сразу цифровать штатным АЦП контроллера и дальше все в цифре - квадратуры, ЧМ-детектор и так далее.

Спасибо.
Посмотрел в сторону GMSK. Вполне возможно. Если с передатчиком не должно быть сложностей то с приемником придется повозиться.
Подробности:
Необходимо организовать несколько подводных передатчиков которые должны передавать по очереди с небольшим временным промежутком (с общим периодом 1 сек) на несущей в ~35кГц данные в виде нескольких байт информации по протоколу UART (старт бит - 8 бит данных - стоп бит) на скорости ~1200 бод в сек.
Передатчики могут находиться на разных глубинах в том числе и на мелководье. Максимум до 40..50 метров. В данных должен содержаться код идентифицирующий номер передатчика и еще некоторая служебная информация в виде нескольких байт. Всего предполагается передать до 8...16 байт данных в одной посылке.
Приемник должен принимать данные от всех передатчиков (разделенные во времени) и индетифицировать их по коду-идентифкатору передатчика.
Если с передатчиком на микроконтроллере в общих чертах понятно то с приемником пока не врубаюсь.
Как примерно будет выглядеть структурная схема приемника организованная на микроконтроллере?
Не лучше-ли для таких целей все-же применить BPSK? Возможно-ли приемник в этом случае организовать в цифровом виде на микроконтроллере?


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

Видно, что Вы очень далеки от темы (обсуждаете сколько стопов и стартов в UART нужно - это даже не вторичные частности, а третичные).
Начинать нужно не с микроконтроллера и UART-ов, а с построения модели канала передача-приём в Матлабе, изучения свойств среды передачи (как Вам тут уже намекнули - отражения, многолучевой приём, изменения спектра, помехи, затухание и прочее) и учёта их в модели.
Когда в модели получите какие-то результаты - можно думать на какое реальное железо это положить.
Думаю задача вполне реальна, но потребует неплохого знания математики и ЦОС. И возможно - ассемблера целевого МК.
Лет 10 назад писал модемы на CPFSK и nQPSK. Правда среда передачи была - радиоканал. И делал на DSP TMS320CC5502 на 220МГц. Со скоростями 300,1200,2400,4800,9600 бод. 9600бод заняло ~30% производительности CPU. Код модулятора и демодулятора полностью был на ассемблере. Возможно, что если тот код для 1200бод переложить на ассемблер современного Cortex-M примерно на 200МГц, то он вытянул-бы. biggrin.gif
Хотя конечно у Cortex-M есть аппаратная плавучка и благодаря ей многие фильтры можно было бы реализовать проще чем были у меня и тогда загрузка будет меньше.

PS: Ну или - поискать готовый интегральный чип модема, подходящий для Вашей среды передачи. Тогда программа будет очень проста.
Rst7
QUOTE
Как примерно будет выглядеть структурная схема приемника организованная на микроконтроллере?


Как и любой другой приемник. Квадратурный гетеродин и смеситель, фильтры ПЧ, детектор. Например - http://www.dsplib.ru/content/fmdemod/fmdemod.html

jcxz
Цитата(Rst7 @ Feb 2 2018, 11:32) *
Передатчик просто ШИМ'ом контроллера сделать, а приемник - после некоторого предварительного усиления сразу цифровать штатным АЦП контроллера и дальше все в цифре - квадратуры, ЧМ-детектор и так далее.

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

Цитата(Rst7 @ Feb 5 2018, 14:04) *
Как и любой другой приемник. Квадратурный гетеродин и смеситель, фильтры ПЧ, детектор. Например - [url="http://electronix.ru/redirect.php?

А перед ними: эквалайзер. Так как думаю, что в воде на разных частотах затухание разное. Хотя при таком узком канале оно ещё может и не сказываться.
После входного полосового фильтра и эквалайзера умножаем сигнал на sin() и cos() несущей частоты - получаем 2 квадратуры, фильтруем их ФНЧ, дальше - собственно демодулятор, а потом - битовый детектор. Как-то так.
Вот последний у меня в своё время вызвал как раз наибольшие сложности.
Rst7
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 бит разрядности АЦП (которая обычно бывает в МК) может не хватить для обеспечения динамического диапазона и чувствительности.


Для такого АЦП да, АРУ надо делать.
jcxz
Цитата(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 есть ЦАП?
Rst7
QUOTE
Конечно наверное можно обойтись. Но зачем?


А зачем потом линейный усилитель вместо двух ключей?

QUOTE
Дьявол как всегда кроется в деталях.


Конечно. Потому что OFDM более выгоден с точки зрения производительности процессора, чем простые методы. Особенно когда нужна эквализация канала. В OFDM это все практически бесплатно получается. Правда, есть нюансы с передатчиком, его нужно делать в виде линейного усилителя. Ну это если не думать wink.gif

QUOTE
битовый детектор (выделение битов из потока сэмплов)


Ну это отдельный разговор. Да, Витерби крайне похабно ложится на обычную архитектуру процессоров, так что его нужно избегать по возможности. Это, кстати, тоже плюс в копилку OFDM, там все банально с принятием решения.
jcxz
Цитата(Rst7 @ Feb 5 2018, 14:47) *
А зачем потом линейный усилитель вместо двух ключей?
В принципе наверное Вы правы, здесь же гидроакустика: излучатель наверное - пьезо, с каким-то резонансным контуром?
Я работал на трансформаторы.

Цитата(Rst7 @ Feb 5 2018, 14:47) *
Ну это отдельный разговор. Да, Витерби крайне похабно ложится на обычную архитектуру процессоров, так что его нужно избегать по возможности. Это, кстати, тоже плюс в копилку OFDM, там все банально с принятием решения.

У меня этот момент был осложнён необходимостью работы модема с ранее разработанным оборудованием: изменить кодирование битового потока было нельзя, а в протоколе при наличии блоков состоящих сплошь из одних "0", в канале так и передавался поток "0". ...до килобайта длиной. И синхронизироваться можно было только по короткому заголовку.
Так что с битовой синхронизацией были большие проблемы.
Acvarif
Да...
Я действительно далек от темы. Придется штудировать буквари.
Читая ответы возникают еще вопросы.
1. Если представить, что гидроакустические передатчики находясь на некотором расстоянии друг от друга передают (излучают) пакеты разных данных одновременно на одной несущей, то в каких-то точках водной среды пакеты могут перекрываться или налагаться друг на друга.
Как в этом случае разделить или идентифицировать нужный пакет от нужного передатчика? Ведь и переотражения от дна и поверхности тоже могут привести к наложению. Как с этим можно бороться? Какой нужно применить способ модуляции (кодирования) сигнала, чтобы выделить (идентифицировать) из смеси наложенных сигналов нужный от нужного передатчика?
Если разделять передатчики по модулирующим частотам то получится сложный приемник для выделения нужной частоты из гребенки частот...
2. Трудно для понимания то, что модулятор и демодулятор можно выполнить на микроконтроллере. Ведь в этом сдучае нужно все оцифровывать, применять АЦП и ЦАП. Как в таком случае, для приемника, определить правильную частоту выборок (семплирования)? Неужели по Найквисту?
jcxz
Цитата(Acvarif @ Feb 5 2018, 15:09) *
1. Если представить, что гидроакустические передатчики находясь на некотором расстоянии друг от друга передают (излучают) пакеты разных данных одновременно на одной несущей, то в каких-то точках водной среды пакеты могут перекрываться или налагаться друг на друга.
Как в этом случае разделить или идентифицировать нужный пакет от нужного передатчика?

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

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

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

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

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

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

Вполне возможно есть. Но у Вас-то специфические требования: многолучевой приём, допплеровский эффект + ещё чего-то специфичного для гидроакустики.
Такой модем должен быть заточен под Вашу область применения.
Разработка модема - вещь сложная и с нуля с обучением займёт думаю не меньше года. С полным погружением в тему.
Kluwert
Если канал распространения глубоководный, то (если не принимать во внимание аналоговую часть и пьезокерамику), то построить такой модем можно чуть ли не на мощном восьмирёночке. А на каком-нибудь 32-х-разрядном АРМе почти как 2 пальца. И зачем вам вообще такие сложные модуляции? Если вам нужно "дёшево и просто" зачем вы в OFDM лезите? Обычный тональник, как в телефонии и фильтр Гёрцеля вам в помощь. Зависит от частоты сильно, но выше звука работает прерасно.

А если на мелководье, то, скорее всего, у вас ничего работать вообще не будет даже на таких смешных скоростях: там из-за дикой реверберации и многолучёвости, ISI у вас будут такие, что вы о 100битах/cек надёжной передачи будете мечтать.
SemperAnte
Цитата(Rst7 @ Feb 5 2018, 15:24) *
Не хочу Вас расстраивать, но делал я как-то как раз гидроакустический модем, там была OFDM, скорость данных порядка 140кбит/с, полный дуплекс с несущими 500кГц и 1МГц (аплинк и даунлинк соответственно). Ну справедливости ради там перемножители были внешние. И внешний АЦП (банальный аудио-АЦП двухканальный), цифровать квадратуры уже после смесителя.

Упомянутые характеристики - это, без всякого сомнения, выдающийся результат. Не могли бы вы поделиться подробностями? Какую дальность обеспечивал модем? Была ли доведена работа до реального образца? Есть ли какая-то открытая документация?
Rst7
QUOTE
Какую дальность обеспечивал модем?


На таких частотах несущих дальше 200 метров не работает. Слишком сильное затухание в воде.

QUOTE
Была ли доведена работа до реального образца?


Ну как-то так - https://youtu.be/lgiOv0hNZKE

QUOTE
Есть ли какая-то открытая документация?


Нет.
SemperAnte
Так вы компанию baltrobotics представляете?
Это оно?
http://www.baltrobotics.com/index.php/prod...cations-channel
Rst7
QUOTE
Так вы компанию baltrobotics представляете?


Я бы не употреблял слово "представляю". Я тут ничего не продаю.

QUOTE
Это оно?


Да.
petrov
Цитата(Rst7 @ Feb 5 2018, 15:24) *
полный дуплекс с несущими 500кГц и 1МГц (аплинк и даунлинк соответственно)


А как развязка передатчика и приёмника осуществляется, чтобы не было перегрузки приёмника, это какие-то акустические фильтры?
Rst7
QUOTE
А как развязка передатчика и приёмника осуществляется, чтобы не было перегрузки приёмника, это какие-то акустические фильтры?


Да там не круговая диаграмма. Порядка 10 градусов. Ну и разнос частот в 2 раза. Так что в местный приемник ничего не попадает (ну попадает, понятное дело, но не мешает из-за очень малого уровня).
jcxz
Цитата(petrov @ Feb 13 2018, 14:50) *
А как развязка передатчика и приёмника осуществляется, чтобы не было перегрузки приёмника, это какие-то акустические фильтры?

А что мешает на время передачи отключить вход приёмника от пьезокристалла?
SemperAnte
Цитата(jcxz @ Feb 13 2018, 16:11) *
А что мешает на время передачи отключить вход приёмника от пьезокристалла?

Я так понимаю, это будет уже не заявленный полный дуплекс.
jcxz
Цитата(SemperAnte @ Feb 13 2018, 15:24) *
Я так понимаю, это будет уже не заявленный полный дуплекс.

А где там в запросе автора требовался полный?
В любом случае - во время импульсов передатчика на кристалле там такой уровень пульсаций, что приём невозможен имхо. Даже если для приёма есть отдельный кристалл, не говоря уже если кристалл всего один - TX/RX.
SemperAnte
Цитата(jcxz @ Feb 13 2018, 17:24) *
А где там в запросе автора требовался полный?
В любом случае - во время импульсов передатчика на кристалле там такой уровень пульсаций, что приём невозможен имхо. Даже если для приёма есть отдельный кристалл, не говоря уже если кристалл всего один - TX/RX.

Действительно, в запросе топикстартера полный не требовался. Мы в процессе обсуждения переключились немного на другую тему.
Тем не менее, ключевые слова "full duplex" часто встречаются в описании коммерческих продуктов различных фирм. Например: https://evologics.de/en/products/acoustics/index.html. То есть, как-то проблему одновременного приема/передачи решают.
bve
Возьмите и присвойте какому-либо набору частот цифровые значения,
например:F0 - пилот-сигнал, F1 - ноль, F2 - один, и т.д.
256 частот - один байт. Проблемы будут с тем, что акустические излучатели обычно узкополосные,
но, взяв Фурье достаточной длины, Вы можете обойтись довольно близкими частотами.
Главное - чтобы длительность посылки была достаточной для уверенного обнаружения.
Можно взять меньше частот и несколько пилот-сигналов и передавать, например, десятичные цифры
Простор для фантазии.
megajohn
Цитата(Acvarif @ Feb 6 2018, 10:30) *
Нет-ли готовых микросхем модуляторов-демодуляторов способных работать с несущими порядка 35..200 кГц?

гляньте на HART модем AD5700 или Power Line Communication Modems CY8CPLC10, CY8CPLC20, LM1893, MAX2990, MAX2992, MAX79356, NCN49597-D, NCN49599-D, ST7536, ST7540, ST7580, ST7590, TDA5051A
может что и можно под вашу задачу заточить ( тоже изучаю вопрос по смежной тематике )


Цитата(Acvarif @ Feb 2 2018, 10:47) *
Как примерно будет выглядеть структура такого устройства?

пишут что так
Нажмите для просмотра прикрепленного файла


Цитата(Acvarif @ Feb 5 2018, 17:09) *
Я действительно далек от темы. Придется штудировать буквари.

по этой ссылке знатоки рекомендуют почитать Скляра.
Acvarif
Цитата(bve @ Feb 14 2018, 23:55) *
Возьмите и присвойте какому-либо набору частот цифровые значения,
например:F0 - пилот-сигнал, F1 - ноль, F2 - один, и т.д.
256 частот - один байт. Проблемы будут с тем, что акустические излучатели обычно узкополосные,
но, взяв Фурье достаточной длины, Вы можете обойтись довольно близкими частотами.
Главное - чтобы длительность посылки была достаточной для уверенного обнаружения.
Можно взять меньше частот и несколько пилот-сигналов и передавать, например, десятичные цифры
Простор для фантазии.

Если точнее то по минимому в воде мне необходимо передать и достоверно принять всего один байт информации.
Очевидно что впереди должен быть еще пилот или синхробайт. А если вообще по самому минимому то минимальная задача это идентифицировать
сигнал запроса для конкретного маяка-ответчика от базовой антенны чтобы дать ответный сигнал базе от нужного маяка-ответчика.
Поэтому Фурье это интересно. Только пока не врубаюсь как это должно работать на несущей в 35 кГц...
Если, например маяков-ответчиков не более 10 может есть совсем простые способы генерации и последующей идентификации запроса? Конечно полоса
у пъезокерамики достаточно узкая - меньше десяти процентов от резонансной частоты.

Rst7
QUOTE
А если вообще по самому минимому то минимальная задача это идентифицировать
сигнал запроса для конкретного маяка-ответчика от базовой антенны чтобы дать ответный сигнал базе от нужного маяка-ответчика.


Эээ, Вы там что, систему определения координат строите?
Acvarif
Цитата(Rst7 @ Feb 15 2018, 23:02) *
Эээ, Вы там что, систему определения координат строите?

Вроде того. Только в любительском варианте с минимальной стоимостью.
Такие профессиональные станции уже давно имеются, все достаточно дорого.
И тем не менее даже в любительском варианте все-же придется организовать обмен данными в виде нескольких байт с периодичностью примерно в 0.5 сек.
Глубина места порядка 15 метров. Это мелководье. Множественных переотражений не избежать. Достоверный прием нескольких байт на такой
глубине очевидно задача не из простых. Но если решить эту задачку то дальше все проще. Пока склоняюсь к BPSK на базе MSP430...
Acvarif
Подскажите пожалуйста где можно найти исходники для BPSK модема на MSP432? http://www.ti.com/lit/an/spma041g/spma041g.pdf
megajohn
Цитата(Acvarif @ Feb 18 2018, 21:29) *
Подскажите пожалуйста где можно найти исходники для BPSK модема на MSP432?


ну блин даете, там же

вот еще аттачНажмите для просмотра прикрепленного файла
Acvarif
Цитата(megajohn @ Feb 19 2018, 10:21) *
ну блин даете, там же

Спасибо.
При чтении документа http://www.ti.com/lit/an/slaa681a/slaa681a.pdf возникает куча вопросов. Один из них про forward error corection на странице 7.
Подскажите пожалуйста где про это можно почитать подробней на русском?
Grizzzly
Цитата(Acvarif @ Feb 28 2018, 20:20) *
Спасибо.
При чтении документа http://www.ti.com/lit/an/slaa681a/slaa681a.pdf возникает куча вопросов. Один из них про forward error corection на странице 7.
Подскажите пожалуйста где про это можно почитать подробней на русском?

Это расширенный, а затем укороченный код Хэмминга (15, 11). Получен путем добавления дополнительного бита - проверки на четность, а затем укорочения кода (16, 11) до (13, 8).

Вернер М. Основы кодирования.
Искусство помехоустойчивого кодирования. Методы, алгоритмы, применение. Р. Морелос-Сарагоса
Acvarif
Цитата(Grizzzly @ Feb 28 2018, 21:09) *
Это расширенный, а затем укороченный код Хэмминга (15, 11). Получен путем добавления дополнительного бита - проверки на четность, а затем укорочения кода (16, 11) до (13, 8).

Спасибо. С этим все оказалось несложно.
Возвращаясь к исходному, к BPSK. Читая, например, этот документ http://www.iject.org/vol73/10-shachi-p.pdf возникли несколько вопросов.
1. Петля Костаса. Нажмите для просмотра прикрепленного файла
Получается что по простому это ФАПЧ фазовая автоподстройка частоты.
В данной схеме не совсем врубился что такое PD1. Это смеситель? Что производится с цифровыми частотами? Они умножаются друг на друга?
Хотя там написано что это "The BPSK modulated data is fed to both the phase
detectors (PD’s)" фазовый детектор.
2. Если к примеру взять несущую 100 кГц и частоту выборок в 4 раза выше 400 кГц то будет-ли работать в этом случае такая фапч как на рисунке?
В приведенном документе предлагается частоту выборок взять намного больше чем несущая.
Grizzzly
Цитата(Acvarif @ Mar 8 2018, 18:17) *
1. В данной схеме не совсем врубился что такое PD1. Это смеситель? Что производится с цифровыми частотами? Они умножаются друг на друга?

Да, это умножитель входного сигнала и опорного.

Цитата(Acvarif @ Mar 8 2018, 18:17) *
2. Если к примеру взять несущую 100 кГц и частоту выборок в 4 раза выше 400 кГц то будет-ли работать в этом случае такая фапч как на рисунке?

Обычно как раз 4 отсчета на символ используют.
petrov
Цитата(Acvarif @ Mar 8 2018, 18:17) *
Читая, например, этот документ http://www.iject.org/vol73/10-shachi-p.pdf


Статья конечно тихий ужас, но в любом случае простая схема костаса не будет работать в условиях коротких пакетов и канала с отражениями.
Acvarif
Цитата(petrov @ Mar 8 2018, 21:38) *
Статья конечно тихий ужас, но в любом случае простая схема костаса не будет работать в условиях коротких пакетов и канала с отражениями.

Спасибо.
Да. Короткие пакеты это проблема. Только сам пока не определился с пакетами. Что считать короткими?
Думаю что явно короткими будут пакеты из нескольких байт.
Но, что если использовать формат передачи данных как на картинке Нажмите для просмотра прикрепленного файла
Можно-ли такой формат считать коротким? Если нет, то будет-ли для такого формата работать приведенный выше ФАПЧ?
Если не сложно, поскажите пожалуйста (ссылкой, функциональной схемой) как выглядит более серъезная петля костаса.
petrov
Цитата(Acvarif @ Mar 8 2018, 22:59) *
как выглядит более серъезная


Надо исходить из того, что из себя представляют подводные каналы акустические:
http://web.mit.edu/millitsa/www/resources/.../chmj-print.pdf
Смотрите на OFDM и прочий multicarrier с feed-forward синхронизацией, возможны относительно простые надёжные реализации с дифференциальной демодуляцией и расширением спектра по поднесущим.
Acvarif
Цитата(petrov @ Mar 9 2018, 00:14) *
Надо исходить из того, что из себя представляют подводные каналы акустические:
http://web.mit.edu/millitsa/www/resources/.../chmj-print.pdf
Смотрите на OFDM и прочий multicarrier с feed-forward синхронизацией, возможны относительно простые надёжные реализации с дифференциальной демодуляцией и расширением спектра по поднесущим.

Спасибо за ссылку.
В сторону OFDM уже просматривал, показалось сложной в плане цифровой реализации для новичка. Для начала хотя-бы с BPSK справиться. Если метров на 100 будет сносно работать то хорошо.
В этом документе http://trudymai.ru/upload/iblock/9ca/9ca83...bb15e464674.pdf предлагается в ФАПЧ использовать ПИФ (пропорционально интегрирующий фильтр)
Скажите пожалуйста насколько это лучше в плане скорости захвата и пр. чем обычная петля ФАПЧ с фильтром LPF?
Grizzzly
Я бы, как посоветовал petrov, в вашем случае осуществлял оценку параметров для синхронизации, используя разомкнутые методы (они же feed-forward). В этом случае оценка производится по принятому блоку.
Acvarif
Цитата(Grizzzly @ Mar 9 2018, 13:04) *
Я бы, как посоветовал petrov, в вашем случае осуществлял оценку параметров для синхронизации, используя разомкнутые методы (они же feed-forward). В этом случае оценка производится по принятому блоку.

Спасибо.
Где можно понятно почитать про feed-forward?
Grizzzly
Цитата(Acvarif @ Mar 9 2018, 13:13) *
Где можно понятно почитать про feed-forward?

Nezami M.K. RF Architectures and Digital Signal Processing Aspects of Digital Wireless Transceivers:
Introduction to Feedorward Synchronization.
Feedforward Carrier Frequency and Carrier Phase Offsets Estimation Algorithms.
Carrier Acquisition and Carrier Tracking for Burst TDMA Satellite and Mobile Radio Receivers.
Acvarif
Цитата(Grizzzly @ Mar 9 2018, 15:47) *
Nezami M.K. RF Architectures and Digital Signal Processing Aspects of Digital Wireless Transceivers:
Introduction to Feedorward Synchronization.
Feedforward Carrier Frequency and Carrier Phase Offsets Estimation Algorithms.
Carrier Acquisition and Carrier Tracking for Burst TDMA Satellite and Mobile Radio Receivers.

Спасибо. Нашел Nezami
https://www.researchgate.net/profile/Mohame...oise-Ratios.pdf
Читать не перечитать.
Если коротко, чем примечательна схема feed-forward по сравнению с обычной ФАПЧ костаса?

Grizzzly
Схема Костаса должна работать с непрерывным потоком символов или достаточно длинной их последовательностью. Это замкнутая система. Разомкнутые системы синхронизации предпочтительны для блоковой передачи. Да, они требуют бОльших вычислительных затрат, но способны произвести оценку параметра по относительно коротким выборкам символов.
Acvarif
Цитата(Grizzzly @ Mar 9 2018, 22:30) *
Схема Костаса должна работать с непрерывным потоком символов или достаточно длинной их последовательностью. Это замкнутая система. Разомкнутые системы синхронизации предпочтительны для блоковой передачи. Да, они требуют бОльших вычислительных затрат, но способны произвести оценку параметра по относительно коротким выборкам символов.

Спасибо. Понятно.
Касательно OFDM. Это ближе к разомкнутой системе? Или все зависит от способа модуляции поднесущих в БПФ?
qxov
Банк согласованных с преамбулой для различных величин расстройки по частоте/символьной скорости фильтров не рассматривается?
quato_a
Цитата(Acvarif @ Mar 9 2018, 22:01) *
Спасибо. Понятно.
Касательно OFDM. Это ближе к разомкнутой системе? Или все зависит от способа модуляции поднесущих в БПФ?


Да, разомкнутая система, feed-forward.
petrov
Цитата(quato_a @ Mar 13 2018, 13:11) *
Да, разомкнутая система, feed-forward.


А если OFDM feed-back сделано, то каким образом да?
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2024 Invision Power Services, Inc.