Цитата(des00 @ Aug 31 2011, 09:52)

все так, но БИХ фильтры крайне не любят грубого усечения. лучше посчитать в матлабе БЧХ фильтр на фиксед поинт и увидеть что с ним да как. Ну а сгенерировать рабочий код дело времени.
des00, расчет в матлабе на фиксед пойнт делается так?

Цитата(Hoodwin @ Aug 30 2011, 23:59)

Я не думаю, что все так радужно. 16 младших битов придется выкинуть, потому что нужно согласовывать типы данных. В приведенном тексте сигналы представлены 16-разрядными числами без дробных частей. Умножение на 13107 делает из 16 битного числа 32-битное, которое затем вновь становится 16-битным после откидывания младших битов. Чтобы повысить точность, нужно в целом перейти к вычислению с большей разрядностью, только зачем?
Hoodwin, но если при сдвиге на 16 отсчетов откидываются младшие биты, то выходной отсчет
y(n)=0.6*x(n)+0.6*x(n-1)-0.2*y(n-1)
будет вычислен с некоторой ошибкой, которая сохранится при вычислении следующего отсчета y(n+1), который тоже будет вычислен с ошибкой. Не получится ли так, что AЧХ недопустимо исказится из-за грубого округления?
Какие проблемы есть при переходе к вычислению с большей разрядностью? Быстродействие?
Частота дискретизации фильтра 32 Гц, с той же частотой поступают входные отсчеты.
Цитата(Hoodwin @ Aug 30 2011, 23:59)

при более сложных коэффициентах, по-видимому, придется делать аппаратный умножитель. Записать его можно так же, но нужно помнить, что для получения хорошего быстродействия аппаратного умножителя и вход и выход должны быть регистрами, что потребует некоторой структурной переработки данного кода. Если частота будет приемлемой, то можно ничего не менять.
Hoodwin, что значит делать аппаратный умножитель? При записи умножения со * и при сложных коэффициентах квартус сам сделает умножение на аппаратных умножителях, а мне остается только улучшить быстродействие?
записать коэффициенты b0, b1, a1 в регистры таким образом годится?
reg [15:0] a1=13107 ?
Цитата(Hoodwin @ Aug 30 2011, 23:59)

Еще из структурных соображений я бы выдал на выход не data_out, а sample_out, так как это выходы регистров, которые легко таскать по кристаллу не снижая быстродействия.
Насколько я понимаю, data_out и sample_out - оба регистры, и мне казалось, что безразлично, какой из них подавать на выход. почему если sample_out, а не data_out будет на выходе быстродействие будет выше?