|
|
  |
FSK модулятор |
|
|
|
Feb 27 2016, 10:34
|
Группа: Участник
Сообщений: 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
|
|
|
|
|
Feb 27 2016, 13:09
|
ʕʘ̅͜ʘ̅ʔ
    
Группа: Свой
Сообщений: 1 008
Регистрация: 3-05-05
Пользователь №: 4 691

|
Если у вас нет какого-то сглаживания модулирующих символов (типа gfsk), и девиация кратна частоте следования символов, то разрыва фазы не будет т.е. при целом индексе модуляции в символе всегда будет целое число периодов. Если девиация кратна половине частоты символов, как в msk, то необходимо учитывать предыдущий символ и его нач. фазу для установки начальной фазы текущего. Итого формально будет 4 таблицы, но можно обойтись и двумя, если, например, читать с декрементом указателя. Надеюсь, вы понимаете, о чем я, Владимир. Количество таблиц при заданном индексе можно определить, нарисовав фазовую диаграмму. Но лучше вместо прямого табличного метода для формирования чм использовать NCO. Возможностей у такого метода гораздо больше при незначительном усложнении логики. Цитата(rimidalv @ Feb 27 2016, 14:34)  Если да, то как быть с разрывом фазы модулирующего синуса при смене частоты с Fmark на Fspace и ноборот?
|
|
|
|
|
Feb 27 2016, 16:21
|
Группа: Участник
Сообщений: 7
Регистрация: 26-02-16
Пользователь №: 90 625

|
Да, понятно, Большое спасибо, к концу дня приходит понимание понемножку...
|
|
|
|
|
Mar 2 2016, 09:10
|

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

|
Цитата(blackfin @ Mar 1 2016, 12:49)  Весьма странное определение ортогональности. Полагаю, опять что-то проприетарное.. В ортогональность векторов в Гильбертовом пространстве я еще готов поверить, но чтобы два действительных числа 29 Гц и 31 Гц были ортогональны, это что-то уму нерастяжимое..  Опять по словарю буквы сверяете? Орфография, запятые))) Указанный метод - прямое формирование с амплитудой и фазой равными константе. Меняется только частота. Чем меньше шаг частот, тем длиннее выборка и/или чаще передискретизация требуется. Цитата(Fat Robot @ Mar 1 2016, 12:49)  Для каждого символа memcpy или dma могут быть проще, чем операции с указателями при копировании каждого отсчета. Если это МП или МК, то, возможно. Хотя, сомнительно, что можно переключать контроллер ПДП быстрее, чем менять шаг в регистре. Для этого он должен поддерживать блочную выборку переменного размера аппаратно. И указатель, все равно, переключать придется. Хотя и реже. Также, у ТI процессоры поддерживают автоматическое кольцевание указателей внутри инструкции. В результате, все упирается в шину, а не архитектуру, а память и код экономятся, хорошо ложаться в КЭШ, если он есть. А вот на ПЛИС лучше счетчиком играться. Без вариантов.
Сообщение отредактировал Corner - Mar 2 2016, 09:20
|
|
|
|
|
Mar 2 2016, 10:07
|
Гуру
     
Группа: Свой
Сообщений: 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)  А вот на ПЛИС лучше счетчиком играться. Без вариантов. Есть, есть варианты! Просто они вам не известны..
|
|
|
|
|
Mar 2 2016, 15:25
|
Гуру
     
Группа: Свой
Сообщений: 3 106
Регистрация: 18-04-05
Пользователь №: 4 261

|
Цитата(_4afc_ @ Mar 2 2016, 18:37)  Баловался несколько лет назад частотной манипуляцией через таблицы. Для ПЛИС можно вообще обойтись без таблиц, если есть лишний умножитель и есть запас по частоте клока. Для этого можно воспользоваться формулами рекурсивного вычисления sin/cos: sin 0 = 0; sin 1 = amp*sin(dt); ... sin n+2 = 2*cos(w*dt)*sin n+1 - sin n. Точно также: cos 0 = amp; cos 1 = amp*cos(dt); ... cos n+2 = 2*cos(w*dt)*cos n+1 - cos n. Где: 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) ..
|
|
|
|
|
Mar 2 2016, 16:21
|
ʕʘ̅͜ʘ̅ʔ
    
Группа: Свой
Сообщений: 1 008
Регистрация: 3-05-05
Пользователь №: 4 691

|
Уточнение: Накапливание ошибки sin/cos будет соответствовать накапливанию ошибки фазы из-за конечной разрядности вычислительных узлов. Т.е. генератор никогда не развалится, но в конце каждого символа будет фазовая ошибка, которую надо учитывать при установке параметров для генерации следующего символа. Здесь подробнее и с вариантами
Chap7.pdf ( 75.49 килобайт )
Кол-во скачиваний: 89Цитата(blackfin @ Mar 2 2016, 19:25)  Для ПЛИС можно вообще обойтись без таблиц, если есть лишний умножитель и есть запас по частоте клока.
Для этого можно воспользоваться формулами рекурсивного вычисления sin/cos:
Ошибка вычисления синуса/косинуса для больших "n" зависит от разрядности умножителя и в процессе рекурсии, ессно, накапливается,
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|