Comments 16
КИХ фильтр это FIR?
А можно не надо?
В смысле я понимаю, что у взятой ПЛИС есть дофига ресурсов, которые можно потратить на параллельное умножение 500 чисел, и FIR на неё идеально ложится, но не оптимизировать фильтры – это ж путь в пекло (ну в смысле тепловыделение всё больше). Конечно, это просто учебный пример, но дети ж поверят, что так и надо...
Ну конкретно в этом примере нет параллельного умножения 500 чисел. Есть последовательное.
Тем более :-) (в смысле, "бонусом" у нас ещё и понижение производительности из-за того, что используем последовательно 500 умножений там, где хватило бы десятка).
Впрочем, простите за невнимательность. Потом почитаю статью как следует, тема-то для меня интересная (давно хочу освоить) и примеры кажутся достаточно простыми.
А окно из 500 отсчётов скользящее? Или шагает по 500 отсчётов? Вы ыглядит как шагающее окно. И ещё вопрос, почему такой тип окна(скользящее или нет...) выбрали?
Окно конечно скользящее. Одна выборка сигнала пришла и одна ушла.
А что бывает по другому?
Можно набирать по 500 отсчётов и выдавать по 500 отсчётов. Недостаток у такого режима в том что стыки между окон кривые будут. Ну или можно набирать новые 100 отсчётов а потом выдавать 100, в итоге получится шаг по 100 отсчётов, тогда стыки окон не будут такими плохими.
P.s. я начинаю чувствовать что сильно ошибаюсь...
Это уже не FIR будет, а какая-то нелинейщина.
Формула с 500 отсчётами даёт одно значение на выходе. Так что чтобы получить 500 значений – вам надо 500 раз посчитать по ней, так что выгоды от работы по кускам нету (ну, есть другие фильтры, где есть – например, порезать по N отсчётов, бпф, фильтрация, обратное бпф – тут, понятно, по блокам надо)
частота оцифровки получится 24000000/512=46875Гц
Почему 512, если отчётов у вас только 501?
Всё равно память в FPGA выделяется блоками. Нельзя сделать блок длиной 501 элементов.
Да и указатели циклического буфера легче перемещать. После ячейки по адресу 511 сразу идет ячейка по адресу ноль. Ну и коэффициенты по адресам выше 501 равны нулю.
Это понятно, что всё по степени двойки. Но в статье ни слова про нулевые коэффициенты выше 501.
Неужели не добавить простейшую логику, чтобы выполнять ровно столько умножений, сколько надо? Входной сигнал пишите в кольцевой буфер на 512 и пробегайте его через 501 умножение со сложением.
Это сейчас всего 2 % времени тратится выпустую. А если бы у вас было 5000 отсчётов — вы бы завели буфера на 8192 элементов и 40 % времени делали бесполезные вычисления (умножения на ноль)?
Самый простой способ поиграть с ких - SigmaDSP ADAU1761, от чипдип, 1500р, все из коробки уже есть. Я на нем делал фонокорректор, ну и много чего там еще интересного.
И да нужен SigmaLink-USBi программатор 1700р
Эксперименты с цифровым КИХ фильтром в плате FPGA MCY316