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

 
 
2 страниц V  < 1 2  
Reply to this topicStart new topic
> Декодирование FSK, посоветуйте алгоритм
vm1
сообщение Jul 11 2005, 16:05
Сообщение #16


Знающий
****

Группа: Свой
Сообщений: 521
Регистрация: 13-05-05
Из: Москва
Пользователь №: 4 978



Я из огибающих x и y для FSK получал сигнал по
формуле x*(y')+y*(x').
Go to the top of the page
 
+Quote Post
Stanislav
сообщение Jul 11 2005, 18:07
Сообщение #17


Гуру
******

Группа: Свой
Сообщений: 4 363
Регистрация: 13-05-05
Из: Москва
Пользователь №: 4 987



Цитата(vm1 @ Jul 11 2005, 19:05)
Я из огибающих x и y для FSK получал сигнал по
формуле x*(y')+y*(x').
*

А что есть x, y, x' и y'? Комплексные функции и их сопряжения или модули и производные?


--------------------
Самонадеянность слепа. Сомнения - спутник разума. (с)
Go to the top of the page
 
+Quote Post
Tommyknocker
сообщение Jul 11 2005, 19:26
Сообщение #18


Участник
*

Группа: Новичок
Сообщений: 37
Регистрация: 6-04-05
Из: г. Москва
Пользователь №: 3 901



Цитата(moonrock @ Jul 11 2005, 11:29)
Спасибо за ответ, интересный способ!
У меня задача для BPSK.
Была рождена похожая идея, суть такая: перемножить несколько периодов огибающей с SIN и COS (с бодовой частотой), найти ARCTAN от всего этого и скорректировать счетчик. Разумеется это получится если синхронизирующая последовательность будет 10101010101...
В общем надо проверять. Хотел еще спросить, в чем лучше моделировать, точнее в чем быстрее?(я пока на С пишу модели).
Об АЦП. Внешний АЦП - не хочется. Как бы это все в AVR или MSP затолкать, используя то что есть.
*

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

Пусть К - число сигнальных отсчетов, приходящихся на один бит. Стоит задача определить номер отсчета сигнала, который является концом/началом бита. Для этого создаем массив на К элементов и последовательно заполняем c суммированием каждый элемент массива в соответствие со следующим выражением:

W(к) = W(k-1) + ( I(k)*sign(I(k-1)) + Q(k)*sign(Q(k-1))),
где I и Q синфазная и квадратурная компоненты сигнала (I~D(t)cos(df) , Q~D(t)sin(df) ). После N проходов, то есть после N последовательных накоплений (усреднений) необходимо найти элемент массива, содержащий наименьшее значение. После этого записать в счетчик отсчетов сигнала (счетчик битовой синхронизации) номер той самой минимальной ячейки. Теперь Ваш счетчик работает в такт синронизирущей последовательности.

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

Все это очень тщательно промоделировано и реализовано в спутниковых приемниках, которые разрабатывает и выпускает моя фирма. Могу выслать результаты моделирования на матлабе.
Go to the top of the page
 
+Quote Post
vm1
сообщение Jul 12 2005, 09:59
Сообщение #19


Знающий
****

Группа: Свой
Сообщений: 521
Регистрация: 13-05-05
Из: Москва
Пользователь №: 4 978



X и Y фильтрованные компоненты после
перемножения с центральной несущей.
x' и y' их производные, но фактически
они представляют собой немного задержаные значения x и y.
Образно говоря, физический смысл формулы - это угловая скорость
камушка застрявшего в покрышке колеса где колесо это
фазовая диаграма.
При FSK точка на диаграме движется
по часовой стрелке при приеме 1
а при приеме 0 движется против.
X и Y желательно отнормировать на амплитуду сигнала.
Go to the top of the page
 
+Quote Post
vm1
сообщение Jul 12 2005, 10:01
Сообщение #20


Знающий
****

Группа: Свой
Сообщений: 521
Регистрация: 13-05-05
Из: Москва
Пользователь №: 4 978



Поправка: разницу между текущим и немного задержаным значением
Go to the top of the page
 
+Quote Post
Stanislav
сообщение Jul 12 2005, 12:02
Сообщение #21


Гуру
******

Группа: Свой
Сообщений: 4 363
Регистрация: 13-05-05
Из: Москва
Пользователь №: 4 987



Цитата(vm1 @ Jul 12 2005, 12:59)
X и Y фильтрованные компоненты после
перемножения с центральной несущей.
x' и y' их производные, но фактически
они представляют собой немного задержаные значения x и y.
Образно говоря, физический смысл формулы - это угловая скорость
камушка застрявшего в покрышке колеса где колесо это
фазовая диаграма.
При FSK точка на диаграме движется
по часовой стрелке при приеме 1
а при приеме 0 движется против.
X и Y  желательно отнормировать на амплитуду сигнала.
*

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


--------------------
Самонадеянность слепа. Сомнения - спутник разума. (с)
Go to the top of the page
 
+Quote Post
Stanislav
сообщение Jul 12 2005, 12:16
Сообщение #22


Гуру
******

Группа: Свой
Сообщений: 4 363
Регистрация: 13-05-05
Из: Москва
Пользователь №: 4 987



Цитата(Dsurkov @ Jul 11 2005, 22:26)
... После N проходов, то есть после N последовательных накоплений (усреднений) необходимо найти элемент массива, содержащий наименьшее значение...
*

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


--------------------
Самонадеянность слепа. Сомнения - спутник разума. (с)
Go to the top of the page
 
+Quote Post
Tommyknocker
сообщение Jul 12 2005, 17:56
Сообщение #23


Участник
*

Группа: Новичок
Сообщений: 37
Регистрация: 6-04-05
Из: г. Москва
Пользователь №: 3 901



Цитата(Stanislav @ Jul 12 2005, 15:16)
Цитата(Dsurkov @ Jul 11 2005, 22:26)
... После N проходов, то есть после N последовательных накоплений (усреднений) необходимо найти элемент массива, содержащий наименьшее значение...
*

Если Вы применяете стандартный метод синхронизации, не совсем понятно, почему Вы ищете минимальное значение, ведь оно соответствует минимальному отношению сигнал/шум и, соответственно, ошибка будет максимальной. Кроме того, Вы можете неправильно определить момент максимума корреляции, так как он может быть смещен относительно середины бодового интервала. В то же время, поиск максимума в Вашем накопителе даст правильное значение, когда именно нужно делать выборку и которое будет более устойчиво к помехам.
*


В данном случае речь идет о битовой синхронизации!, а не о вычислении корреляционной функции. Предполагается, что сигнал BPSK, согласно того что написал в своем посте moonrock. Также, насколько я понял сигнал не содержит какой-либо поднесущей (М-последовательности или кода Баркера). Просто стоит задача демодуляции сообщения, колторым промодулирована несущая по BPSK. Естсетсвенно, что в данном случае алгоритм будет работать при малой частной расстройке (единицы Гц), то есть в области нулевых частот. Так вот такой алгоритм работает очень хорошо. Его кстати же применяют и в приемниках спутниковой навигации GPS / ГЛОНАСС для демодуляции навигационного сообщения.
Go to the top of the page
 
+Quote Post
moonrock
сообщение Jul 13 2005, 10:20
Сообщение #24


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

Группа: Свой
Сообщений: 166
Регистрация: 24-03-05
Из: Санкт-Петербург
Пользователь №: 3 661



Спасибо всем за ответы! cheers.gif
Мне очень понравился алгоритм от Dsurkov. По моему его проще всего в МК зашить. АВРка должна справиться с 300 бод.
Хотел спросить, а какой процент ошибок у вас получался при с/ш около 0 дБ, 3 дБ?
Go to the top of the page
 
+Quote Post
Stanislav
сообщение Jul 13 2005, 14:58
Сообщение #25


Гуру
******

Группа: Свой
Сообщений: 4 363
Регистрация: 13-05-05
Из: Москва
Пользователь №: 4 987



Цитата(Dsurkov @ Jul 12 2005, 20:56)
В данном случае речь идет о битовой синхронизации!, а не о вычислении корреляционной функции. Предполагается, что сигнал BPSK, согласно того что написал в своем посте moonrock. Также, насколько я понял сигнал не содержит какой-либо поднесущей (М-последовательности или кода Баркера). Просто стоит задача демодуляции сообщения, колторым промодулирована несущая по BPSK. Естсетсвенно, что в данном случае алгоритм будет работать при малой частной расстройке (единицы Гц), то есть в области нулевых частот. Так вот такой алгоритм работает очень хорошо. Его кстати же применяют и в приемниках спутниковой навигации GPS / ГЛОНАСС для демодуляции навигационного сообщения.
*

Да, такой способ вполне можно применять для определения бодовых интервалов для простых одномерных сигналов (кстати, он применялся в низкоскоростных модемах ранних стандартов). Однако, ему присущи существенные недостатки. Главный из них заключается в большом времени адаптации из-за чего, как Вы верно заметили, работает только при малых расстройках и требует большого времени вхождения в связь. Кроме того, метод обладает далекой от идеальной устойчивостью к шумам. От этих недостатков можно избавиться только применением "продвинутых" корреляционных (или близких к ним) методов выделения тактовых частот.


--------------------
Самонадеянность слепа. Сомнения - спутник разума. (с)
Go to the top of the page
 
+Quote Post
Tommyknocker
сообщение Jul 13 2005, 19:18
Сообщение #26


Участник
*

Группа: Новичок
Сообщений: 37
Регистрация: 6-04-05
Из: г. Москва
Пользователь №: 3 901



Цитата(moonrock @ Jul 13 2005, 13:20)
Спасибо всем за ответы! cheers.gif
Мне очень понравился алгоритм от Dsurkov. По моему его проще всего в МК зашить. АВРка должна справиться с 300 бод.
Хотел спросить, а какой процент ошибок у вас получался при с/ш около 0 дБ, 3 дБ?
*


Вообще-то битовая синхронизация при отношении сигнала амплитудой Am = 1 к СКО шума 1 1Am/cko=1 и рассстройке по частоте Df = 50 Гц получается довольно уверенно при усредении килогерцовых выборок сигналов в течение 1с ( при скорости передачи к примеру 50 бит/с ). Но в моем случае выборки, поступающие в ЦСП, кстати в самом деле являются результатами предварительного накопления сигнала в блоке цифровой обработки, который мы называем коррелятор. Так называемое когеретное накопление в корреляторе, которое происходит на тактовой частоте, идет в течение миллисекунды, поскольку длина псевдослучайной последовательности (так называя М-последовательность) составляет 1 мс.


Прикрепленное изображение



А на рисунке показана зависимость вероятности правильной идентификации битов от СКО шума при растройке по частоте близкой к нулю.
Но ведь в любом случае Вы должны произвести вначале захват по частоте и потом последовательно сначала задйствова ЧАПЧ, а потом после стягивания ошибки по частоте до полосы захвата ФАПЧ свести ошибку близкой к нулю, войдя таким образом в режми слежения несущей сигнала. А если у объекта, где стоит Ваш модем динамика низкая или отсутсвует, то ФАПЧ 2-го порядка будет работать хорошо (при хороших отношениях С/Ш) и как такого поиска по частоте видомо и не понадобится. Мы у себя ФАПЧ особо стараемся не задействовать, поскольку это известно, что устройство это очень тонкое и совсем непомехоустойчивое, а вот ЧАПЧ отличается высокой робастностью.

Ну вот примерно вот так ... smile.gif
Go to the top of the page
 
+Quote Post
Dmitry_R
сообщение Jul 25 2005, 07:05
Сообщение #27





Группа: Новичок
Сообщений: 5
Регистрация: 23-06-05
Пользователь №: 6 258



[quote=Stanislav,Jul 4 2005, 21:51]

[/quote]
Следующий метод приема будет гораздо эффективнее такой примитивной ФАПЧ.
2. Умножаем сигнал на exp(jW1t) и exp(jW2t), где W1 и W2 - несущие частоты.
3. Выделяем комплексные огибающие сигналов с этими несущими с помощью ФНЧ, согласованного с огибающей элементарной посылки.
*

[/quote]
Станислав, а поясни пожалуйста что значит умножить на exp?

2. input(n) = input(n) * exp(j*2*PI*F1*n/Fs)

3. out_one(n) = SUM (input(m) * exp(j*2*PI*F1*m/Fs))
сумма от m = n до n + N1.
Где F1 - частота 1, Fs - частота дискретизации, input(n) - входная выборка, N1 - количество отсчетов на бит.
Я правильно понял? Если да, то зачем умножать входную последовательность?
Я смоделировал выше описанное (без п.2) в матлабе. Нормально получилось, но хочется большего. smile.gif) Может я не учел какие-нибудь тонкости?

Во вложенном файле Матлабовский проект.
Прикрепленные файлы
Прикрепленный файл  FskDekoder.rar ( 8.83 килобайт ) Кол-во скачиваний: 98
 
Go to the top of the page
 
+Quote Post
Stanislav
сообщение Jul 25 2005, 23:05
Сообщение #28


Гуру
******

Группа: Свой
Сообщений: 4 363
Регистрация: 13-05-05
Из: Москва
Пользователь №: 4 987



Цитата(Dmitry_R @ Jul 25 2005, 10:05)
Цитата(Stanislav @ Jul 4 2005, 21:51)


Следующий метод приема будет гораздо эффективнее такой примитивной ФАПЧ.
    2. Умножаем сигнал на exp(jW1t) и exp(jW2t), где W1 и W2 - несущие частоты.
    3. Выделяем комплексные огибающие сигналов с этими несущими с помощью ФНЧ, согласованного с огибающей элементарной посылки.
*

Станислав, а поясни пожалуйста что значит умножить на exp?

2. input(n) = input(n) * exp(j*2*PI*F1*n/Fs)

3. out_one(n) = SUM (input(m) * exp(j*2*PI*F1*m/Fs))
сумма от m = n до n + N1.
Где F1 - частота 1, Fs - частота дискретизации, input(n) - входная выборка, N1 - количество отсчетов на бит.
Я правильно понял? Если да, то зачем умножать входную последовательность?
Я смоделировал выше описанное (без п.2) в матлабе. Нормально получилось, но хочется большего. smile.gif) Может я не учел какие-нибудь тонкости?

Во вложенном файле Матлабовский проект.
*



Вы совершенно правильно поняли суть проблемы. Ваше действие:
3. out_one(n) = SUM (input(m) * exp(j*2*PI*F1*m/Fs))
есть эквивалентное моим пунктам 2 + 3 пребразование, но только в случае прямоугольной огибающей элементарной посылки. Просто в технической литературе часто эти два действия приводят порознь для лучшего восприятия, а при реализации, конечно, конструируют комплексные фильтры подобно Вашему. При этом умножение на комплексную экспоненту, естественно, не нужно - оно заложено уже в структуре фильтра. Небольшое непонимание возникло лишь из-за того, что я говорил о ФНЧ, согласованного именно с огибающей, т.е. формой волнового пакета посылки. Если она прямоугольная, то Ваш комплексный фильтр будет будет близок к оптимальному, но только для определенного вида шумов (напр., гауссов белый шум). Дальнейшее улучшение достоверности декодирования может быть произведено путем "работы с шумом", а именно: измерение статистики шума, построение шумового профиля, построения "выбеливающего" шум фильтра, обработка сигнала этим фильтром, модификация приемного комплексного фильтра в соответствии с шумовым профилем и только после этого декодирование. Боюсь, что эта процедура Вам не подойдет не только из-за своей навороченности, сколько в связи с ее малым выигрышем по сравнению с предыдущим методом для большинства реальных шумов (большой выигрыш получается например, в случае мощной узкополосной помехи). Кроме того, в случае нестационарных шумов она может даже увеличить вероятность ошибок. Тема борьбы с шумами, однако, выходит за рамки форума, поскольку она всеобъемлюща.
P.S. Вашу модель не посмотрел - нет времени. Как посмотрю - отвечу.


--------------------
Самонадеянность слепа. Сомнения - спутник разума. (с)
Go to the top of the page
 
+Quote Post
Stanislav
сообщение Jul 26 2005, 16:45
Сообщение #29


Гуру
******

Группа: Свой
Сообщений: 4 363
Регистрация: 13-05-05
Из: Москва
Пользователь №: 4 987



Посмотрел матлабовский файл, добавил замечания. Система синх-ции у Вас, мягко говоря, не слишком хорошая (см. подредактированный файл).
Успехов!
Прикрепленные файлы
Прикрепленный файл  fsk_dem_1.zip ( 1.38 килобайт ) Кол-во скачиваний: 133
 


--------------------
Самонадеянность слепа. Сомнения - спутник разума. (с)
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 17th June 2025 - 02:58
Рейтинг@Mail.ru


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