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

 
 
 
Reply to this topicStart new topic
> FSK модулятор
rimidalv
сообщение Feb 27 2016, 10:34
Сообщение #1





Группа: Участник
Сообщений: 7
Регистрация: 26-02-16
Пользователь №: 90 625



Добрый день! Нужно сделать FSK модулятор

Есть 2 таблицы IQ составляющих для синуса, соответственно для частоты Fmark(для единичного бита) и Fspace(для 0-го бита)
Частота приема входных данных Fin и частота оцифровки Fd
Правильно ли я понимаю, что в выходной буфер, размер которого в N=(Fd/Fin) больше входного, кладем N отсчетов из соответствующей
таблицы синусов для каждого входного символа?

Если да, то как быть с разрывом фазы модулирующего синуса при смене частоты с Fmark на Fspace и ноборот?

Сообщение отредактировал rimidalv - Feb 27 2016, 10:39
Go to the top of the page
 
+Quote Post
Fat Robot
сообщение Feb 27 2016, 13:09
Сообщение #2


ʕʘ̅͜ʘ̅ʔ
*****

Группа: Свой
Сообщений: 1 008
Регистрация: 3-05-05
Пользователь №: 4 691



Если у вас нет какого-то сглаживания модулирующих символов (типа gfsk), и девиация кратна частоте следования символов, то разрыва фазы не будет т.е. при целом индексе модуляции в символе всегда будет целое число периодов.
Если девиация кратна половине частоты символов, как в msk, то необходимо учитывать предыдущий символ и его нач. фазу для установки начальной фазы текущего. Итого формально будет 4 таблицы, но можно обойтись и двумя, если, например, читать с декрементом указателя. Надеюсь, вы понимаете, о чем я, Владимир.

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

Но лучше вместо прямого табличного метода для формирования чм использовать NCO. Возможностей у такого метода гораздо больше при незначительном усложнении логики.

Цитата(rimidalv @ Feb 27 2016, 14:34) *
Если да, то как быть с разрывом фазы модулирующего синуса при смене частоты с Fmark на Fspace и ноборот?
Go to the top of the page
 
+Quote Post
rimidalv
сообщение Feb 27 2016, 16:21
Сообщение #3





Группа: Участник
Сообщений: 7
Регистрация: 26-02-16
Пользователь №: 90 625



Да, понятно, Большое спасибо, к концу дня приходит понимание понемножку...
Go to the top of the page
 
+Quote Post
Corner
сообщение Feb 29 2016, 15:46
Сообщение #4


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

Группа: Участник
Сообщений: 1 072
Регистрация: 11-12-12
Пользователь №: 74 815



Если частоты ортогональны, то нужна одна таблица и счетчик с переключением шага. Две таблицы это какое-то извращение.
Go to the top of the page
 
+Quote Post
blackfin
сообщение Feb 29 2016, 15:52
Сообщение #5


Гуру
******

Группа: Свой
Сообщений: 3 106
Регистрация: 18-04-05
Пользователь №: 4 261



Цитата(Corner @ Feb 29 2016, 19:46) *
Если частоты ортогональны, то нужна одна таблица и счетчик с переключением шага.

А что это такое - "частоты ортогональны"???
Go to the top of the page
 
+Quote Post
Corner
сообщение Mar 1 2016, 09:31
Сообщение #6


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

Группа: Участник
Сообщений: 1 072
Регистрация: 11-12-12
Пользователь №: 74 815



Цитата(blackfin @ Feb 29 2016, 18:52) *
А что это такое - "частоты ортогональны"???

В данном случае выполняется условие, что частоты равны целым коэффициентам дробного деления по степени числа 2. Например 2/64 и 3/64 - хватит таблички в 64 точки и 6 битного счетчика с шагом 2 и 3.
Go to the top of the page
 
+Quote Post
blackfin
сообщение Mar 1 2016, 09:49
Сообщение #7


Гуру
******

Группа: Свой
Сообщений: 3 106
Регистрация: 18-04-05
Пользователь №: 4 261



Цитата(Corner @ Mar 1 2016, 12:31) *
В данном случае выполняется условие, что частоты равны целым коэффициентам дробного деления по степени числа 2.

Весьма странное определение ортогональности. Полагаю, опять что-то проприетарное.. biggrin.gif

В ортогональность векторов в Гильбертовом пространстве я еще готов поверить, но чтобы два действительных числа 29 Гц и 31 Гц были ортогональны, это что-то уму нерастяжимое.. rolleyes.gif
Go to the top of the page
 
+Quote Post
Fat Robot
сообщение Mar 1 2016, 09:49
Сообщение #8


ʕʘ̅͜ʘ̅ʔ
*****

Группа: Свой
Сообщений: 1 008
Регистрация: 3-05-05
Пользователь №: 4 691



Для каждого символа memcpy или dma могут быть проще, чем операции с указателями при копировании каждого отсчета.

Цитата(Corner @ Feb 29 2016, 19:46) *
Если частоты ортогональны, то нужна одна таблица и счетчик с переключением шага. Две таблицы это какое-то извращение.
Go to the top of the page
 
+Quote Post
Corner
сообщение Mar 2 2016, 09:10
Сообщение #9


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

Группа: Участник
Сообщений: 1 072
Регистрация: 11-12-12
Пользователь №: 74 815



Цитата(blackfin @ Mar 1 2016, 12:49) *
Весьма странное определение ортогональности. Полагаю, опять что-то проприетарное.. biggrin.gif
В ортогональность векторов в Гильбертовом пространстве я еще готов поверить, но чтобы два действительных числа 29 Гц и 31 Гц были ортогональны, это что-то уму нерастяжимое.. rolleyes.gif


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

Цитата(Fat Robot @ Mar 1 2016, 12:49) *
Для каждого символа memcpy или dma могут быть проще, чем операции с указателями при копировании каждого отсчета.

Если это МП или МК, то, возможно. Хотя, сомнительно, что можно переключать контроллер ПДП быстрее, чем менять шаг в регистре. Для этого он должен поддерживать блочную выборку переменного размера аппаратно. И указатель, все равно, переключать придется. Хотя и реже.
Также, у ТI процессоры поддерживают автоматическое кольцевание указателей внутри инструкции. В результате, все упирается в шину, а не архитектуру, а память и код экономятся, хорошо ложаться в КЭШ, если он есть.
А вот на ПЛИС лучше счетчиком играться. Без вариантов.

Сообщение отредактировал Corner - Mar 2 2016, 09:20
Go to the top of the page
 
+Quote Post
blackfin
сообщение Mar 2 2016, 10:07
Сообщение #10


Гуру
******

Группа: Свой
Сообщений: 3 106
Регистрация: 18-04-05
Пользователь №: 4 261



Цитата(Corner @ Mar 2 2016, 12:10) *
Для этого он должен поддерживать блочную выборку переменного размера аппаратно.

Рекомендую ознакомиться: Scatter/gather through linked list operation.

Цитата(Corner @ Mar 2 2016, 12:10) *
А вот на ПЛИС лучше счетчиком играться. Без вариантов.

Есть, есть варианты! Просто они вам не известны.. biggrin.gif
Go to the top of the page
 
+Quote Post
_4afc_
сообщение Mar 2 2016, 14:37
Сообщение #11


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

Группа: Свой
Сообщений: 1 262
Регистрация: 13-10-05
Из: Санкт-Петербург
Пользователь №: 9 565



Баловался несколько лет назад частотной манипуляцией через таблицы.

Для ЧМ2 с разницей между частотами в 0.5 символьной скорости фаза предыдущего символа может принимать 2 значения. Для передачи без разрыва фазы - требуется 4 варианта символа. При 29 отсчётах на символ простейший вариант таблицы будет иметь размер 4*29=116 слов, а спектр сигнала теоретически выглядеть так:

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


При реализации на BF561 не было времени разбираться как работает ПДП по указателям - поэтому просто копировал нужные символы в выходной буфер. На выходе ЦАП спектр выглядел так:

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


Для ЧМ4 с разницей между частотами в 0.25 символьной скорости фаза предыдущего символа может принимать 4 значения. Для передачи без разрыва фазы - требуется 16 вариантов символа. При 128 отсчётах на символ простейший вариант таблицы будет иметь размер 16*128=2048 слов, а спектр сигнала теоретически выглядеть так:

Прикрепленное изображение
Go to the top of the page
 
+Quote Post
blackfin
сообщение Mar 2 2016, 15:25
Сообщение #12


Гуру
******

Группа: Свой
Сообщений: 3 106
Регистрация: 18-04-05
Пользователь №: 4 261



Цитата(_4afc_ @ Mar 2 2016, 18:37) *
Баловался несколько лет назад частотной манипуляцией через таблицы.

Для ПЛИС можно вообще обойтись без таблиц, если есть лишний умножитель и есть запас по частоте клока.

Для этого можно воспользоваться формулами рекурсивного вычисления sin/cos:

sin0 = 0;
sin1 = amp*sin(dt);
...
sinn+2 = 2*cos(w*dt)*sinn+1 - sinn.

Точно также:

cos0 = amp;
cos1 = amp*cos(dt);
...
cosn+2 = 2*cos(w*dt)*cosn+1 - cosn.

Где:

amp - амплитуда sin/cos;

w - частота sin/cos;

dt - величина, обратная частоте дискретизации: dt = 1/Fd;

amp*sin(dt) и amp*cos(dt) - две константы, задающие начальные условия рекурсии и

cos(w*dt) - константа, задающая частоту sin/cos.

Ошибка вычисления синуса/косинуса для больших "n" зависит от разрядности умножителя и в процессе рекурсии, ессно, накапливается,

но для FSK это обычно не проблема, так как отношение частоты дискретизации Fd к символьной частоте Fs обычно невелико (то есть, Fd/Fs < 1000) ..
Go to the top of the page
 
+Quote Post
Fat Robot
сообщение Mar 2 2016, 16:21
Сообщение #13


ʕʘ̅͜ʘ̅ʔ
*****

Группа: Свой
Сообщений: 1 008
Регистрация: 3-05-05
Пользователь №: 4 691



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

Здесь подробнее и с вариантами
Прикрепленный файл  Chap7.pdf ( 75.49 килобайт ) Кол-во скачиваний: 89


Цитата(blackfin @ Mar 2 2016, 19:25) *
Для ПЛИС можно вообще обойтись без таблиц, если есть лишний умножитель и есть запас по частоте клока.

Для этого можно воспользоваться формулами рекурсивного вычисления sin/cos:

Ошибка вычисления синуса/косинуса для больших "n" зависит от разрядности умножителя и в процессе рекурсии, ессно, накапливается,
Go to the top of the page
 
+Quote Post
Corner
сообщение Mar 3 2016, 20:10
Сообщение #14


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

Группа: Участник
Сообщений: 1 072
Регистрация: 11-12-12
Пользователь №: 74 815



Цитата(blackfin)
Есть, есть варианты! Просто они вам не известны.. biggrin.gif

Знаю. Плавал. Для одной несущей они еще прокатывают, но уже при 16 начинаются проблемы с взаимным загаживанием полос. Табличное ОПФ надежнее.
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 22nd June 2025 - 14:35
Рейтинг@Mail.ru


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