|
Декодирование FSK, посоветуйте алгоритм |
|
|
|
Jul 11 2005, 19:26
|
Участник

Группа: Новичок
Сообщений: 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 зависит от времени, которое Вам отводится на синхронизацию и от отношения сигнал/шум. Что касается последовательности, то она может быть любая, лишь бы был переход битов пусть не регулярный - это н етак важно, со временем Вы все равно засинхронизуетесь и начнете демодуляцию сообщения. Все это очень тщательно промоделировано и реализовано в спутниковых приемниках, которые разрабатывает и выпускает моя фирма. Могу выслать результаты моделирования на матлабе.
|
|
|
|
|
Jul 12 2005, 12:02
|

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

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

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

|
Цитата(Dsurkov @ Jul 11 2005, 22:26) ... После N проходов, то есть после N последовательных накоплений (усреднений) необходимо найти элемент массива, содержащий наименьшее значение... Если Вы применяете стандартный метод синхронизации, не совсем понятно, почему Вы ищете минимальное значение, ведь оно соответствует минимальному отношению сигнал/шум и, соответственно, ошибка будет максимальной. Кроме того, Вы можете неправильно определить момент максимума корреляции, так как он может быть смещен относительно середины бодового интервала. В то же время, поиск максимума в Вашем накопителе даст правильное значение, когда именно нужно делать выборку и которое будет более устойчиво к помехам.
--------------------
Самонадеянность слепа. Сомнения - спутник разума. (с)
|
|
|
|
|
Jul 12 2005, 17:56
|
Участник

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

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

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

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

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

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

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

|
Цитата(moonrock @ Jul 13 2005, 13:20) Спасибо всем за ответы! Мне очень понравился алгоритм от Dsurkov. По моему его проще всего в МК зашить. АВРка должна справиться с 300 бод. Хотел спросить, а какой процент ошибок у вас получался при с/ш около 0 дБ, 3 дБ? Вообще-то битовая синхронизация при отношении сигнала амплитудой Am = 1 к СКО шума 1 1Am/cko=1 и рассстройке по частоте Df = 50 Гц получается довольно уверенно при усредении килогерцовых выборок сигналов в течение 1с ( при скорости передачи к примеру 50 бит/с ). Но в моем случае выборки, поступающие в ЦСП, кстати в самом деле являются результатами предварительного накопления сигнала в блоке цифровой обработки, который мы называем коррелятор. Так называемое когеретное накопление в корреляторе, которое происходит на тактовой частоте, идет в течение миллисекунды, поскольку длина псевдослучайной последовательности (так называя М-последовательность) составляет 1 мс.
А на рисунке показана зависимость вероятности правильной идентификации битов от СКО шума при растройке по частоте близкой к нулю. Но ведь в любом случае Вы должны произвести вначале захват по частоте и потом последовательно сначала задйствова ЧАПЧ, а потом после стягивания ошибки по частоте до полосы захвата ФАПЧ свести ошибку близкой к нулю, войдя таким образом в режми слежения несущей сигнала. А если у объекта, где стоит Ваш модем динамика низкая или отсутсвует, то ФАПЧ 2-го порядка будет работать хорошо (при хороших отношениях С/Ш) и как такого поиска по частоте видомо и не понадобится. Мы у себя ФАПЧ особо стараемся не задействовать, поскольку это известно, что устройство это очень тонкое и совсем непомехоустойчивое, а вот ЧАПЧ отличается высокой робастностью. Ну вот примерно вот так ...
|
|
|
|
|
Jul 25 2005, 07:05
|
Группа: Новичок
Сообщений: 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) в матлабе. Нормально получилось, но хочется большего.  ) Может я не учел какие-нибудь тонкости? Во вложенном файле Матлабовский проект.
|
|
|
|
|
Jul 25 2005, 23:05
|

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