指数平滑フィルタ:
$$
y_n = \alpha x_n + (1 - \alpha)y_{n-1}
$$
アナログで言えば1次のRCローパスフィルタに対応するフィルタだが、この式をそのままハードウェア化した場合、毎クロック演算することはできない。というのも単純な話、$y_n$ に $y_{n-1}$の項をフィードバックしようにも、積和演算で数クロック遅れてしまうので間に合わないのである。例えばXilinxのDSP48E1スライスの場合は、積和演算(P=A*B+C)のA入力からP出力まで3クロックかかってしまう。
ではどうするかというと、
\begin{eqnarray*}
y_n &=& \alpha x_n + (1 - \alpha)y_{n-1} \\
&=& \alpha x_n + \alpha(1 - \alpha) x_{n-1} + (1 - \alpha)^2 y_{n-2} \\
&=& \alpha x_n + \alpha(1 - \alpha) x_{n-1} + \alpha(1 - \alpha)^2 x_{n-2} + (1 - \alpha)^3 y_{n-3} \\
&=& ...
\end{eqnarray*}
と、$y_{n-k}$を $y_{n-k-1}$に展開していって、積和演算のレイテンシでも間に合うようにフィードバック項を遅らせる。1
DSP48E1スライスで言えば、レイテンシが3クロックなので、 $y_{n-3}$が出るまで展開する。
なお回路は複雑になる2ので、どうしても指数平滑が必要な場合3でもなければ別のローパスフィルタを使ったほうがいい。