First-order hold interpolation in matlab
Your filt is simply not a first-order hold filter.

Fix that by writing down what each sample in your 7 inter-original-sample samples need to have as value. You'll come up with a description like:


  The first inserted sample needs to be the sum of the last sample, and the 1/8 of the difference to the next input sample.


That is a simple linear equation:

\begin{align}
y[n=m+1] &amp;= x[m] + (x[m+8]-x[m])\cdot\frac 18\\
         &amp;= x[n-1] + \frac18 x[n+7] + (-\frac18)x[n-1]\\
         &amp;= \frac{8-1}8 x[n-1] + \frac18 x[n+7]
\end{align}

notice where the the $1$ from the index on the left side reappears on the right side.

Do the same for the second, third, … seventh sample that you insert. 

You'll notice that the vector you get bears no resemblance to your filt coefficients!