Перейти к содержанию
    

Вытащить биты из фазового демодулятора

15 минут назад, repstosw сказал:

Unwrap не получается сделать так, чтобы он правильно работал:  он ползёт куда-то вверх, и не всегда срабатывает - оставляются переполнения.

По всему массиву unwrap делать нет смысла - это не матлаб. Нужна всего лишь разница между двумя отсчетами. Если Си алгоритм дает фигню, значит он неправильный. Если результат unwrap неоднозначен - выбирайте меньшее по модулю значение. Выбросы потом (возможно) отфильтруются.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

42 минуты назад, repstosw сказал:

Unwrap не получается сделать так, чтобы он правильно работал

Вот такой unwrap должен работать лучше:

while ( (phi_1 - phi_0) >  (M_PI + dphi_avg)) phi_1 -= 2*M_PI;

while ( (phi_1 - phi_0) < -(M_PI + dphi_avg)) phi_1 += 2*M_PI;

theta = phi_1 - phi_0;

dphi_avg - среднее значение разности фаз между отсчетами.

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

32 minutes ago, komah said:

По всему массиву unwrap делать нет смысла - это не матлаб. Нужна всего лишь разница между двумя отсчетами. Если Си алгоритм дает фигню, значит он неправильный. Если результат unwrap неоднозначен - выбирайте меньшее по модулю значение. Выбросы потом (возможно) отфильтруются.

Заработал нормально diff (unwrap (  ) )

Нужно было диапазон -64...+63 привести к 8 битному.  Иначе скругление разницы не работало.  Пока просто умножил на 2:  диапазон -128... +126.  Правильнее надо -128...+127

s8 BufferIn[SIZE];
s8 BufferOut[SIZE];

 BufferOut[0]=0;
 for(int i=1;i<SIZE;i++)
 {
  BufferOut[i]=2*(BufferIn[i]-BufferIn[i-1]);
 }

image.thumb.png.016b22d9515c7beb0444f6f2179161dd.png

 

Выбросы как я понимаю из-за погрешностий интервала взятия отсчётов.

2 minutes ago, komah said:

Вот такой unwrap должен работать лучше:

while ( (phi_1 - phi_0) >  (M_PI + dphi_avg)) phi_1 -= 2*M_PI;

while ( (phi_1 - phi_0) < -(M_PI + dphi_avg)) phi_1 += 2*M_PI;

theta = phi_1 - phi_0;

dphi_avg - среднее значение разности фаз между отсчетами.

При нахождении разницы unwrap не нужен.

Так как  происходит переполнение 8-бит с скругление с + на -.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

2 минуты назад, repstosw сказал:

Заработал нормально diff (unwrap (  ) )

Отлично! Уже похоже на правду. А сигнал на входе откуда? Такой же трансивер? Как подключен? Визуально, 4FSK с таким качеством проблематично будет демодулировать.

12 минут назад, repstosw сказал:

При нахождении разницы unwrap не нужен.

Так как  происходит переполнение 8-бит с скругление с + на -.

Если вся арифметика 8-битная, то наверное не нужен. Входные отсчеты можно сразу на 1 бит влево сдвинуть.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

20 minutes ago, komah said:

Отлично! Уже похоже на правду. А сигнал на входе откуда? Такой же трансивер? Как подключен? Визуально, 4FSK с таким качеством проблематично будет демодулировать.

Сигнал принимаю по эфиру со второго трансивера Si4463.  Модемы настроены одинаково.

Модуляция, как я уже писал - пока выбрана 2FSK, битрейт 625 кбит/c.  Si4463  разогнана немного: припаял кварц 37.5 МГц вместо шатного кварца30 МГц. Это позволило на 25% увеличить битрейт и увеличить скорость SPI до 15 МГц.

 

До этого сделал стандартно обработку пакетов в дуплексном режиме.   На два MJPEG кадра 160x240 + два потока сжатого звука хватает.

Прикрутил коррекцию ошибок - длинный RS-кодек, исправляющий до 10...12.5% ошибок в пакете . Коррекция ошибок помогает когда сигнал сильно слабый (проверял).

Чем слабже сигнал, тем больший % пакетов исправляется коррекцией.

 

Вот статистика для выходной мощности 0,1 мВт (-10 дБм):  из принятых 2160 пакетов -   602 пакета пришли битыми - они успешно исправлены,  и 54 битых пакета с невозможностью исправить.

! - пакет пришёл без ошибок

* - пакет с ошибками, успешно восстановлен

? - пакет исправить не удалось.

перемещение по комнатам с приёмопередатчиком в руках.

Quote

!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!?*!!!!!!!!!!!!!!!!!!!!!!!!!**!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!*!!!!!!!!!!!!!!!!!!!!***!!!!!!!!!!!!!****!!!!!!*******!*!*!!!!*!!!!!!!!!!!!!!!!*******!!!!!***!?*******!*!!!******!!**!!!**************??**********!!*!!*!!!!!!!!!*!*********!*!***!*************!*****???***!!!!!*************************!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!**!!!!!!!!!!!****?!**!****************!!!?!*****!!!!!!!!!*!!!!!!!!!!!!!!!!!!!!!!!!!*!!*!***!!!!!!!!!!!!!!!!!!!!!!!**!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!*!!!!!!!!!!!!!!!!!!!*!!!!!**!!!!!*?!!!*!!!**!!!!!*!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!********!!**!!!!!!!!!!!!!!!****!******!!?*****???*********!!!!!****!***************************!!!!!!!!*!!**?****!!!!!!!!!!*!***!!!!?!******?**********?????********?************??***!!!!*!!!*!!!!*****?????*!*!!!!!!!!****!****!!!!!**!**!*!!**!**!!!!*!!!!!!!!!!********!*!!*****!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!******!!!!!!!!!!**!!!!**?!!!!*!!!!!!*?**!*!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!*!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!******!!!!!!!!!!!!!***!!!!!*!!!!!!!!!!!!!!!!*!***!!!*!!!!!!!!!!!!***!!!!!!!**!!!!!**!!!!!?*??*!!!!!!!!!!!!!!!!***!*!*!*!!**!*!!***************!*!*!!!!!!!!!!!!!!!!!!!!!!!*!!**!!!!!!!!!!!!!!!!!!!!!!!!!!**!!*!********!!!!!!!***!*!*!!!*****!!**!!!!!!!!!!!!!!!!!!!!!!!********!*!****!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!*!!!!!!!!!!!!!!!!!!!!!!!!!*!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!**!!!!!!!!!!!!!!!!!!!!!!*!!*!*!!!*!!********!**!************!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!**!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!*!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!*?*!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!************************?****?!!**?!!**?*!*?**!*!*******?**!****!*****???************!*!!!!!!*!******?*!*******??***!!!****!!!?*!*!!!!!!!!!!!!****!!!!*!!!!!!*****?*********!*******????**!!!*******!!!

 

 

 

 

Изменено пользователем repstosw

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

4 минуты назад, repstosw сказал:

Сигнал принимаю по эфиру со второго трансивера Si4463.

Есть смысл кабелем соединить через затухатель и фиксированную последовательность передавать. Можно будет вероятность ошибки на приеме оценить и сравнить с железным детектором в микросхеме. На этом этапе важно разобраться, какие всплески из-за помех образуются, а какие из-за косяков приемника.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

12 hours ago, komah said:

Есть смысл кабелем соединить через затухатель и фиксированную последовательность передавать. Можно будет вероятность ошибки на приеме оценить и сравнить с железным детектором в микросхеме. На этом этапе важно разобраться, какие всплески из-за помех образуются, а какие из-за косяков приемника.

Соединил ВЧ входы двух устройств через аттенюатор -30 дБ.  Мощность -10 дБм.

Снял фазу сигнала.  Результат ничем не отличается от сигнала, принятого с эфира. Потому что оба устройства находятся рядом.

 

И всё-же КМК  форма сигнала, найденная через квадратуры и раскрытую производную арктангенса лучше смотрится, чем производная с раскрытого арктангенса.

Проще говоря, рисунок ниже - лучше (нет АМ и меньше заусенцев):

image.thumb.png.7de08c950bb4ded74118a50c9832b709.png

 

И кстати, почему когда передаётся преамбула, видно на графике, что частота слегка подплющивается периодически? Ну тоесть она как бы слегка частотно-модулированная визуально.

 

13 hours ago, repstosw said:

Выбросы как я понимаю из-за погрешностий интервала взятия отсчётов.

Выровнял чтения регистра фазы. Теперь отсчёты фазы бирутся через одинаковый временной интервал.

Стало лучше.

Но выбросы всёравно остались.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1 час назад, repstosw сказал:

И кстати, почему когда передаётся преамбула, видно на графике, что частота слегка подплющивается периодически? Ну тоесть она как бы слегка частотно-модулированная визуально.

Амплитудно-модулированная. Такая АЧХ у приемника получилась, НЧ ослабляются больше. А ровнее нижний график наверное потому, что A и B в знаменателе формулы для вычисления производной найдены через sin и cos. И одновременно нулю никогда не равны.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1 час назад, repstosw сказал:

И всё-же КМК  форма сигнала, найденная через квадратуры и раскрытую производную арктангенса лучше смотрится, чем производная с раскрытого арктангенса.

в модели у меня получалось несколько лучше (меньше выбросов) , если выбросить деление в конце на сумму квадратов амплитуд A^2+B^2. Дело прошлое, и емнип. Попробуйте и Вы , посмотрите разницу, будет ли лучше ( и кстати проще).

Изменено пользователем тау

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Сделал замеры.  На битовой скорости 625 кБит/c  получается 2,19 отсчётов.  Грубо - 2 отсчёта на символ.   Ни о каких мягких решениях нельзя говорить при таком битрейте.

Но для скоростей десятки килобит в секунду сгодится.

 

Всё из-за ограниченной пропускной способности SPI:  максимально работает на половине тактовой частоты кварца:  37.5/2 = 18.75 МГц.

Дальше только усекать разрядность выборок и толкать в байт.  ЕМНИП для мягких решений достаточно трёх бит, остальное лишнее.

 

Попробовал ещё включить логарифмическую визуализацию - с ней красивше смотрится:

image.thumb.png.60a385eb0d8e62ead0a09bc6a99d3f89.png

 

Вверху - через квадратуры, внизу - через разность.

 

16 hours ago, petrov said:

. Уже писал, что стоит поучиться на чужом опыте, первый GSM близок, можно посмотреть

И что там в первом GSM смотреть?  Слишком много всего написано, и не факт что найду нужное.

К тому же я не припомню, чтобы первый GSM решал вопросы скоростей выше 0,5 МБит/c

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

2 hours ago, тау said:

в модели у меня получалось несколько лучше (меньше выбросов) , если выбросить деление в конце на сумму квадратов амплитуд A^2+B^2. Дело прошлое, и емнип. Попробуйте и Вы , посмотрите разницу, будет ли лучше ( и кстати проще).

Проверил.

Эта сумма квадратов всегда равна единице. Выкинул её.  График без изменений.  Облегчило конвеер вычислений.

Почему-то сразу вспомнил основное тригонометрическое тождество...

Изменено пользователем repstosw

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

52 минуты назад, repstosw сказал:

Эта сумма квадратов всегда равна единице. Выкинул её.

Это в частном случае , у вас,  т.к.  квадратуры были в идеальной "квадратуре"

float I=cosf(fi);
  float Q=sinf(fi);

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Какие следующие шаги должны быть?

Нужно засинхронизироваться и начать по выборкам определять биты.

Сделал полифазный фильтр, работающий в сторону апсемплинга. Код брал на гитхабе.  Вышла лажа: отсчёты делает некорректно.

Попробовал ресемплинг в Audacity - довольно неплохо 4:1.

Как теперь найти интервал взятия отсчётов и нужна ли энергия битов?

Пробовал вручную найти интервал выборки - получается уход постоянно:

image.thumb.png.60d83ca48aa45a6e23735253937325af.png

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

repstosw

И что там в первом GSM смотреть?

К тому же я не припомню, чтобы первый GSM решал вопросы скоростей выше 0,5 МБит/c

Модель канала и алгоритмы для надёжной передачи в таком канале. В общем случае глазок у вас будет полностью закрыт и никакие мощнейшие коды с мягким входом не смогут этого исправить, и более высокая скорость только усугубляет проблему.

_

Далее получается, что от Si4463 требуется только квадратурный трансивер, к которому нет нормального доступа, Si4463 не нужен.

_

Какие следующие шаги должны быть?

Что ли так и ещё многое другое. Негодный, грубый способ изучения и разработки обработки цифровых сигналов средств связи, не видно нюансов, в лучшем случае потери небрежной реализации перекроют выигрыш от кодов с мягки входом.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1 hour ago, petrov said:

Модель канала и алгоритмы для надёжной передачи в таком канале. В общем случае глазок у вас будет полностью закрыт и никакие мощнейшие коды с мягким входом не смогут этого исправить, и более высокая скорость только усугубляет проблему.

Почитал ваши сообщения на другом форуме:

https://www.radioscanner.ru/forum/topic42854.html

Вы постоянно занимаетесь тем, что из мухи раздуваете слона.  Одни  заумные рассуждения и только.  Практического толку от таких рассуждений - ноль.

Как говорится, у одного хобби пытаться что-то делать.  А у другого - гнуть пальцы и демонстрировать свою крутость.

Изменено пользователем repstosw

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...