Сделал так.
Сначала соорудил тестовую аудиозапись, передискретизировав (пока что "вручную", при помощи Audacity) её на частоту 8000 Гц (т.е. получается полоса 0..4000 Гц, что вполне достаточно для моих целей). Она вот:
Пропустил этот сигнал через FIR, работающий в режиме полосно-пропускающего. Центральная частота 1650 Гц, полоса 2500 Гц; на картинке ниже его АЧХ изображена зелёной линией (красная линия - ФНЧ, синия и фиолетовая линия - фазочастотные характеристики,.. вроде правильно вычисляются).
(используется окно Блэкмана, оно смягчает ripple в полосе пропускания и одновременно расширяет скаты)
Получился сигнал с ограниченным спектром. Это важно для корректной работы преобразователя Гильберта, ибо на частотах вблизи 0 и fs/2 у него неизбежно вылезают артефакты из-за особенностей АЧХ (преобразователь можно перестроить так, что исчезнет артефакт около fs/2, но вблизи нуля всё равно будет фигня -- к тому же, понадобится сделать линию задержки на _дробное_ количество тактов, а я так не умею).
Далее отфильтрованный сигнал подаётся на входы двух схем: одна представляет собой просто линию задержки, другая есть преобразователь Гильберта. Выходные сигналы с этих схем передискретизируются на высокую частоту (я решил не мудрить и воспользовался простейшей схемой - выборка тупо повторяется N раз, где N равно соотношению частот квантования выход/вход), перемножаются с квадратурным сигналом опорного генератора, суммируются (или вычитаются, в зависимости от нужной боковой полосы) и voila!
Получается некий сигнал. Скармливаю его обратно другой схеме, проводящей аналогичные действия в обратном порядке, на её выходе имею два файла: один с сигналом из верхней боковой полосы, другой из нижней. Вот они:
В общем, работает! весь сигнал теперь в USB, а его жалкие остатки в LSB еле-еле слышно, они подавлены фильтром. Причём в обратной цепи ещё и не очень неоптимальная структура ФНЧ. Если и там всё сделать "по науке", результат будет ещё лучше.
Требования алгоритмы к производительности железа невелики и ПЛИС прожуёт такое с лёгкостью необычайной.