  Fitting B-splines to discrete data is especially challenging when the given
data contain noise, jumps, or corners. Here, we describe how periodic data sets
with these features can be efficiently and robustly approximated with B-splines
by analyzing the Fourier spectrum of the data. Our method uses a collection of
spectral filters to produce different indicator functions that guide effective
knot placement. In particular, we describe how spectral filters can be used to
compute high-order derivatives, smoothed versions of noisy data, and the
locations of jump discontinuities. Our knot placement method can combine one or
more of these indicators to place knots that align with the qualitative
features of the data, leading to accurate B-spline approximations without
needing many knots. The method we introduce is direct and does not require any
intermediate B-spline fitting before choosing the final knot vector. Aside from
a fast Fourier transform to transfer to and from Fourier space, the method runs
in linear time with very little communication. The method is applied to several
test cases in one and two dimensions, including data sets with jump
discontinuities and noise. These tests show that the method can fit
discontinuous data without spurious oscillations and remains accurate in the
presence of noise.
