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

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> Программный демодулятор, помогите новичку
Anton1990
сообщение Apr 26 2012, 14:51
Сообщение #1


Частый гость
**

Группа: Участник
Сообщений: 155
Регистрация: 26-04-12
Пользователь №: 71 584



Собственно взялся написать программный демодулятор. Есть файл с оцифрованными квадратурами I, Q. Частота дискретизации 90 МГц. Символьная скорость сигнала 2,5 МГц, сигнал QPSK, с/ш 40 дБ. Программно реализовал примитивный передискретизатор (алгоритм билинейной интерполяции). Я так понимаю после этого на сигнальном созвездии я должен уведеть круг (не полность удалена несущая), но я вижу только подобие круга (слишком зашумлен, в том числе в центре круга). Думаю после передискретизатора необходим ФНЧ (а какой? Одинаковый в обоих каналах?). Прошу сильно не пинать за корявые вопросы?
Если можно опишите поподробней что за чем делать, и что я должен видеть на сигнальном созвездии на промежуточных этапах (дабы контролировать провильность работы).
Заранее спасибо за ответы.
Go to the top of the page
 
+Quote Post
Serg76
сообщение Apr 26 2012, 14:58
Сообщение #2


Профессионал
*****

Группа: Участник
Сообщений: 1 050
Регистрация: 4-04-07
Пользователь №: 26 775



Цитата(Anton1990 @ Apr 26 2012, 17:51) *
Символьная скорость сигнала 2,5 МГц, сигнал QPSK, с/ш 40 дБ.

неплохое такое соотношение sm.gif что за канал, если не секрет, и почему программная реализация?
Go to the top of the page
 
+Quote Post
Anton1990
сообщение Apr 26 2012, 15:58
Сообщение #3


Частый гость
**

Группа: Участник
Сообщений: 155
Регистрация: 26-04-12
Пользователь №: 71 584



Цитата(Serg76 @ Apr 26 2012, 17:58) *
неплохое такое соотношение sm.gif что за канал, если не секрет, и почему программная реализация?

Происхождение сигнала мне точно не известно. Но параметры сигнала точны.

Цитата(Anton1990 @ Apr 26 2012, 18:56) *
Происхождение сигнала мне точно не известно. Но параметры сигнала точны. Программная реализация потому, что сигнал уже оцифрован, но больше требуется просто научиться.

Go to the top of the page
 
+Quote Post
Serg76
сообщение Apr 26 2012, 17:03
Сообщение #4


Профессионал
*****

Группа: Участник
Сообщений: 1 050
Регистрация: 4-04-07
Пользователь №: 26 775



Цитата(Anton1990 @ Apr 26 2012, 18:58) *
Происхождение сигнала мне точно не известно. Но параметры сигнала точны.

Демодулятор разрабатывается под конкретный канал. Самое простое это AWGN, есть смысл начать пробовать с него, если конечно ваш сигнал приближен к нему. Да и скорость в 2,5 Мсим/сек довольно проблематично будет получить.

Цитата(Anton1990 @ Apr 26 2012, 17:51) *
Думаю после передискретизатора необходим ФНЧ (а какой? Одинаковый в обоих каналах?).

Фильтровать надо в любом случае после передискретизации, фильтры в квадратурных каналах одинаковые.
Go to the top of the page
 
+Quote Post
Gyga
сообщение Apr 27 2012, 06:20
Сообщение #5


Местный
***

Группа: Участник
Сообщений: 203
Регистрация: 3-06-08
Пользователь №: 38 014



90 на 2.5 делится на цело можно с передескритизатором не мутить. Сигнал там точно на нулевой частоте? Думаю имеет смысл сделать Фурье и посмотреть
Go to the top of the page
 
+Quote Post
Serg76
сообщение Apr 27 2012, 06:33
Сообщение #6


Профессионал
*****

Группа: Участник
Сообщений: 1 050
Регистрация: 4-04-07
Пользователь №: 26 775



Цитата(Gyga @ Apr 27 2012, 09:20) *
90 на 2.5 делится на цело можно с передескритизатором не мутить.

без фильтрации все равно не обойтись.
Go to the top of the page
 
+Quote Post
fontp
сообщение Apr 27 2012, 09:49
Сообщение #7


Эксперт
*****

Группа: Свой
Сообщений: 1 467
Регистрация: 25-06-04
Пользователь №: 183



QUOTE (Anton1990 @ Apr 26 2012, 18:51) *
Собственно взялся написать программный демодулятор. Есть файл с оцифрованными квадратурами I, Q. Частота дискретизации 90 МГц. Символьная скорость сигнала 2,5 МГц, сигнал QPSK, с/ш 40 дБ. Программно реализовал примитивный передискретизатор (алгоритм билинейной интерполяции). Я так понимаю после этого на сигнальном созвездии я должен уведеть круг (не полность удалена несущая), но я вижу только подобие круга (слишком зашумлен, в том числе в центре круга). Думаю после передискретизатора необходим ФНЧ (а какой? Одинаковый в обоих каналах?). Прошу сильно не пинать за корявые вопросы?
Если можно опишите поподробней что за чем делать, и что я должен видеть на сигнальном созвездии на промежуточных этапах (дабы контролировать провильность работы).
Заранее спасибо за ответы.


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

При моделировании на компе Вы можете просто подвигать фазу выборки и перебором выбрать тот вид где есть круг, а в центре наоборот сигнал отсутствует.
Go to the top of the page
 
+Quote Post
Anton1990
сообщение Apr 27 2012, 15:09
Сообщение #8


Частый гость
**

Группа: Участник
Сообщений: 155
Регистрация: 26-04-12
Пользователь №: 71 584



Цитата(fontp @ Apr 27 2012, 12:49) *
Чтобы увидеть круг нужно выборку делать в правильных точках. Другими словами нужно восстановить фазу символьной частоты (да и то,если Вам абсолютно точно известна её частота, обычно для непрерывного сигнала ещё требуется и её подстройка, но на каком-то ограниченом участке сойдут априорные 2.5). Если брать выборку где попало Вы и увидите что попало... А в вашем сообщении как-то это не прозвучало, что символьная фаза восстановлена с достаточной точностью. Только если выборку брать там где надо, появится вращающееся созвездие.
После точной настройки частоты несущей - действительно вращение прекратится и получится демодулятор

При моделировании на компе Вы можете просто подвигать фазу выборки и перебором выбрать тот вид где есть круг, а в центре наоборот сигнал отсутствует.


Сигнал точно на нулевой частоте. Параметры сигнала точно верны. Данные обрабатываю пачками по 2048 отсчета. 2048 отсчета на 90 МГерцах, мне требуется частота 2,5 МГц, следовательно, я должен весь интревал отсчетов разбить на 2,5 * 2048/90=56,88888 отсчетов? пробую 56 или 57 отсчетов. Ни втом ни в другом случае "хорошего" круга не получаю. Так и должно быть или я круги должен видеть только после фильтрации?
Go to the top of the page
 
+Quote Post
Serg76
сообщение Apr 27 2012, 17:13
Сообщение #9


Профессионал
*****

Группа: Участник
Сообщений: 1 050
Регистрация: 4-04-07
Пользователь №: 26 775



Цитата(Anton1990 @ Apr 27 2012, 18:09) *
Сигнал точно на нулевой частоте. Параметры сигнала точно верны. Данные обрабатываю пачками по 2048 отсчета. 2048 отсчета на 90 МГерцах, мне требуется частота 2,5 МГц, следовательно, я должен весь интревал отсчетов разбить на 2,5 * 2048/90=56,88888 отсчетов?

выше Вам уже писали: ...(да и то,если Вам абсолютно точно известна её частота, обычно для непрерывного сигнала ещё требуется и её подстройка...
Следовательно, кроме самого ресамплера, требуется еще и контур ФАПЧ, который будет подстраивать фазу тактов в ресамплере. И еще, Вы не должны обращать внимания как в демодулятор поступают данные, отсчетами или пачками, причем эти пачки зачастую могут быть и разной длины, алгоритм работы демодулятора строится, как правило, потактно, т.е. все решения и ошибки в системах вырабатываются тоже на каждом символьном интервале. могут быть, конечно, и исключения какие-то, но в целом это так.

Сообщение отредактировал Serg76 - Apr 27 2012, 17:14
Go to the top of the page
 
+Quote Post
fontp
сообщение Apr 27 2012, 17:16
Сообщение #10


Эксперт
*****

Группа: Свой
Сообщений: 1 467
Регистрация: 25-06-04
Пользователь №: 183



QUOTE (Anton1990 @ Apr 27 2012, 19:09) *
Сигнал точно на нулевой частоте. Параметры сигнала точно верны. Данные обрабатываю пачками по 2048 отсчета. 2048 отсчета на 90 МГерцах, мне требуется частота 2,5 МГц, следовательно, я должен весь интревал отсчетов разбить на 2,5 * 2048/90=56,88888 отсчетов? пробую 56 или 57 отсчетов. Ни втом ни в другом случае "хорошего" круга не получаю. Так и должно быть или я круги должен видеть только после фильтрации?


Зачем 56?

90/2.5=36. 36 отсчетов символьный интервал.

Но вы можете взять выборки 0, 36, 72, 108...
А можете взять 10, 46, 82, 118....

Только при правильной фазировании будет круг. Более того даже "точно верные" частоты отличаются хотя бы на 10 в минус седьмой. А это означает, что даже правильная на малом интервале фаза со временем будет уползать. Т.е. в непрерывных модемах нужно подстраивать не только фазу, но и частоту символьного тактирования. Без подстройки частоты (но в любом случае с подстройкой символьной фазы) работают только пакетные модемы, где вся синхронизация повторяется периодически на интервале пакета

Фильтрация должна быть просто чтобы подавить внеполосный шум. Отфильтруйте для начала прямоугольным фильтром, по сравнению с оптимальным разница будет небольшая. Однако внеполосные шумы у вас могут превышать шумы в полосе максимум в 36 раз (примерно 30дб), а это значит, что при ваших 40 дб Вы размытый шумом круг должны увидеть даже без всякой фильтрации
Go to the top of the page
 
+Quote Post
thermit
сообщение Apr 27 2012, 18:02
Сообщение #11


Знающий
****

Группа: Участник
Сообщений: 781
Регистрация: 3-08-09
Пользователь №: 51 730



Цитата
fontp:
Фильтрация должна быть просто чтобы подавить внеполосный шум.


У топикстартера и так снр 40 дб. Чего там подавлять?
Go to the top of the page
 
+Quote Post
Serg76
сообщение Apr 27 2012, 18:15
Сообщение #12


Профессионал
*****

Группа: Участник
Сообщений: 1 050
Регистрация: 4-04-07
Пользователь №: 26 775



честно говоря, не совсем ясно что там у ТС вообще присутствует в этих 90-та МГц, может только внеполосный шум, а может и не только, поэтому для общего случая построения демодулятора фильтровать все-таки необходимо. да и зачем такая большая избыточность при оцифровке (к-нт децимации = 36), может есть смысл выбрать Fs по-меньше, если это возможно.
Go to the top of the page
 
+Quote Post
thermit
сообщение Apr 27 2012, 18:29
Сообщение #13


Знающий
****

Группа: Участник
Сообщений: 781
Регистрация: 3-08-09
Пользователь №: 51 730



Цитата
Serg76:
фильтровать все-таки необходимо


Куда более необходимо ознакомиться с книжками типа прокиса/скляра/... А уж потом открывать глубокомысленные топики на електрониксе... На радость телепатам...
Go to the top of the page
 
+Quote Post
stealth-coder
сообщение Apr 30 2012, 11:01
Сообщение #14


Частый гость
**

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



Алгоритм программной демодуляции сигналов QPSK:
1. Если сигнал записан на промежуточной частоте, необходимо выполнить снос сигнала на нулевую частоту путем умножения отсчетов сигнала на комплексную гармонику промежуточной частоты;
2. Осуществить передискретизацию сигнала таким образом, чтобы новая частота дискретизации была кратна тактовой частоте. Обычно для QPSK берут 4 или 8 отсчетов на посылку, чем больше, тем лучше, но вычислительно затратнее. При передискретизации не забыть про антиалайзинговый фильтр;
3. Осуществить согласованную фильтрацию полученного сигнала, обычно согласованным фильтром является тот же фильтр, который используется на передающей стороне (например, если на передающей стороне использовался фильтр Root Raised Cosine с коэффициентом альфа=X, то и на приемной стороне должен быть использован такой же фильтр). Согласованная фильтрация в конечном итоге приводит к увеличению соотношения сигнал/шум. Если фильтр неизвестен, то можно рассчитать ФНЧ, подходящий по полосе и имеющий достаточную величину подавления в полосе задерживания. Фильтр применяется к каждой квадратурной составляющей независимо. При скорости 2.5 Мбод полоса фильтра должна быть чуть больше половины скорости передачи, в данном случае, около 1.3 МГц.
4. Выполняется грубая оценка частотной расстройки. В данном случае необходимо возвести сигнал в 4-ю степень путем комплексного умножения отсчетов сигналов на самих себя и затем аналогично сами на себя умножаются полученные отсчеты. Далее вычисляется амплитудный спектр свернутого таким образом сигнала, если посмотреть на рассчитанный спектр глазами, то будут явно видны 3 гармоники: центральная (наиболее мощная) будет указывать на частотную расстройку сигнала, а расстояние от центральной до любой из боковых укажет на бодовую скорость.
5. Выполняется компенсация частотной расстройки (см. пункт 1), отстройка должна компенсироваться до согласованной фильтрации;
6. Пункт 4 периодически повторяется, для предотвращения сбоя синхронизации оценка умножается на некоторый коэффициент (например, 0.1) с целью итеративного приближения к истинному значению частотной расстройки;
7. Из сигнала с N отсчетов на посылку необходимо выбрать отсчеты в позициях, наиболее близких к идеальным, и, таким образом, свести сигнал к 1-му отсчету на посылку:
1). Выбирается интервал, на котором оценивается позиция точки дискретизации, наиболее близкой к идеальной (в англоязычной литературе эта точка называется Maximum Effective Point или MEP). Если брать отсчеты в идеальных точках, то сигнал/шум будет максимальным, длина интервала определяется нестабильностью опорных генераторов передатчика/приемника (чем стабильней, тем меньше интервал) и соотношением сигнал/шум (чем больше, тем меньше требуется данных для оценки);
2). Выбранный интервал разбивается на подынтервалы с длиной, соответствующей количеству отсчетов на посылку (например, 4 отсчета);
3). Из каждого интервала выбираются 1-ые отсчеты, вычисляется их амплитуда (модули векторов, можно брать квадраты модулей), значения из всех интервалов суммируются;
4). Аналогичные действия выполняются для 2-ых, 3-их, 4-ых отсчетов;
5). В результате для сигнала 4 отсчета на посылку получим 4 значения, если из них построить гистограмму, то будет виден столбец с максимальным значением, а столбцы справа/слева от него будут иметь уменьшающуюся амплитуду. Столбец с максимальной амплитудой соответствует точке оцифровки, наиболее близкой к идеальной (если точка будет соотвествовать идеальной, то амплитуды "плеч" будут одинаковы);
6). Приводим сигнал к 1-му отсчету на посылку путем выборки MEP значений (если максимальную амплитуду имел столбец для каждого 2-го (из 4-ых) отсчета, то выбираем каждый 2-ой).
8. К этому этапу имеем выборку 1 отсчет на посылку с максимальным соотношением сигнал/шум с удаленной частотной расстройкой. Теперь необходимо удалить фазовую расстройку, выполняется это с помощью системы фазовой автоподстройки частоты (ФАПЧ):
1). Начальная фаза ошибки равна 0;
2). Первый отсчет сигнала умножается на вектор с нулевым аргументом и попадает на слайкер (slicer - нож для резки пиццы);
3). Слайкер определяет ближайшую точку сигнального созвездия к принятому отсчету (для QPSK по знаку синфазной и квадратурной составляющих) и вычисляет фазовую ошибку (разница фаз ближайшей точки сигнального созвездия и фазы принятого вектора);
4). Рассчитанная фазовая ошибка умножается на некоторый коэффициент К=0.01...0.001, который определяет полосы захвата и удержания ФАПЧ и аккумулируется в накопленной фазовой ошибке;
5). Рассчитывается вектор ошибки (аргумент - накопленная фазовая ошибка, амплитуда 1);
6). 2-ой отсчет принятого сигнала умножается на комплексно-сопряженный вектор ошибки (для комплексного сопряжения необходимо поменять знак мнимой составляющей на противоположный);
7). Далее повторяем пункты 3-6 для всех принимаемых отсчетов.
Как только система ФАПЧ захватит фазовую расстройку сигнала, на выходе будет получен сигнал 1 отсчет на посылку с точками, расположенными вокруг точек сигнального созвездия, "размытость" пятен будет определяться соотношением сигнал/шум.

Собственно демодулятор как устройство оценки первичного электрического сигнала на этом этапе заканчивает свое функционирование. Далее для сигнала QPSK необходимо устранить фазовую неоднозначность (в общем случае демодулятор не может точно восстановить фазу сигнала на передающей стороне и в процессе демодуляции полученный сигнал может иметь ошибку 90, 180 или 270 градусов). Если используется дифференциальный декодер, то исходный битовый поток будет восстановлен им, в противном случае должна быть определена и устранена фазовая неоднозначность:
1). По имеющейся в сигнале известной синхропоследовательности;
2). По попыткам декодировать демодулированный поток с использованием различных фазовых неоднозначностей.
Фазовую неоднозначность можно устранять путем перекодировки битового потока.
Go to the top of the page
 
+Quote Post
Grizzzly
сообщение Mar 15 2015, 22:13
Сообщение #15


Знающий
****

Группа: Свой
Сообщений: 565
Регистрация: 22-02-13
Пользователь №: 75 748



Напишу здесь, чтобы новую тему не создавать. Появился вопрос по самой реализации модема на ПК. Поискал на форуме, обсуждаются в основном вопросы, касающиеся алгоритмов, и реализации на DSP, МК.
Где можно почитать о реализации real-time модема на компьютере? После нескольких лет работы по моделированию захотелось сделать рабочую вещь. На МК и DSP используют операционки реального времени или диспетчеры задач, там всё четко синхронизировано. Как, имея бинарник с записанными квадратурами, реализовать real-time на C/C++ на персоналке? Делать какие-то большие буферы?
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 11th June 2024 - 01:42
Рейтинг@Mail.ru


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