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 highorder 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.