Лабораторная 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 |
Частоты дискретизации, коэффициент децимации, рост разрядности и измеренная частота пика. |
Инженерные вопросы¶
- Почему CIC удобен для высокоскоростной децимации в FPGA?
- Как оценить рост разрядности для
Nкаскадов, коэффициента децимацииRи differential delayM? - Что происходит с мешающим тоном после децимации?
- Почему passband droop важен для SDR-цепочек, где оцениваются EVM/SNR/BER?
- Где после 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 лежат только на кратных выходной частоты; между ними подавление умеренное.
Упражнения¶
- Замените
stagesс 4 на 3 и на 5. Как меняются спад, подавление помехи и нужная ширина аккумулятора? - Переместите помеху на 2,4 МГц (кратно выходной частоте). Какое подавление вы получите и почему?
- Спроектируйте компенсацию спада: какое усиление в дБ нужно компенсирующему FIR на 220 кГц?
Ответы (проверены запуском скрипта лабораторной)
-
Ступеней Спад на 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)|.