‮Сдвиг по фазе (kincajou) wrote,
‮Сдвиг по фазе
kincajou

SDR DSP

Упёрся в реализацию FIR.

В виде сишной программы работает - получается нужная АЧХ, сигнал нормально фильтруется. Но если реализовать в виде VHDL-модуля, то получается сюрприз. Вроде все заметные ошибки выловил и даже осознал, чем чревато смешивать в одной операции умножения signed- и unsigned-числа. Даже аккумулятор для MAC-ядра нужной ширины сделал, чтоб в нём не возникало переполнений. И даже нужное количество бит оттуда забираю.

Реализация тупая, "в лоб", лишь бы работало (при этом фильтром сожрана чуть ли не треть ресурсов чипа! разумеется, структуру буду оптимизировать, но пусть сначала заработает как надо): конечный автомат ждёт появления на входе новой выборки и защёлкивает её в конвейер, после чего проходит по всей длине конвейера, перемножая сохранённую очередь выборок на соответствующие коэффициенты. Результат умножения складывается в аккумуляторе, затем выставляется строб готовности выходных данных. Коэффициенты загружаются микроконтроллером какие надо, их я могу посмотреть через консоль. Сами выборки тоже доступны для просмотра -- можно сделать "мгновенный снимок" конвейера.

Всё выглядит нормально, но вместо полосы пропускания шириной порядка 0.25fs (как мне требуется) получается меньше 0.01fs, чего мне совсем не надо. Да ещё и куча побочных и довольно высоких "лепестков" пролезает на АЧХ. Не понимаю, где ляп.
Tags: dsp
Subscribe

  • Post a new comment

    Error

    Anonymous comments are disabled in this journal

    default userpic

    Your reply will be screened

    Your IP address will be recorded 

  • 8 comments