How to solve a time delay from an FIR filter?
However, {f~n} has a time shift comparing to the origin signal, and their amplitudes also have a deviation.

Any causal system has a non-zero group delay. That's to be expected from systems theory!
So, yes, you've got a shift. And, unless your ${h_n}$ is a linear-phase filter, that delay isn't even constant for different frequencies.
This has nothing inherently to do with your method of convolution – it's just how the math works out.
If your filter is a linear-phase filter, then you can just time-shift the result back by half its length to compensate the group delay.
The usual way, however, is simply to be aware of the math behind all this and to work with the signal knowing that filtering is an operation with a group delay.