Детектор Tayloe и цифровая обработка сигналов #9 ЦОС — КИХ(FIR) фильтры

Автор: | 13.01.2026

Теперь у нас есть стенд SDR проекта, приемная часть работает и не плохо работает, в подтверждение тому небольшое видео, в начале сигнал подается с генератора уровнем S9, в конце реальный эфир, замечу без использования ДПФ, сигнал с антенны подается напрямую на вход. Есть и неприятность, при использовании входного трансформатора который дает прибавку по чувствительности +5dB есть неравномерность по чувствительности на НЧ и ВЧ, от 160m до 10m перекос по чувствительности может достигать до 10dB, объясняется это отличием входного сопротивления смесителя на НЧ и ВЧ, если входную цепь сделать следующим образом

то перекос по чувствительности на НЧ и ВЧ практически пропадает. Из видео видно, что при изменении частоты сигнала в пределах полосы пропускания 48 кГц у нас нет ни зеркалки, ни еще каких либо артефактов, два пика на спектре это ошибка буферизации при передачи данных в UAC1, если сделать все правильно, то получим уже такой спектр

А что будет если уводить сигнал за границы панорамы больше чем +/-24 кГц? Тогда в нашей полосе мы увидим отголоски сигнала хоть и значительно меньшим уровнем! Но ведь у нас же перед АЦП стоит уже ФНЧ… Смотрим его расчетное АЧХ

Но этого не достаточно, АЦП оцифровывает сигнал с частотой дискретизации 96 кГц, в последнем моем варианте даже с частотой равной 192 кГц. Грубо говоря, все что есть в полосе и просачивается через аналоговый ФНЧ стоящий перед АЦП, то и оцифровывается, но нам же это не надо, зачем нам видеть и слышать то, чего реально нет!? Вот теперь дело за цифровой обработкой сигналов — ЦОС(DSP). Будем по шагам осваивать эту интересную науку, для меня это тоже в новинку! Так, что если будут дельные замечания/пожелания, буду только признателен! В данном случае нам нужно сделать фильтрацию и децимацию до 48 кГц.

Децимация (от лат. decimatio, от лат. decem — «десять») — уменьшение частоты дискретизации дискретного во времени сигнала путём прореживания его отсчётов.

Для этой цели служат цифровые фильтры. В теорию фильтров вникать не буду, материала в интернетах достаточно.

В нашем случае поможет цифровой фильтр нижних частот с конечной импульсной характеристикой — КИХ(FIR). Спроектировать/рассчитать его коэффициенты такого фильтра можно разными путями, есть и онлайн калькуляторы и отдельное программное обеспечение. Мы же воспользуемся онлайн конструктором TFilter.

Открыв ссылку, увидим следующее

Например мы работаем с комплексным IQ-сигналом (I/Q) от SDR, и нам нужен следующий тип фильтра:

  • Тип — Low-pass FIR (для IQ — это эквивалент BPF вокруг 0 Гц)
  • Fs — 192 кГц
  • Fpass — 22 кГц (чтобы сохранить почти всю ±24 кГц)
  • Fstop — 24 кГц
  • Apass — 0.1 дБ
  • Astop — ≥ 80 дБ

Вводим параметры интересующего нас фильтра, и кликаем по кнопке DESIGN FILTER

видим расчетную АЧХ фильтра. А что за магический параметр TAP? 

Tap(от англ. tap — «отвод») — это коэффициенты FIR-фильтра. Чем больше этих коэффициентов, тем круче фильтр, «резче» может быть переход между полосами пропускания и заграждения, но соответственно и выше вычислительная нагрузка.

Характеристики STM32H723ZGT6:

  • Ядро: Cortex-M7.
  • Тактовая частота: до 550 МГц.
  • FPU: одинарная точность (SP).
  • DSP-инструкции: есть.
  • CMSIS-DSP: оптимизирован под Cortex-M7.

Оценка производительности:

Мы обрабатываем IQ-сигнал с Fs = 192 кГц, Используем децимацию ×4 → выходная частота = 48 кГц, Но фильтр применяется ко всем 192 кГц отсчётам (до децимации).

Количество MAC-операций в секунду, для одного канала:

192 000×335=64.32×106192000×335=64.32×106 MAC/сек

для I+Q:

2×64.32=128.642×64.32=128.64 миллионов умножений/сложений в секунду.

Время на один отсчёт (на ядре 550 МГц), например при идеальной оптимизации: ≈1 такт на MAC (благодаря параллельным инструкциям), требуется: ~129 млн тактов/сек, доступно: 550 млн тактов/сек, предварительно получается, что загрузка CPU ≈ 24%, в теории реально, будем проверять на практике.

На вкладке Source Code можно скопировать коэффициенты фильтра

А можно ли посмотреть АЧХ фильтра по имеющимся коэффициентам? Да можно через тот же Python

скрипт питона ниже

Продолжение следует…

73!

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *