Перейти к содержанию

Лабораторная 7.5 — CIC-дециматор для SDR-приёмника

Эта лабораторная усиливает мост DSP → fixed-point → FPGA. Это не notebook-упражнение, а детерминированная script-driven лабораторная работа, которая генерирует графики и machine-readable метрики для CI.

Цель

Смоделировать CIC-дециматор как аппаратно-ориентированный multirate-блок и измерить:

  • АЧХ CIC-фильтра;
  • поведение при децимации;
  • aliasing мешающего тона после изменения частоты дискретизации;
  • passband droop;
  • рост разрядности аккумуляторов;
  • fixed-point последствия для RTL-реализации.

Почему CIC важен

CIC-дециматор полезен в SDR-приёмниках, потому что может снижать высокую входную частоту дискретизации при помощи сумматоров, вычитателей и задержек без умножителей. Это делает его естественным мостом от теории DSP к FPGA-реализации.

Типичное место в тракте приёмника:

RF frontend / ADC stream -> CIC decimator -> compensation FIR -> channel filter -> demodulator

Команда запуска

Из корня репозитория:

python blocks/block_07_tx_rx_chains/python/lab_7_5_cic_decimator.py

Или через общий executable smoke path:

python tools/run_all_labs.py

Генерируемые артефакты

Артефакт Назначение
docs/assets/lab75_cic_response.png АЧХ CIC и droop на частоте полезного тона.
docs/assets/lab75_cic_decimation_spectrum.png Спектр входа и спектр после CIC-децимации.
docs/assets/lab75_cic_bit_growth.png Требуемая ширина аккумуляторов в зависимости от числа каскадов.
docs/assets/lab75_cic_metrics.json Частоты дискретизации, коэффициент децимации, рост разрядности и измеренная частота пика.

Инженерные вопросы

  1. Почему CIC удобен для высокоскоростной децимации в FPGA?
  2. Как оценить рост разрядности для N каскадов, коэффициента децимации R и differential delay M?
  3. Что происходит с мешающим тоном после децимации?
  4. Почему passband droop важен для SDR-цепочек, где оцениваются EVM/SNR/BER?
  5. Где после CIC нужно поставить compensation FIR?

Что включить в отчёт

  • параметры CIC: R, N, M;
  • входную и выходную частоты дискретизации;
  • рекомендуемую ширину аккумуляторов;
  • passband droop на частоте полезного сигнала;
  • alias-частоту мешающего тона после децимации;
  • сгенерированные графики;
  • комментарии по fixed-point scaling и overflow behavior.

Следующий RTL-шаг

Следующая FPGA-лабораторная должна отобразить ту же структуру в RTL:

integrator stages -> decimation enable -> comb stages -> output valid

и сравнить RTL-выход с Python fixed-point-style моделью.

См. также: CIC, fixed-point and FPGA bridge.

Чего ожидать

CIC по умолчанию: R = 8, N = 4 каскада, M = 1, 16-битный вход, 9,6 МС/с на входе, 1,2 МС/с на выходе; полезный тон 220 кГц, блокирующая помеха 1,85 МГц.

CIC decimation: 9600000 -> 1200000 Hz
Recommended accumulator width: 28 bits
Wanted-tone droop: -1.913 dB
Measured output peak: 219982.910 Hz
  • Рост разрядности: N * log2(R * M) = 4 * 3 = 12 бит, поэтому 16-битному входу нужны 28-битные интеграторы. Интеграторам разрешено переполняться: в дополнительном коде и при достаточной ширине гребенчатые звенья точно компенсируют переполнение.
  • Спад −1,913 дБ на 220 кГц следует из |sin(pi*f*R/fs)/(R*sin(pi*f/fs))|^N. Этот наклон полосы пропускания у края выходной полосы исправляет компенсирующий FIR после CIC.
  • Помеха 1,85 МГц накладывается на −550 кГц на выходе (1,85 − 2 × 1,2 МГц), ослабленная характеристикой CIC примерно на 53 дБ. Нули CIC лежат только на кратных выходной частоты; между ними подавление умеренное.

Упражнения

  1. Замените stages с 4 на 3 и на 5. Как меняются спад, подавление помехи и нужная ширина аккумулятора?
  2. Переместите помеху на 2,4 МГц (кратно выходной частоте). Какое подавление вы получите и почему?
  3. Спроектируйте компенсацию спада: какое усиление в дБ нужно компенсирующему FIR на 220 кГц?
Ответы (проверены запуском скрипта лабораторной)
  1. Ступеней Спад на 220 кГц Подавление на 1,85 МГц Аккумулятор
    3 −1,43 дБ 39,7 дБ 25 бит
    4 −1,91 дБ 53,0 дБ 28 бит
    5 −2,39 дБ 66,2 дБ 31 бит

Каждая ступень добавляет около 13 дБ подавления и 3 бита аккумулятора и углубляет спад. 2. 2,4 МГц это удвоенная выходная частота, поэтому блокер попадает точно в нуль CIC: теоретически отклик нулевой, а на практике подавление ограничивают только квантование и точная частота блокера. Кроме того, он накладывается на 0 Гц, где добавился бы к постоянной составляющей, если бы прошёл. 3. +1,91 дБ на 220 кГц (с тремя ступенями +1,43 дБ): обратная величина спада, растущая по полосе как 1/|H_CIC(f)|.