Now that I've got a nice handy spectral derivative routine, time to test it out on some practical problems (ie non-smooth).
A useful scalar test function is a square wave with a little Gaussian blip added to it:
This is good test function because it contains discontinuities as well as small smooth features that we'd like to be able to resolve.
There are tons of options to filter out high frequency "ringing" around discontinuities (Gibbs phenomenon). One nice option is the Butterworth filter, the gain for which is:
Where the cut-off frequency and the order of the filter are free parameters you can "fiddle" with. For this set of derivatives I'm going to choose a cut-off frequency of half the highest frequency in my grid and see what the effect of the order parameter is. Here's a plot of the gain for a couple different order filters:
Notice they all have the same gain at the cut-off frequency, they just pass through it differently.
The un-smoothed spectral derivative compared to the derivative after different order Butterworth filters are applied to the Chebyshev coefficients before the inverse transform are shown below.
The presence of the discontinuities causes "ringing" throughout the entire grid, but the filters do a pretty good job of containing it to the area immediately around the shocks. Here's a zoomed in view of the smooth feature area:
Without filtering the derivatives of the smooth feature are totally swamped by ringing, but you actually get a nice result out after some filtering.