Upsampling - What purpose does the interpolation filter have? I want to apply some nonlinear processing to a signal, namely: I want to implement a tube emulation which adds warmth/harmonic distortion to a digital audio signal. I am worried about aliasing, so I figured out the following processing sequence:


Upsampling of the sample rate from $f_s$ to $2 \cdot f_s$
Applying an interpolation lowpass filter with $f_g = 0.5 f_s$ and a passband gain of $2$
Applying the nonlinear processing to the upsampled signal
Again applying a filter with with $f_g = 0.5 f_s$
Decimation back to $fs$.


My question arises at point 2, the interpolation filter. If I google this topic, it results in fascinating concepts like Lagrange interpolation, spline interpolation and polynominal interpolation and the math behind those seem far from trivial. Moreover, I don't understand why this is even needed - what is the reason why one would utilize one of those concepts rather than just running the signal through a run-off-the-mill IIR with sufficient stopband attenuation? The only thing I can understand is why the passband gain needs to be non-unity.

Also, although not main point of my question, feel free to point out any logical flaws that might be in my processing sequence. Thank you!
In step 1 you insert a zero-valued sample between each pair of successive original samples. This is a gain 0.5 operation. For example consider 0 Hz. You can calculate the signed 0 Hz amplitude or direct current (DC) offset simply as the mean of the sample values. Inserting the zero samples halves the mean, so the gain is 0.5, which you need to compensate for by a gain of 2.

Your 2x-oversampled samples represent values of the continuous band-limited signal exactly at the times of the original samples or exactly half-way between them. As you suggest, in step 2 you can use a discrete-time filter, which can be a finite-impulse-response (FIR) or an infinite-impulse-response (IIR) filter. If you would have an arbitrary real oversampling ratio such as 3.12897684124, you couldn't use a discrete-time filter, but would have to resort to continuous-time interpolation, which can be done using piece-wise polynomial splines.