Convolution coefficientsWhen the data points are equally spaced a relatively simple analytical solution to the least-squares equations can be found. This solution forms the basis of the convolution method of numerical smoothing and differentiation. Suppose that the data consists of a set of n {xi, yi} points (i = 1...n), where x is an independent variable and yi is an observed value. A polynomial will be fitted to a set of m (an odd number) adjacent data points separated by an interval h. Firstly, a change of variable is made where The coefficients a0, a1 etc. are obtained by solving the normal equations where the ith row of the Jacobian matrix J has the values {1 zi zi2 … zk}. For example, for a quadratic polynomial fitted to 5 points In this example, a0 = ( − 3y1 + 12y2 + 17y3 + 12y4 − 3y5) / 35. This is the smoothed value for the central point (z = 0) of the five data points used in the calculation. The coefficients (-3 12 17 12 -3)/35 are known as convolution coefficients as they are applied in succession to sets of m points at a time. Tables of convolution coefficients were published by Savitzky and Golay in 1964, though the procedure for calculating them was known in the 19th. century (See E. T. Whittaker and G. Robinson, The Calculus of Observations) The numerical derivatives are obtained by differentiating Y. For a cubic polynomial It is not necessary always to use the Savitzky-Golay tables as algebraic formulae can be derived for the convolution coefficients. For a cubic polynomial the expressions are Signal distortion and noise reductionIt is inevitable that the signal will be distorted in the convolution process. Both the extent of the distortion and signal-to-noise improvement:
For example, If the noise in all data points has a constant Standard deviation, σ, when smoothing by a m-point linear polynomial the standard deviation on the noise will be decreased to Frequency characteristics of convolution filtersConvolution maps to multiplication in the Fourier co-domain (see pseudocode below). The (finite) Fourier transform of a convolution filter shows that it is most efficient for high-frequency noise and can therefore be described as a low-pass filter. The noise that is not removed is primarily low-frequency noise. ### Smooth the vector x[1,...,nx] with an exponentially damped kernel. The ### result is a vector "smooth" with indeterminate values at the edges, and ### smoothed values in between cutoff = 0.05 ### weights to zero below this value alpha = 1.8 ### Decay of weight with distance from center logacutoff = log(cutoff)/log(alpha) ### log base alpha of cutoff span = floor(-logacutoff ) ### width to left and right weights = alpha^(-abs(sequence(left=-span, right=span, step=1))) ### Overloaded "^" kernel = weights / sum(weights) ### Overloaded "/" nx = length(x) nk = 2*span+1 ### length(kernel) assert( nx>nk ) x1 = concatenate( sequence(0,length=ny-1), x ) k1 = concatenate( kernel, sequence(0,length=nx-1) ) s1 = inverse_fft( fft(x1) * fft(k1) ) ### Overloaded "*" smooth = sequence(NaN, length=nx) smooth[1+span:nx-span] = s1[ ny+nk-1 : nx+nk-1 ] ### using 1 offset notation Applications
See alsoSavitsky-Golay_filter (in Dutch, but with good illustrations) ReferencesP. Gans, Data fitting in the chemical sciences, Wiley, 1992.
| |