Pull to refresh

Comments 16

Да, КИХ Это фильтр с Конечной Импульсной Характеристикой. То же самое как FIR - Finite Impulse Response.

А можно не надо?

В смысле я понимаю, что у взятой ПЛИС есть дофига ресурсов, которые можно потратить на параллельное умножение 500 чисел, и FIR на неё идеально ложится, но не оптимизировать фильтры – это ж путь в пекло (ну в смысле тепловыделение всё больше). Конечно, это просто учебный пример, но дети ж поверят, что так и надо...

Ну конкретно в этом примере нет параллельного умножения 500 чисел. Есть последовательное.

Тем более :-) (в смысле, "бонусом" у нас ещё и понижение производительности из-за того, что используем последовательно 500 умножений там, где хватило бы десятка).

Впрочем, простите за невнимательность. Потом почитаю статью как следует, тема-то для меня интересная (давно хочу освоить) и примеры кажутся достаточно простыми.

А окно из 500 отсчётов скользящее? Или шагает по 500 отсчётов? Вы ыглядит как шагающее окно. И ещё вопрос, почему такой тип окна(скользящее или нет...) выбрали?

Окно конечно скользящее. Одна выборка сигнала пришла и одна ушла.

А что бывает по другому?

Можно набирать по 500 отсчётов и выдавать по 500 отсчётов. Недостаток у такого режима в том что стыки между окон кривые будут. Ну или можно набирать новые 100 отсчётов а потом выдавать 100, в итоге получится шаг по 100 отсчётов, тогда стыки окон не будут такими плохими.

P.s. я начинаю чувствовать что сильно ошибаюсь...

  1. Это уже не FIR будет, а какая-то нелинейщина.

  2. Формула с 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р

В мире вообще много чего есть готового и интересного. Но свой изобретенный велосипед всегда интересней и познавательней.

Sign up to leave a comment.

Articles