I am trying to extract features from a signal using filtfilt function in MATLAB. I implement the filtfilt function on my original signal using a high pass filter(second derivative) and use the peak of the second derivative to find my feature in the original signal. When I use filtfilt without a negative sign the signal is reversed and the features I am looking at is wrong but when I use
-filtfilt I can see that the signal is not reversed and the features i am looking at is right. How does -filtfilt work? what makes the signal reversed?
filtfilt fuction of Matlab / Octave does not require a negative sign. It performs forward and reverse filtering of a given signal $x[n]$ so as to obtain zero phase filtering.
Consider an LTI filter with real impulse response $h[n]$ whose frequency response is $H(\omega) = A(\omega) e^{j\phi(\omega) }$. Where $A(\omega) = |H(\omega)|$ and $\phi(\omega) = \angle{H(\omega)}$.
Then first apply this filter to your signal $x[n]$ to get the intermediate signal $w[n]$ :
$$ w[n] = h[n] \star x[n] \leftrightarrow W(\omega) = H(\omega)X(\omega) $$
Then filter the intermediate $w[n]$ by $h[-n]$ to get the final $y[n]$.
$$ y[n] = h[-n] \star w[n] \leftrightarrow Y(\omega) = H(-\omega)H(\omega)X(\omega) $$
Note that if $h[n]$ is real then $$A(-\omega) = A(\omega) ~~~\text{ and } ~~~\phi(-\omega) = -\phi(\omega)$$
Then the output $Y(\omega)$ will be
$$ \begin{align} Y(\omega) &= A(-\omega) e^{j\phi(-\omega)}A(\omega) e^{j\phi(\omega)}X(\omega)\\ &= A(\omega) e^{-j\phi(\omega)}A(\omega) e^{j\phi(\omega)}X(\omega) \\ &= A^2(\omega) X(\omega) \end{align} $$
That's; the frequency response of the effective filter is : $$\boxed{ Y(\omega) = |H(\omega)|^2 X(\omega) }$$ which is zero phase.