I'm going to list of bunch of "filters that don't overshoot".
I hope you'll find this partial answer better than no answer at all.
Hopefully people looking for "a filter that doesn't overshoot" will find this list of such filters helpful.
Perhaps one of these filters will work adequately in your application, even if we haven't found the mathematically optimum filter yet.
first and second order LTI causal filters
The step response of a first order filter ("RC filter") never overshoots.
The step response of a second order filter ("biquad") can be designed such that it never overshoots.
There are several equivalent ways of describing this class of second-order filter that doesn't overshoot on a step input:
- it is critically damped or it is overdamped.
- it is not underdamped.
- the damping ratio (zeta) is 1 or more
- the quality factor (Q) is 1/2 or less
- the decay rate parameter (alpha) is at least the undamped natural angular frequency (omega_0) or more
In particular, a unity gain Sallen–Key filter topology with equal capacitors and equal resistors is critically damped: Q = 1/2 , and therefore does not overshoot on a step input.
A second-order Bessel filter is slightly underdamped: Q = 1/sqrt(3) , so it has a little overshoot.
A second-order Butterworth filter is more underdamped: Q = 1/sqrt(2) , so it has more overshoot.
Out of all possible first-order and second-order LTI filters that are causal and do not overshoot, the one with the "best" (steepest) frequency response are the "critically damped" second-order filters.
higher-order LTI causal filters
The most commonly-used higher-order causal filter that has an impulse response that is never negative (and therefore never overshoots on a step input) is the "running average filter", also called the "boxcar filter" or the "moving average filter".
Some people like to run data through one boxcar filter, and the output from that filter into another boxcar filter.
After a few such filters, the result is a good approximation of the Gaussian filter.
(The more filters you cascade, the closer the final output approximates a Gaussian, no matter what filter you start with -- boxcar, triangle, first-order RC, or any other -- because of the central limit theorem).
Practically all window functions have an impulse response that is never negative, and so in principle can be used as FIR filters that never overshoot on a step input.
In particular, I hear good things about the Lanczos window,
which is the central (positive) lobe of the sinc() function (and zero outside that lobe).
A few pulse shaping filters have an impulse response that is never negative, and so can be used as filters that never overshoot on a step input.
I don't know which of these filters is the best for your application, and I suspect the mathematically optimum filter may be slightly better than any of them.
non-linear causal filters
The median filter is a popular non-linear filter that never overshoots on a step-function input.
EDIT: LTI noncausal filters
The function sech(t) = 2/( e^(-t) + e^t ) is its own Fourier transform, and I suppose could be used as a kind of non-causal low-pass LTI filter that never overshoots on a step input.
The non-causal LTI filter that has the (sinc(t/k))^2 impulse response has a "abs(k)*triangle(k*w)" frequency response.
When given a step input, it has a lot of time-domain ripple, but it never overshoots the final settling point.
Above the high-frequency corner of that triangle, it gives perfect stop-band rejection (infinite attenuation).
So in the stop band region, it has better frequency response than a Gaussian filter.
Therefore I doubt the Gaussian filter gives the "optimal frequency response".
In the set of all possible "filters that don't overshoot", I suspect there is no one single "optimal frequency response" -- some have better stop-band rejection, while others have narrower transition bands, etc.
The normal way to solve these problems is as stevenvh described. LaPlace transforms and complex analysis are used because such problems are easier to solve by humans in that space.
However, this was all before there were computers with essentially unlimited and free compute cycles. It is possible to get meaningful answers from purely time domain analysis. It will take the computer way more cycles, but so what? Nowadays what you want to conserve are your time and effort.
Of course everything can be solved in the time domain somehow. After all, the real signals exist there. Imaginary components are, well, imaginary. They are useful mathematical aids in understanding and manipulating signals where both the frequency and phase are relevant. Using such mathematical abstractions greatly reduces the computation, but they are not neccessary.
Programs like Spice do pretty much everything in the time domain, I think. They look at the voltages and currents at any one time, then use that to decide what the voltages and currents are a little tiny step further in time. The computer does this a few million times in a row and now you've got real signals as a function of time. The tricky part here is to decide how long those computational time steps are. Too long, and the computation will miss details and get the wrong answer. Too short, and intermediate increments will be so small they will be lost when added to the existing values. This latter part depends on the number precision used inside the computer. For example, with normal IEEE 32 bit floating point, if increments are 65000 times smaller than the thing they are adding to, the increment is effectively limited to 8 bits resolution. To get around this, the simple answer is to use the highest precision floating point the computer has. This is usually called something like "double precision" in most languages. That may take a little more time in the computer to manipulate the wider numbers, but again that's pretty much irrelevant.
If you try this path, you need to model the various resistors, capacitors, and inductors in incremental form inside the computer. Or you can model the whole filter incrementally in some cases. For example, the algorithm for a single pole RC low pass filter is:
FILT <-- FILT + FF(NEW - FILT)
This is very common inside microcontrollers where it is applied to real world readings with some noise on them, for example.
Once you have code that models the filter of interest, you create a higher level that successively sends it sine waves of different frequencies. After waiting to make sure the filter has reached steady state for each frequency, you look at the amplitude and phase of a output cycle relative to the input cycle.
To be clear, I actually agree with stevenvh that using complex impedance is the best way to analyze such things. My main intent was to point out that you don't need complex math to solve this problem, or any problem in electronics for that matter, only that it can make it much simpler. I also wanted to point out that in today's world trying to conserve computation is wrong headed. That may have applied 20 years ago, or perhaps even 10 years ago, but not today.
Another point is that you need to learn complex math. You've got no business trying to be a electrical engineer, or pretty much any type of engineer, without it. So instead of finding ways to avoid complex analysis, dig in and learn it. This is a important tool every EE must have at his disposal.
Best Answer
A filter has its own frequency response, defined by the magnitude and the phase plot.
A filter works for both periodic and non-periodic signals: the reason is that while periodic signals can be represented as a superposition of infinite oscillations at frequencies multiples of the fundamental one (Fourier Series), non-periodic signals as well can be represented as a superposition of an infinite number of oscillations very close each other in frequency. In the limit, the series becomes a continuous sum, i.e., an integral (Fourier Integral).
Mathematically, this could be explained by the fact that non-periodic signals can be viewed as 'periodic' functions with 'infinite period' (which means infinitesimally small fundamental frequency, i.e., infinitesimally small frequency spacing between the spectral components).
Therefore, it is correct to say that human ear 'captures frequency components approximately between 20Hz and 20kHz', even if the sounds we hear are non-periodic signals.
What about filter implementation?
If you want to limit the frequency components of a signal with some filter, you just need to design it keeping in mind the periodic sinusoidal components! If you want to achieve a sinc() filter impulse response (i.e., a sharp rectangular-shaped magnitude response) you should better accept that only approximations are possible in the real world; your bandwidth will never have such sharp edges and flat in-band response : instead, there is a well-known tradeoff between edge sharpness (related to the filter's selectivity together with the bandwidth) and the in-band flatness.
For this reason, the bandwidth of filters is generally evaluated in terms of the -3dB frequency (i.e., the frequency corresponding to a gain reduction of 3dB with respect to the peak value).
Filter implementations in electronics design can be either passive (using just capacitors, inductors, resistors) and active (using active components like operational amplifiers). A popular example of active lowpass or highpass filter is the Sallen-Key topology.
Beyond these physical implementations, however, in most cases you start from some design specifications relating the bandwith, cut-off frequency, flatness, time-domain overshoot , center frequency and, according to them, a 'filter approximation' is chosen (this is true in particular for OpAmp-based active filters): these are just mathematical models which allow you to locate the poles of your filter starting from the desired frequency response. Popular examples are the Bessel, Čebyšëv and Butterworth filters; for the same model, different approximate implementations are possible.
There are online interactive tools which help in this design process (since sometimes there is a lot of nasty algebra behind it); these services are offered by famous analog IC technology companies; I don't know if I can link here, but just google 'filter design analog online' or something like that and you will find it. I hope this helps and... enjoy!!!