Приветствую, такой вот вопрос.
Делаю модулятор 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.