Продолжение.
И тут нам на помощь приходит самая простейшая из всех простых форма реализации нерекурсивного фильтра - однородный фильтр. Это такой фильтр, все коэффициенты которого равны единице. То есть, он не требует умножителей совсем! Импульсная характеристика (взвешивающее окно) однородного фильтра - прямоугольная, а АЧХ (модуль преобразования Фурье импульсной характеристики) имеет многолепестковую форму, в которой лепестки образованы функцией вида |sinc x| = |sin x / x|. Затухание АЧХ в средних точках между лепестками бесконечное. Этот фильтр может быть реализован и в рекурсивном виде, так он получается еще проще - для децимирующего фильтра нужен всего один накапливающий сумматор (интегратор). Теория однородного фильтра изложена у Гольденберга на странице 77. Супостаты Гольденберга не читали, и рекурсивную реализацию однородного фильтра они обозвали CIC-фильтром (Cascaded Integral-Comb), или фильтром Хогенауэра.
http://www.dsplib.ru/content/cic/cic.htmlК нашей радости оказывается, что его АЧХ как нельзя лучше подходит для реализации децимирующего фильтра, т.к. имеет глубокие провалы как раз на тех частотах, где требуется давить "алиасы". См в предыдущем сообщении на средней картинке АЧХ 1-каскадного CIC, рассчитанного для коэффициента децимации 10. Ось частот отградуирована в долях от исходной частоты дискретизации, т.е. 0,5 - это исходная частота Найквиста.
На картинке красным цветом показаны полосы частот, которые нас не интересуют вообще и где АЧХ может быть абсолютно любой (это и не полезная полоса и не алиасы), зеленым цветом близ нулевой частоты показана полезная полоса 1 МГц (на картинке цвет плохо видно), также зеленым цветом вокруг провалов на частотах кратных новой частоте дискретизации 10 МГц (10, 20, 30, 40, 50 МГц) - показаны двухмегагерцовые участки "алиасов". К сожалению, эти провалы АЧХ не столь широки как нам хотелось бы, и на краях полезной полосы алиас первого порядка будет подавлен всего на 19 дБ. Это очень плохо.
Но в нашем арсенале есть испытанное средство - каскадирование. Так, шестикаскадный CIC фильтр с подавлением алиасов на -115 дБ нас уже вполне устроит (см. там же нижнюю картинку). За это мы должны заплатить ухудшившейся неравномерностью 0,9 дБ в целевой полосе, но это пустяки. При необходимости этот небольшой провал АЧХ можно потом скорректировать.
Таким образом, для данного проекта наш дециматор получается двухкаскадным.
В первом каскаде шестикаскадный CIC дециматор делит скорость потока данных на 10, во втором каскаде FIR дециматор подчищает огрехи CIC и делит ещё на 4. Во втором каскаде уже требуется настоящий FIR фильтр с умножителями. Но он будет работать на пониженной в 10 раз частоте по экономичной структурной схеме с работой умножителей в цикле и с пониженными требованиями к АЧХ, т.е. его порядок не будет высоким. И не отнимет у ПЛИС много ресурса. Часто для экономии умножителей применяют такую разновидность FIR фильтра как полудиапазонный (half-band) фильтр. У него половина коэффициентов равны нулю. Ну и, конечно, импульсная характеристика FIR фильтра должна быть обязательно симметричной (это означает, что фильтр имеет симметричные дублирующиеся коэффициенты) - это не только дает нам линейную ФЧХ, но и экономит память в ПЛИС для их хранения.
Если требуется более высокий суммарный коэффициент децимации, то выгодно второй FIR каскад дециматора ещё раздробить на подкаскады. Это нам даст ещё бОльшую экономию по умножителям.
Если наоборот, суммарный коэффициент децимации должен быть малым (на выходе нужна широкая полоса), то CIC уже не подойдет, и надо будет раскошеливаться на FIR с умножителями.
О подводных камнях.
Если ошибиться с выбором параметров децимирующих фильтров, то можно нарваться на внеполосные каналы приема, которые получаются из недостаточно подавленных алиасов.
Не надо забывать, что каждый каскад децимации должен сопровождаться расширением разрядности данных. Чем уже полоса, тем больше требуется разрядов для понижения шума округления (принцип обмена разрядности на ширину полосы действует и здесь).
Не надо скупиться на разрядности умножителей в квадратурном преобразователе по входу LO опорного сигнала. И сам опорный сигнал, формируемый методом прямого цифрового синтеза DDS, должен быть точным, насколько это возможно. Для повышения его точности часто применяют интерполяцию (если в ПЛИС есть лишние умножители). Иногда недостаточно точный опорный сигнал искусственно зашумляют (dithering, дизеризация) для уменьшения спуров, при этом мощность спуров размазывается по частоте, незначительно повышая шумовой пьедестал. Чтобы сэкономить память ПЛИС и не хранить в ней таблицу значений функции косинуса, для вычисления этих значений иногда применяют итерационный алгоритм CORDIC.
DDC можно реализовать и не на ПЛИС и избежать связанных с этим граблей, временнЫх и материальных затрат освоения программных пакетов разработки прошивок FPGA. Промышленность супостатов выпускает готовые микросхемы DDC, которые можно извне программировать в рамках выполняющейся функции (настраивать коэффициенты децимации каскадов, перестраивать синтезатор и т. д.). В этом случае структура DDC ЦРПУ будет состоять из УРЧ, входного ФНЧ, АЦП, микросхемы DDC, контроллера и интерфейса с ЭВМ.
Конечно, в таком коротком очерке нельзя рассмотреть все тонкости и нюансы реализации DDC и особенности аппаратной реализации ЦОС на ПЛИС. Но основной принцип и основные грабли должны быть понятны.