Приветствую, такой вот вопрос. Делаю модулятор QPSK на FPGA, "по книжному", без ухищрений и оптимизаций. Все вроде работает в железе, но не знаю как правильно решить такую проблему: На входе IQ 2-х битные (+-1). Первый фильтр (интерполяция x7) FIR с 16-битными коэффициентами дает 17 бит (1 знак). Дальше фильтр CIC (интерполяция x8) с усечением до 18 бит на выходе (с 23). Для самой модуляции I*sin(wt) + Q*cos(wt) используется блок DSP48A с множителем 18х18. Синус и косинус генерируются DDS с разрешением 18 бит (со знаком). Если правильно понимаю после умножения и суммирования получается 35 бит (1 знак + 34). А дальше ЦАП у меня 12-битный. И как тут поступить? Пока просто отбрасываю младшие биты, но может есть способ лучше? В литературе нашел упоминания что дополнительный вход С блока DSP48A (P = A*B + C) можно использовать для реализации округления, но не могу понять каким образом. Может подскажете как тут лучше сделать? И еще - есть ли глубой смысл использовать fixed point в такой задаче? Ведь двоичное представление остается неизменное, а для ЦАП это вообще абстрактное кодовое слово умножаемое на Vref.
Сообщение отредактировал akorud - Aug 9 2011, 13:46
|