Давно интересовал вопрос использования 16-битного АЦП STM32H7 для обработки I/Q сигналов в реальном времени.
Почти год ушел на эксперименты и реализацию КВ SDR приемника на базе Tayloe mixer и MCU STM32H723ZGT6, и вот что у меня получилось: принимаемый КВ диапазон 1...30МГц, вывод обработанного аудио через внутренний 12-битный ЦАП или вывод I/Q потока на ПК через UAC1.

Четырехслойная плата, размером 100х60мм, спроектирована таким образом, что не задействованные пины MCU выведены на PLS разъемы, для дальнейшего расширения проекта

Входная часть построена на детекторе Тейло

пробовал и схемы с трансформаторами, в том числе и с балансным включением, особых изменений не заметил. Пока остановился на данном варианте, но и он не лишен недостатка, разность в чувствительности между 160m и 10m диапазонами примерно 1..2dB, соответственно на десятке слабее.
С выхода смесителя на ключах сигналы поступают на инструментальные операционные усилители, которые обеспечивают хорошее подавление синфазных помех, и далее на активный ФНЧ 4-го порядка выполненный на ОУ по схеме Саллена-Ки

АЧХ ФНЧ, на картинке модели двух вариантов, 48кГц и ~24кГц

по факту такого ФНЧ оказалось не совсем достаточно, дело в том, что по краям спектра с полосой 48кГц, просматриваются алиасы от сильных сигналов на частотах примерно +/- 25..30 kHz от нулевой частоты после оцифровки. Но так как основная обработка сигнала выполняется вблизи нулевой частоты, с этим недостатком можно смириться!
Далее сигналы идут непосредственно на входы АЦП STM32H723ZGT6.
Ключевой смеситель тактируется дешевым генератором Si5351 с частотой х4

Код программы MCU написан в среде STM32CubeIDE, используются библиотеки HAL, TinyUSB (составное USB устройство) и CMSIS-DSP (цифровая обработка сигнала) входящей в состав STM32CubeMX. Почему HAL? А потому, что использование HAL это быстрый вход в разработку приложений на MCU STM32!
На дисплее отображается текущая частота настройки, активность AGC/NOTCH, уровень принимаемого сигнала по шкале S-metr, спектр водопада в полосе +/-24 kHz от нулевой частоты, ноль — это центр спектра водопада, на спектре отображаются границы полосы пропускания при демодуляции. В нижней части дисплея отображаются режимы функциональных трех кнопок. При подключении по USB к ПК, спектр водопада и уровень сигнала S-metr, не отображаются, выводится соответствующая надпись на дисплее

Все настраиваемые параметры хранятся во внешней флеш-памяти.
Управление осуществляется механическим энкодером с кнопкой, и тремя функциональными кнопками.
При подключении устройства к USB компьютера, в системе определяется составное USB устройство, COM порт, и аудио устройство записи.
Осваивал ЦОС сначала с разработки приложения на C# для оценки/обработки сигналов с АЦП STM32H723

Приложение позволяет анализировать не только сырые данные I/Q, но и WAV файлы с I/Q сигналами.
На том же C# был написан генератор I/Q сигналов

Режим работы АЦП MCU выбран как два независимых АЦП1/2, но тактируются они одним сигналом триггера таймера 8 с частотой 48 kHz, хотя в STM32 есть парный режим работы АЦП — Dual mode. Как утверждает документация от ST, в данном режиме выборка данных с двух АЦП происходит в один момент времени, но как я не бился с данным режимом, постоянно получал линейное увеличение зеркала сигнала при уводе частоты сигнала от нуля. Либо я читаю документацию поперек, либо что-то другое, чего я еще не знаю!
После оцифровки к сигналу применяются коррекции: DC — удаление постоянной составляющей, амплитудная и фазовая коррекции, коэффициенты этих коррекций, кроме DC для каждого диапазона свои. После коррекций сигнал отправляется в кольцевой буфер, далее в режиме подключения по USB к ПК сигналы I/Q отправляются в UAC1 для обработки на ПК, а в автономном режиме работы (без ПК), сигналы I/Q обрабатываются в MCU, выполняется быстрое преобразование Фурье (FFT) для спектра водопада, демодуляция SSB/CW, затем применяется АРУ и/или NOTCH фильтр, и в завершении своего цифрового пути, сигнал отправляется на внутренний ЦАП (цифро-аналоговый преобразователь), выход ЦАП внутри MCU направлен на внутренний операционный усилитель OPAMP1 который работает в качестве буфера, далее через простой RC ФНЧ, выполненный на R45 и C75, сигнал уже снимается либо на наушники, либо можно подать на аудио УМ для использования динамика. Вот как выглядит сигнал с внутреннего 12-ти битного ЦАП без RC ФНЧ и с RC ФНЧ


Внутренний ЦАП MCU тактируется тем же триггером таймера 8 что и АЦП. Внутренний ЦАП имеет разрядность 12 бит. Но если не быть аудиоманом, этого вполне достаточно для комфортного прослушивания как радиолюбительских так и вещательных КВ станций. Проводил эксперименты с подключением внешнего дешевого, но очень не плохого ЦАП на базе PCM5102 выполненного в виде отдельного модуля

тут уже разрядность можно использовать от 16 до 24 бит, и соответственно звук даже в варианте 16 бит на выходе этого ЦАП более приятный для восприятия.
Фрагменты кода ЦОС, есть у меня на сайте. Там же и история проекта.
Дальше планирую кроме оптимизации наработанного, перейти и к передающей части!
В завершении данного повествования видео работы моего стенда, в ролике три сцены: работа приложения, автономная работа на внутренний ЦАП любительский диапазон 40м и вещательный диапазон 41м, сигнал с антенны CW40100, подается напрямую на вход смесителя без ДПФ.
Тут несомненно есть еще над чем работать!
73!
