Do you have any suggestions for eliminating the ripples?

Top of the head the following methods may be used:

(1) In the approximation-based reconstruction, as opposed to interpolation-based reconstruction, the coefficients in the linear combination (c_i * phi_i), where phi_i are basis functions represented by reconstruction kernel, are typically derived for the l_2 space (Hilbert space) for several reasons. However, in the more general Banach space setting, the l_p norm (p >=1), the error between reconstructed signal and actual signal is a convex function of coefficients c_i. Please note there is no reason to restrict p to integers, and values such as p=1.4, ,etc., are fine. It is observed that l_p with p around 1 has given a better performance on ringing suppression. This is a powerful approach, however, in general, computing the coefficients in spaces other than Hilbert space is not computationally easy.

(2) Local pre-smoothing of signal discontinuity (e.g., sharp edge) before interpolating.

(3) A strictly positive reconstruction function. No negative lobes. If the reconstruction filter is approximating, then, error may be larger.

(4) A hybrid approach, similar to that suggested by Yaroslavsky may be used.

Note: Local-Windowing-based schemes, which are otherwise good for error reduction between reconstructed and original signal, can help with smoothing of the block discontinuity at the end of each segment of data, however, some ringing may remain, because of presence of signal discontinuity (e.g., a sharp edge) elsewhere.