Intro to Signal Processing
Intro to Signal Processing
in Chemical Analysis
An illustrated essay with software available for free download
Last updated June, 2009
PDF format: http://terpconnect.umd.edu/~toh/spectrum/IntroToSignalProcessing.pdf
Web format: http://terpconnect.umd.edu/~toh/spectrum/TOC.html
Tom O'Haver
Professor Emeritus
Department of Chemistry and Biochemistry
University of Maryland at College Park
E-mail: [email protected]
Foreword
The interfacing of analytical instrumentation to small computers for the purpose of on-
line data acquisition has now become almost standard practice in the modern chemistry
laboratory. Using widely-available, low-cost microcomputers and off-the-shelf add-in
components, it is now easier than ever to acquire data quickly in digital form. In what
ways is on-line digital data acquisition superior to the old methods such as the chart
recorder? Some of the advantages are obvious, such as archival storage and retrieval of
data and post-run re-plotting with adjustable scale expansion. Even more important,
however, there is the possibility of performing post-run data analysis and signal
processing. There are a large number of computer-based numerical methods that can be
used to reduce noise, improve the resolution of overlapping peaks, compensate for
instrumental artifacts, test hypotheses, optimize measurement strategies, diagnose
measurement difficulties, and decompose complex signals into their component parts.
These techniques can often make difficult measurements easier by extracting more
information from the available data. Many of these techniques are based on laborious
mathematical procedures that were not practical before the advent of computerized
instrumentation. It is important for chemistry students to appreciate the capabilities and
the limitations of these modern signal processing techniques.
In the chemistry curriculum, signal processing may be covered as part of a course on
instrumental analysis (1, 2), electronics for chemists (3), laboratory interfacing (4), or
basic chemometrics (5). The purpose of this paper is to give a general introduction to
some of the most widely used signal processing techniques and to give illustrations of
their applications in analytical chemistry. This essay covers only elementary topics and is
limited to only basic mathematics. For more advanced topics and for a more rigorous
treatment of the underlying mathematics, refer to the extensive literature on
chemometrics.
This tutorial makes use of a freeware signal-processing program called SPECTRUM that
was used to produce many of the illustrations. Additional examples were developed in
Matlab, a high-performance commercial numerical computing environment and
programming language that is widely used in research. Paragraphs in gray at the end of
each section in this essay describe the related capabilities of each of these programs.
Signal arithmetic
The most basic signal processing functions are those that involve simple signal
arithmetic: point-by-point addition, subtraction, multiplication, or division of two signals
or of one signal and a constant. Despite their mathematical simplicity, these functions can
be very useful. For example, in the left part of Figure 1 (Window 1) the top curve is the
absorption spectrum of an extract of a sample of oil shale, a kind of rock that is is a
source of petroleum.
Figure 2. Do the two spectra on the left have the same shape? They certainly do not
look the same, but that may simply be due to that fact that one is much weaker that the
other. The ratio of the two spectra, shown in the right part (Window 2), is relatively
constant from 300 to 440 nm, with a value of 10 +/- 0.2. This means that the shape of
these two signals is very nearly identical over this wavelength range.
The left part (Window 1) shows two superimposed spectra, one of which is much weaker
than the other. But do they have the same shape? The ratio of the two spectra, shown in
the right part (Window 2), is relatively constant from 300 to 440 nm, with a value of 10
+/- 0.2. This means that the shape of these two signals is the same, within about +/-2 %,
over this wavelength range, and that top curve is about 10 times more intense than the
bottom one. Above 440 nm the ratio is not even approximately constant; this is caused by
noise, which is the topic of the next section.
Simple signal arithmetic operations such as these are easily done in a spreadsheet, any
general-purpose programming language, or a dedicated signal-processing program such
as SPECTRUM, which is available for free download.
SPECTRUM includes addition and multiplication of a signal with a constant; addition,
subtraction, multiplication, and division of two signals; normalization, and a large
number of other basic math functions (log, ln, antilog, square root, reciprocal, etc).
In Matlab, math operations on signals are especially powerful because the variables in
Matlab can be either scalar (single values), vector (like a row or a column in a
spreadsheet), representing one entire signal, spectrum or chromatogram, or matrix (like a
rectangular block of cells in a spreadsheet), representing a set of signals. For example, in
Matlab you could define two vectors a=[1 2 5 2 1] and b=[4 3 2 1 0]. Then
to subtract B from A you would just type a-b, which gives the result [-3 -1 3 1 1].
To multiply A times B point by point, you would type a.*b, which gives the result [4
6 10 2 0]. If you have an entire spectrum in the variable a, you can plot it just by
typing plot(a). And if you also had a vector w of x-axis values (such as wavelengths),
you can plot a vs w by typing plot(w,a). The subtraction of two spectra a and b, as in
Figure 1, can be performed simply by writing a-b. To plot the difference, you would
write plot(a-b). Likewise, to plot the ratio of two spectra, as in Figure 2, you would
write plot(a./b). Moreover, Matlab is a programming language that can automate
complex sequences of operations by saving them in scripts and functions.
for j = 2 to n-1, where Sj the jth point in the smoothed signal, Yj the jth point in the
original signal, and n is the total number of points in the signal. Similar smooth
operations can be constructed for any desired smooth width, m. Usually m is an odd
number. If the noise in the data is "white noise" (that is, evenly distributed over all
frequencies) and its standard deviation is s, then the standard deviation of the noise
remaining in the signal after the first pass of an unweighted sliding-average smooth will
be approximately s over the square root of m (s/sqrt(m)), where m is the smooth width.
The triangular smooth is like the rectangular smooth, above, except that it implements a
weighted smoothing function. For a 5-point smooth (m=5):
for j = 3 to n-2, and similarly for other smooth widths. This is equivalent to two passes of
a 3-point rectangular smooth. This smooth is more effective at reducing high-frequency
noise in the signal than the simpler rectangular smooth. Note that again in this case, the
width of the smooth m is an odd integer and the smooth coefficients are symmetrically
balanced around the central point, which is important point because it preserves the x-
axis position of peaks and other features in the signal. (This is especially critical for
analytical and spectroscopic applications because the peak positions are sometimes
important measurement objectives).
Note that we are assuming here that the x-axis intervals of the signal is uniform, that is,
that the difference between the x-axis values of adjacent points is the same throughout the
signal. This is also assumed in many of the other signal-processing techniques described
in this essay, and it is a very common (but not necessary) characteristic of signals that are
acquired by automated and computerized equipment.
Noise reduction. Smoothing usually reduces the noise in a signal. If the noise is "white"
(that is, evenly distributed over all frequencies) and its standard deviation is s, then the
standard deviation of the noise remaining in the signal after one pass of a triangular
smooth will be approximately s*0.8/sqrt(m), where m is the smooth width. Smoothing
operations can be applied more than once: that is, a previously-smoothed signal can be
smoothed again. In some cases this can be useful if there is a great deal of high-frequency
noise in the signal. However, the noise reduction for white noise is less less in each
successive smooth. For example, three passes of a rectangular smooth reduces white
noise by a factor of approximately s*0.7/sqrt(m), only a slight improvement over two
passes (triangular smooth).
Edge effects and the lost points problem. Note in the equations above that the 3-point
rectangular smooth is defined only for j = 2 to n-1. There is not enough data in the signal
to define a complete 3-point smooth for the first point in the signal (j = 1) or for the last
point (j = n) , because there are no data points before the first point or after the last point.
Similarly, a 5-point smooth is defined only for j = 3 to n-2, and therefore a smooth can
not be calculated for the first two points or for the last two points. In general, for an m-
width smooth, there will be (m-1)/2 points at the beginning of the signal and (m-1)/2
points at the end of the signal for which a complete m-width smooth can not be calcu-
lated. What to do? There are two approaches. One is to accept the loss of points and trim
off those points or replace them with zeros in the smooth signal. (That's the approach
taken in the figures in this paper). The other approach is to use progressively smaller
smooths at the ends of the signal, for example to use 2, 3, 5, 7... point smooths for signal
points 1, 2, 3,and 4..., and for points n, n-1, n-2, n-3..., respectively. The later approach
may be preferable if the edges of the signal contain critical information, but it increases
execution time.
Examples of smoothing. A simple example of smoothing is shown in Figure 4. The left
half of this signal is a noisy peak. The right half is the same peak after undergoing a
triangular smoothing algorithm. The noise is greatly reduced while the peak itself is
hardly changed. Smoothing increases the signal-to-noise ratio and allows the signal
characteristics (peak position, height, width, area, etc.) to be measured more accurately,
especially when computer-automated methods of locating and measuring peaks are being
employed.
Figure 4. The left half of this signal is a noisy peak. The right half is the same peak after
undergoing a smoothing algorithm. The noise is greatly reduced while the peak itself is
hardly changed, making it easier to measure the peak position, height, and width.
The larger the smooth width, the greater the noise reduction, but also the greater the
possibility that the signal will be distorted by the smoothing operation. The optimum
choice of smooth width depends upon the width and shape of the signal and the digiti-
zation interval. For peak-type signals, the critical factor is the smoothing ratio, the ratio
between the smooth width m and the number of points in the half-width of the peak. In
general, increasing the smoothing ratio improves the signal-to-noise ratio but causes a
reduction in amplitude and in increase in the bandwidth of the peak.
The figures above show examples of the effect of three different smooth widths on noisy
gaussian-shaped peaks. In the figure on the left, the peak has a (true) height of 2.0 and
there are 80 points in the half-width of the peak. The red line is the original unsmoothed
peak. The three superimposed green lines are the results of smoothing this peak with a
triangular smooth of width (from top to bottom) 7, 25, and 51 points. Because the peak
width is 80 points, the smooth ratios of these three smooths are 7/80 = 0.09, 25/80 = 0.31,
and 51/80 = 0.64, respectively. As the smooth width increases, the noise is progressively
reduced but the peak height also is reduced slightly. For the largest smooth, the peak
width is slightly increased. In the figure on the right, the original peak (in red) has a true
height of 1.0 and a half-width of 33 points. (It is also less noisy than the example on the
left.) The three superimposed green lines are the results of the same three triangular
smooths of width (from top to bottom) 7, 25, and 51 points. But because the peak width
in this case is only 33 points, the smooth ratios of these three smooths are larger: 0.21,
0.76, and 1.55, respectively. You can see that the peak distortion effect (reduction of peak
height and increase in peak width) is greater for the narrower peak because the smooth
ratios are higher. Smooth ratios of greater than 1.0 are seldom used because of excessive
peak distortion. Note that even in the worst case, the peak positions are not effected
(assuming that the original peaks were symmetrical and not overlapped by other peaks).
It's important to point out that smoothing results such as illustrated in the figure above
may be deceptively impressive because they employ a single sample of a noisy signal that
is smoothed to different degrees. This causes the viewer to underestimate the
contribution of low-frequency noise, which is hard to estimate visually because there are
so few low-frequency cycles in the signal record. This error can be remedied by taking a
large number of independent samples of noisy signal. This is illustrated in the Interactive
Smoothing module for Matlab, which includes a "Resample" control that swaps the noise
in the signal with different random noise samples, to demonstrate the low-frequency noise
that remains in the signal after smoothing. This gives a much more realistic impression
of the performance of smoothing
Optimization of smoothing. Which is the best smooth ratio? It depends on the purpose
of the peak measurement. If the objective of the measurement is to measure the true peak
height and width, then smooth ratios below 0.2 should be used. (In the example on the
left, the original peak (red line) has a peak height greater than the true value 2.0 because
of the noise, whereas the smoothed peak with a smooth ratio of 0.09 has a peak height
that is much closer to the correct value). But if the objective of the measurement is to
measure the peak position (x-axis value of the peak), much larger smooth ratios can be
employed if desired, because smoothing has no effect at all on the peak position of a
symmetrical peak (unless the increase in peak width is so much that it causes adjacent
peaks to overlap).
In quantitative analysis applications, the peak height reduction caused by smoothing is
not so important, because in most cases calibration is based on the signals of standard
solutions. If the same signal processing operations are applied to the samples and to the
standards, the peak height reduction of the standard signals will be exactly the same as
that of the sample signals and the effect will cancel out exactly. In such cases smooth
widths from 0.5 to 1.0 can be used if necessary to further improve the signal-to-noise
ratio. (The noise is reduced by approximately the square root of the smooth width). In
practical analytical chemistry, absolute peak height measurements are seldom required;
calibration against standard solutions is the rule. (Remember: the objective of a
quantitative analytical spectrophotometric procedure is not to measure absorbance but
rather to measure the concentration of the analyte.) It is very important, however, to apply
exactly the same signal processing steps to the standard signals as to the sample signals,
otherwise a large systematic error may result.
When should you smooth a signal? There are two reasons to smooth a signal: (1) for
cosmetic reasons, to prepare a nicer-looking graphic of a signal for visual inspection or
publication, and (2) if the signal will be subsequently processed by an algorithm that
would be adversely effected by the presence of too much high-frequency noise in the
signal, for example if the location of maxima, mimima, or inflection points in the signal
is to be automatically determined by detecting zero-crossings in derivatives of the signal.
But one common situation where you should not smooth signals is prior to least-squares
curve fitting, because all smoothing algorithms are at least slightly "lossy", entailing at
least some change in signal shape and amplitude. If these requirements conflict, care
must be used in the design of algorithms. For example, in a popular technique for peak
finding and measurement, peaks are located by detecting downward zero-crossings in the
smoothed first derivative, but the position, height, and width of each peak is determined
by least-squares curve-fitting of a segment of original unsmoothed data in the vicinity of
the zero-crossing. Thus, even if heavy smoothing is necessary to provide reliable
discrimination against noise peaks, the peak parameters extracted by curve fitting are not
distorted.
Video Demonstration. This 18-second, 3 MByte video (Smooth3.wmv) demonstrates the
effect of triangular smoothing on a single Gaussian peak with a peak height of 1.0 and
peak width of 200. The initial white noise amplitude is 0.3, giving an initial signal-to-
noise ratio of about 3.3. An attempt to measure the peak amplitude and peak width of the
noisy signal, shown at the bottom of the video, are initially seriously inaccurate because
of the noise. As the smooth width is increased, however, the signal-to-noise ratio
improves and the accuracy of the measurements of peak amplitude and peak width are
improved. However, above a smooth width of about 40 (smooth ratio 0.2), the smoothing
causes the peak to be shorter than 1.0 and wider than 200, even though the signal-to-noise
ratio continues to improve as the smooth width is increased. (This demonstration was
created in Matlab 6.5 using "Interactive Smoothing for Matlab" module).
SPECTRUM includes rectangular and triangular smoothing functions for any number of
points.
Smoothing in Matlab. The user-defined function fastsmooth implements all the types of
smooths discussed above. (If you are viewing this document on-line, you can ctrl-click on
this link to inspect the code). Fastsmooth is a Matlab function of the form
s=fastsmooth(a,w,type,edge). The argument "a" is the input signal vector; "w"
is the smooth width; "type" determines the smooth type: type=1 gives a rectangular
(sliding-average or boxcar); type=2 gives a triangular (equivalent to 2 passes of a sliding
average); type=3 gives a pseudo-Gaussian (equivalent to 3 passes of a sliding average).
The argument "edge" controls how the "edges" of the signal (the first w/2 points and the
last w/2 points) are handled. If edge=0, the edges are zero. (In this mode the elapsed time
is independent of the smooth width. This gives the fastest execution time). If edge=1, the
edges are smoothed with progressively smaller smooths the closer to the end. (In this
mode the execution time increases with increasing smooth widths). The smoothed signal
is returned as the vector "s". (You can leave off the last two input arguments:
fastsmooth(Y,w,type) smooths with edge=0 and fastsmooth(Y,w) smooths
with type=1 and edge=0). Compared to convolution-based smooth algorithms, fastsmooth
typically gives much faster execution times, especially for large smooth widths; it can
smooth a 1,000,000 point signal with a 1,000 point sliding average in less than 0.1
second.
Interactive Smoothing for Matlab is a Matlab module for interactive smoothing for time-
series signals, with sliders that allow you to adjust the smoothing parameters continuously
while observing the effect on your signal dynamically. Can be used with any smoothing
function. Includes a self-contained interactive demo of the effect of smoothing on peak
height, width, and signal-to-noise ratio. If
you have access to that software, you may
download the complete set of Matlab
Interactive Smoothing m-files,
InteractiveSmoothing.zip, (12 Kbytes) so
that you can experiment with all the
variables at will and try out this technique
on your own signal. Run SmoothSliderTest.m to see how it works.
Differentiation
The symbolic differentiation of functions is a topic that is introduced in all elementary
Calculus courses. The numerical differentiation of digitized signals is an application of
this concept that has many uses in analytical signal processing. The first derivative of a
signal is the rate of change of y with x, that is, dy/dx, which is interpreted as the slope of
the tangent to the signal at each point. Assuming that the x-interval between adjacent
points is constant, the simplest algorithm for computing a first derivative is:
(for 1< j <n-1).
where X'j and Y'j are the X and Y values of the jth point of the derivative, n = number of
points in the signal, and DX is the difference between the X values of adjacent data
points. A commonly used variation of this algorithm computes the average slope between
three adjacent points:
Applications of Differentiation
A simple example of the application of differentiation of experimental signals is shown in
Figure 5. This signal is typical of the type of signal recorded in amperometric titrations
and some kinds of thermal analysis and kinetic experiments: a series of straight line
segments of different slope. The objective is to determine how many segments there are,
where the breaks between then fall, and the slopes of each segment. This is difficult to do
from the raw data, because the slope differences are small and the resolution of the
computer screen display is limiting. The task is much simpler if the first derivative
(slope) of the signal is calculated (Figure 5, right). Each segment is now clearly seen as a
separate step whose height (y-axis value) is the slope. The y-axis now takes on the units
of dy/dx. Note that in this example the steps in the derivative signal are not completely
flat, indicating that the line segments in the original signal were not perfectly straight.
This is most likely due to random noise in the original signal. Although this noise was not
particularly evident in the original signal, it is more noticeable in the derivative
.
Figure 5. The signal on the left seems to be a more-or-less straight line, but its numerically
calculated derivative (dx/dy), plotted on the right, shows that the line actually has several
approximately straight-line segments with distinctly different slopes and with well-defined
breaks between each segment.
It is commonly observed that differentiation degrades signal-to-noise ratio, unless the
differentiation algorithm includes smoothing that is carefully optimized for each
application. Numerical algorithms for differentiation are as numerous as for smoothing
and must be carefully chosen to control signal-to-noise degradation.
A classic use of second differentiation in chemical analysis is in the location of endpoints
in potentiometric titration. In most titrations, the titration curve has a sigmoidal shape and
the endpoint is indicated by the inflection point, the point where the slope is maximum
and the curvature is zero. The first derivative of the titration curve will therefore exhibit a
maximum at the inflection point, and the second derivative will exhibit a zero-crossing at
that point. Maxima and zero crossings are usually much easier to locate precisely than
inflection points.
Figure 6 The signal on the left is the pH titration curve of a very weak acid with a strong
base, with volume in mL on the X-axis and pH on the Y-axis. The endpoint is the point of
greatest slope; this is also an inflection point, where the curvature of the signal is zero.
With a weak acid such as this, it is difficult to locate this point precisely from the original
titration curve. The endpoint is much more easily located in the second derivative, shown
on the right, as the the zero crossing.
Figure 6 shows a pH titration curve of a very weak acid with a strong base, with volume
in mL on the X-axis and pH on the Y-axis. The volumetric equivalence point (the
"theoretical" endpoint) is 20 mL. The endpoint is the point of greatest slope; this is also
an inflection point, where the curvature of the signal is zero. With a weak acid such as
this, it is difficult to locate this point precisely from the original titration curve. The
second derivative of the curve is shown in Window 2 on the right. The zero crossing of
the second derivative corresponds to the endpoint and is much more precisely
measurable. Note that in the second derivative plot, both the x-axis and the y-axis scales
have been expanded to show the zero crossing point more clearly. The dotted lines show
that the zero crossing falls at about 19.4 mL, close to the theoretical value of 20 mL.
Derivative Spectroscopy
In spectroscopy, the differentiation of spectra is a widely used technique, particularly in
infra-red, u.v.-visible absorption, fluorescence, and reflectance spectrophotometry,
referred to as derivative spectroscopy. Derivative methods have been used in analytical
spectroscopy for three main purposes: (a) spectral discrimination, as a qualitative
fingerprinting technique to accentuate small structural differences between nearly
identical spectra; (b) spectral resolution enhancement, as a technique for increasing the
apparent resolution of overlapping spectral bands in order to more easily determine the
number of bands and their wavelengths; (c) quantitative analysis, as a technique for the
correction for irrelevant background absorption and as a way to facilitate multicomponent
analysis. (Because differentiation is a linear technique, the amplitude of a derivative is
proportional to the amplitude of the original signal, which allows quantitative analysis
applications employing any of the standard calibration techniques). Most commercial
spectrophotometers now have built-in derivative capability. Some instruments are
designed to measure the spectral derivatives optically, by means of dual wavelength or
wavelength modulation designs.
Because of the fact that the amplitude of the nth derivative of a peak-shaped signal is
inversely proportional to the nth power of the width of the peak, differentiation may be
employed as a general way to discriminate against broad spectral features in favor of
narrow components. This is the basis for the application of differentiation as a method of
correction for background signals in quantitative spectrophotometric analysis. Very often
in the practical applications of spectrophotometry to the analysis of complex samples, the
spectral bands of the analyte (i.e. the compound to be measured) are superimposed on a
broad, gradually curved background. Background of this type can be reduced by
differentiation.
This is illustrated by the figure on the left, which shows a simulated UV spectrum
(absorbance vs wavelength in nm), with the green curve representing the spectrum of the
pure analyte and the red line representing the spectrum of a mixture containing the
analyte plus other compounds that give rise to the large sloping background absorption.
The first derivatives of these two signals are shown in the center; you can see that the
difference between the pure analyte spectrum (green) and the mixture spectrum (red) is
reduced. This effect is considerably enhanced in the second derivative, shown on the
right. In this case the spectra of the pure analyte and of the mixture are almost identical.
In order for this technique to work, it is necessary that the background absorption be
broader (that is, have lower curvature) than the analyte spectral peak, but this turns out to
be a rather common situation. Because of their greater discrimination against broad
background, second (and sometimes even higher-order) derivatives are often used for
such purposes.
It is sometimes (mistakenly) said that differentiation "increases the sensitivity" of
analysis. You can see how it would be tempting to say something like that by inspecting
the three figures above; it does seems that the signal amplitude of the derivatives is
greater (at least graphically) than that of the original analyte signal. However, it is not
valid to compare the amplitudes of signals and their derivatives because they have
different units. The units of the original spectrum are absorbance; the units of the first
derivative are absorbance per nm, and the the units of the second derivative are
absorbance per nm2. You can't compare absorbance to absorbance per nm any more than
you can compare miles to miles per hour. (It's meaningless, for instance, to say that 30
miles per hour is greater than 20 miles.) You can, however, compare the signal-to-
background ratio and the signal-to-noise ratio. For example, in the above example, it
would be valid to say that the signal-to-background ratio is increased in the derivatives.
Trace Analysis
One of the widest uses of the derivative signal processing technique in practical analytical
work is in the measurement of small amounts of substances in the presence of large
amounts of potentially interfering materials. In such applications it is common that the
analytical signals are weak, noisy, and superimposed on large background signals.
Measurement precision is often degraded by sample-to-sample baseline shifts due to non-
specific broadband interfering absorption, non-reproducible cuvette positioning, dirt or
fingerprints on the cuvette walls, imperfect cuvette transmission matching, and solution
turbidity. Baseline shifts from these sources are usually either wavelength-independent
(light blockage caused by bubbles or large suspended particles) or exhibit a weak
wavelength dependence (small-particle turbidity). Therefore it can be expected that
differentiation will in general help to discriminate relevant absorption from these sources
of baseline shift. An obvious benefit of the suppression of broad background by
differentiation is that variations in the background amplitude from sample to sample are
also reduced. This can result in improved precision or measurement in many instances,
especially when the analyte signal is small compared to the background and if there is a
lot of uncontrolled variability in the background. An example of the improved ability to
detect trace component in the presence of strong background interference is shown in
Figure 7.
Figure 7. The spectrum on the left shows a weak shoulder near the center due to a small
concentration of the substance that is to be measured (e.g. the active ingredient in a
pharmaceutical preparation). It is difficult to measure the intensity of this peak because
it is obscured by the strong background caused by other substances in the sample. The
fourth derivative of this spectrum is shown on the right. The background has been almost
completely suppressed and the analyte peak now stands out clearly, facilitating
measurement.
The spectrum on the left shows a weak shoulder near the center due to the analyte. The
signal-to-noise ratio is very good in this spectrum, but in spite of that the broad, sloping
background obscures the peak and makes quantitative measurement very difficult. The
fourth derivative of this spectrum is shown on the right. The background has been almost
completely suppressed and the analyte peak now stands out clearly, facilitating
measurement. An even more dramatic case is shown in Figure 8. This is essentially the
same spectrum as in Figure 7, except that the concentration of the analyte is lower. The
question is: is there a detectable amount of analyte in this spectrum? This is quite
impossible to say from the normal spectrum, but inspection of the fourth derivative (right)
shows that the answer is yes. Some noise is clearly evident here, but nevertheless the
signal-to-noise ratio is sufficiently good for a reasonable quantitative measurement.
Figure 8. Similar to Figure 7, but in the case the peak is so weak that it can not even be
seen in the spectrum on the left. The fourth derivative (right) shows that a peak is still
there, but much reduced in amplitude (note the smaller y-axis scale).
This use of signal differentiation has become widely used in quantitative spectroscopy,
particularly for quality control in the pharmaceutical industry. In that application the
analyte would typically be the active ingredient in a pharmaceutical preparation and the
background interferences might arise from the presence of fillers, emulsifiers, flavoring
or coloring agents, buffers, stabilizers, or other excipients. Of course, in trace analysis
applications, care must be taken to optimize signal-to-noise ratio of the instrument as
much as possible.
The routine is available in three different versions: (1) the basic findpeaks function
(findpeaks.m); (2) an interactive keypress-operated function (ipeak.m) for adjusting the
peak detection criteria in real-time to optimize for any particular peak type; and (3)
a script using mouse-controlled sliders for interactive control. These are all detailed
below. Click here to download the ZIP file "Peakfinder.zip" that includes supporting
functions, several self-contained demos to show how it works, and two interactive
versions. You can also download it from the Matlab File Exchange.
Resolution enhancement
Figure 9 shows a spectrum that consists of several poorly-resolved (that is, partly
overlapping) bands. The extensive overlap of the bands makes the accurate measurement
of their intensities and positions impossible, even though the signal-to-noise ratio is very
good. Things would be easier if the bands were more completely resolved, that is, if the
bands were narrower.
Figure 9. A resolution enhancement algorithm has been applied to the signal on the
left to artificially improve the apparent resolution of the peaks. In the resulting signal,
right, the component bands are narrowed so that the intensities and positions can be
measured.
Here use can be made of resolution enhancement algorithms to artificially improve the
apparent resolution of the peaks. One of the simplest such algorithms is based on the
weighted sum of the original signal and the negative of its second derivative.
where Rj is the resolution-enhanced signal, Y is the original signal, Y'' is the second
derivative of Y, and k is a user-selected weighting factor. It is left to the user to select the
weighting factor k which gives the best trade-off between resolution enhancement, signal-
to-noise degradation, and baseline undershoot. The optimum choice depends upon the
width, shape, and digitization interval of the signal. (As a starting point, a reasonable
value for k is w2/25 for peaks of Gaussian shape, or w2/6 for peaks of Lorentzian shape,
where w is the number of data points in the half-width of the component peaks).
The result of the application of this algorithm is shown on the right in Figure 9. The
component bands have been artificially narrowed so that the intensities and positions can
be measured. However, the signal-to-noise ratio is degraded.
Here's how it works. The figure shows, in Window 1, a computer-generated peak (with a
Lorentzian shape) in red, superimposed on the negative of its second derivative in green).
The second derivative is amplified (by multiplying it by an adjustable constant) so that
the negative sides of the inverted second derivative (from approximately X = 0 to 100 and
from X = 150 to 250) are a mirror image of the sides of the original peak over those
regions. In this way, when the original peak is added to the inverted second derivative, the
two signals will approximately cancel out in the two side regions but will reinforce each
other in the central region (from X = 100 to 150). The result, shown in Window 2, is a
substantial (about 50%) reduction in the width, and an increase in height, of the peak.
This works best with Lorentzian-shaped peaks; with Gaussian-shaped peaks, the
resolution enhancement is less dramatic (only about 20%). An interesting property of this
procedure is that it does not change the total peak area (that is, the area under the peak)
because the total area under the curve of the derivative of a peak-shaped signal is zero
(the area under the negatives lobes cancels the area under the positive lobes).
Note: Another technique that can increase the resolution of overlapping peaks is
deconvolution, which is applicable when the broadening function responsible for the
overlap of the peaks is known. Deconvolution of the broadening function from the
broadened peaks is in principle capable of extracting the underlying peaks shapes,
whereas this resolution enhancement technique can not be expected to do that.
SPECTRUM includes this simple resolution-enhancement algorithm, with adjustable weighting
factor and derivative smoothing width.
Resolution enhancement in Matlab. The user-defined Matlab function enhance.m (ctrl-click on
this link to inspect the code) uses a slightly more advanced algorithm that extends the above
approach by adding in a small amount of the 4th derivative of the signal:
R = Y - k2Y'' + k4Y''''
Figure 10. The signal on the left (x = time; y = voltage), which was expected to contain a
single peak, is clearly very noisy. The power spectrum of this signal (x-axis = frequency
in Hz) shows a strong component at 60 Hz, suggesting that much of the noise is caused
by stray pick-up from the 60 Hz power line. The smaller peak at 120 Hz (the second
harmonic of 60 Hz) probably comes from the same source.
A signal with n points gives a power spectrum with only (n/2)+1 points. The x-axis is the
harmonic number. The first point (x=0) is the zero-frequency (constant) component. The
second point (x=1) corresponds to the fundamental frequency, the next point to twice the
fundamental frequency, etc. An example of a practical application of the use of the power
spectrum as a diagnostic tool is shown in Figure 10.
In the example shown here, the signal is a time-series signal with time as the independent
variable. More generally, it is also possible to compute the Fourier transform and power
spectrum of any signal, such as an optical spectrum, where the independent variable
might be wavelength or wavenumber, or an electrochemical signal, where the
independent variable might be volts. In such cases the units of the x-axis of the power
spectrum are simply the reciprocal of the units of the x-axis of the original signal (e.g.
nm-1 for a signal whose x-axis is in nm).
SPECTRUM includes a power spectrum function, as well as forward and reverse Fourier
transformation.
Matlab has built-in functions for computing the Fourier transform (FFT and IFFT) and
the power spectrum (powerspectrum(f,T)).
Figure 11. Convolution is used here to determine how the atomic line spectrum in
Window 1 (top left) will appear when scanned with a spectrometer whose slit function
(spectral resolution) is described by the Gaussian function in Window 2 (top right). The
Gaussian function has already been rotated so that its maximum falls at x=0. The
resulting convoluted spectrum (bottom center) shows that the two lines near x=110 and
120 will not be resolved but the line at x=40 will be partly resolved.
Figure 12. Deconvolution is used here to remove the distorting influence of an exponential
tailing response function from a recorded signal (Window 1, left) that is the result of an
unavoidable RC low-pass filter action in the electronics. The response function (Window 2,
center) is usually either calculated on the basis of some theoretical model or is measured
experimentally as the output signal produced by applying an impulse (delta) function to the input
of the system. The response function, with its maximum at x=0, is deconvoluted from the original
signal . The result (right) shows a closer approximation to the real shape of the peaks; however,
the signal-to-noise ratio is unavoidably degraded.
Figure 13. A different application of the deconvolution function is to reveal the nature of an
unknown data transformation function that has been applied to a data set by the measurement
instrument itself. In this example, Window 1 (top left) is a uv-visible absorption spectrum
recorded from a commercial photodiode array spectrometer (X-axis: nanometers; Y-axis:
milliabsorbance). Window 2 (top right) is the first derivative of this spectrum produced by an
(unknown) algorithm in the software supplied with the spectrometer. The signal in the bottom
left is the result of deconvoluting the derivative spectrum (top right) from the original spectrum
(top left). This therefore must be the convolution function used by the differentiation algorithm in
the spectrometer's software. Rotating and expanding it on the x-axis makes the function easier to
see (bottom right). Expressed in terms of the smallest whole numbers, the convolution series is
seen to be +2, +1, 0, -1, -2. This simple example of "reverse engineering" would make it easier
to compare results from other instruments or to duplicate these result on other equipment.
When applying deconvolution to experimental data, to remove the effect of a known
broadening or low-pass filter operator caused by the experimental system, a very serious
signal-to-noise degradation commonly occurs. Any noise added to the signal by the
system after the broadening or low-pass filter operator will be greatly amplified when the
Fourier transform of the signal is divided by the Fourier transform of the broadening
operator, because the high frequency components of the broadening operator (the
denominator in the division of the Fourier transforms) are typically very small, resulting
in a great amplification of high frequency noise in the resulting deconvoluted signal. This
can be controlled but not completely eliminated by smoothing and by constraining the
deconvolution to a frequency region where the signal has a sufficiently high signal-to-
noise ratio.
Note: The term "deconvolution" is sometimes also used for the process of resolving or
decomposing a set of overlapping peaks into their separate components by the technique
of iterative least-squares curve fitting of a putative peak model to the data set. The
process is actually conceptually distinct from deconvolution, because in deconvolution
the underlying peak shape is unknown but the broadening function is assumed to be
known; whereas in iterative least-squares curve fitting the underlying peak shape is
assumed to be known but the broadening function is unknown.
SPECTRUM includes a deconvolution function. Matlab has built-in function for deconvolution:
deconv.
Fourier filter
The Fourier filter is a type of filtering or smoothing function that is based on the
frequency components of a signal. It works by taking the Fourier transform of the signal,
then cutting off all frequencies above a user-specified limit, then inverse transforming the
result. The assumption is made here that the frequency components of the signal fall
predominantly at low frequencies and those of the noise fall predominantly at high
frequencies. The user tries to find a cut-off frequency that will allow most of the noise to
be eliminated while not distorting the signal significantly. An example of the application
of the Fourier filter is given in Figure 14.
Figure 14. The signal at the far left seems to be only random noise, but its power
spectrum (Window 2, second from left) shows that high-frequency components dominate
the signal. The power spectrum is expanded in the X and Y directions to show more
clearly the low-frequency region (Window 1, right). Working on the hypothesis that the
components above the 20th harmonic are noise, the Fourier filter function can be used to
delete the higher harmonics and to reconstruct the signal from the first 20 harmonics.
The result (far right) shows the signal contains two bands at about x=200 and x=300
that are totally obscured by noise in the original signal.
SPECTRUM includes a simple Fourier low-pass filter function with adjustable harmonic cut-off.
The user-defined Matlab function FouFilter.m is a more flexible Fourier filter that can serve as a
lowpass, highpass, bandpass, or bandreject (notch) filter with variable cut-off rate. Has the form
ry=FouFilter(y,samplingtime,centerfrequency,frequencywidth,shape,mode)
where y is the time-series signal vector, 'samplingtime' is the total duration of sampled signal in
sec, millisec, or microsec; 'centerfrequency' and 'frequencywidth' are the center frequency and
width of the filter in Hz, KHz, or MHz, respectively; 'Shape' determines the sharpness of the cut-
off. If shape = 1, the filter is Gaussian; as shape increases the filter shape becomes more and
more rectangular. Set mode = 0 for band-pass filter, mode = 1 for band-reject (notch) filter.
FouFilter returns the filtered signal in ry.
The Interactive Fourier Filter for Matlab function has sliders that
allow you to adjust the Fourier filter parameters (center frequency,
filter width, and cut-off rate) while observing the effect on the signal
output dynamically. It can handle signals of virtually any length,
limited only by the memory in your computer. Requires Matlab 6.5.
Figure 15. Peak area measurement for overlapping peaks, using the perpendicular drop
method.
The classical way to handle this problem is to draw two vertical lines from the left and
right bounds of the peak down to the x-axis and then to measure the total area bounded by
the signal curve, the x-axis (y=0 line), and the two vertical lines. This is often called the
the perpendicular drop method, and it is an easy task for a computer, although very
tedious to do by hand. The idea is illustrated for the second peak from the left in Figure
15. The left and right bounds of the peak are usually taken as the valleys (minima)
between the peaks. Using this method it is possible to estimate the area of the second
peak in this example to an accuracy of about 0.3% and the second and third peaks to an
accuracy of better than 4%, despite the poor resolution.
Math details
The least-squares best fit for an x,y data set can be computed using only basic arithmetic.
Here are the relevant equations for computing the slope and intercept of the first-order
best-fit equation, y = intercept + slope*x, as well as the coefficient of determination,
"R2", which is an indicator of the "goodness of fit". ( R2 is 1.0000 if the fit is perfect and
less than that if the fit is imperfect):
n = number of x,y data points
sumx = Σx
sumy = Σy
sumxy = Σx*y
sumx2 = Σx*x
meanx = sumx / n
meany = sumy / n
slope = (n*sumxy - sumx*sumy) / (n*sumx2 - sumx*sumx
intercept = meany-(slope*meanx)
ssy = Σ(y-meany)^2
ssr = Σ(y-intercept-slope*x)^2
R2 = 1-(ssr/ssy)
Popular spreadsheets have facilities for computing polynomial least-squares curve fits.
For example, the LINEST function in both Excel and OpenOffice Calc can be used to
compute polynomial and other curvilinear least-squares fits. For some examples of
applications to analytical chemistry, see Calibration Curve Fitting Methods in Absorption
Spectroscopy and Error propagation in Analytical Calibration.
You can also download the spreadsheets pictured above, in OpenOffice Calc format, that
automate the computation of those equations and also plot the data and the best-fit line,
requiring only that you type in (or paste in) the x-y data. There is one spreadsheet for
linear fits (http://terpconnect.umd.edu/~toh/spectrum/LeastSquares.odt) and also a
version for quadratic (parabolic) fits
(http://terpconnect.umd.edu/~toh/spectrum/QuadraticLeastSquares.ods). For the
application to analytical calibration, there are specific versions of these spreadsheets that
also calculate the concentrations of the unknowns
(http://terpconnect.umd.edu/~toh/models/CalibrationCurve.html).
SPECTRUM includes least-squares curve fitting for polynomials of order 1 through 5,
plus exponential, logarithmic, and power relationships.
Matlab has simple built-in functions for least-squares curve fitting: polyfit and polyval.
For example, if you have a set of x,y data points in the vectors "x" and "y", then the
coefficients for the least-squares fit are given by coef=polyfit(x,y,n), where "n"
is the order of the polynomial fit: n = 1 for a straight-line fit, 2 for a quadratic (parabola)
fit, etc. For a straight-line fit (n=1), coef(1) is the slope ("b") and coef(2) is the
intercept ("a"). For a quadratic fit (n=2), coef(1) is the x2 term ("c"), coef(2) is the x
term ("b") and coef(3) is the constant term ("a"). The fit equation can be evaluated
using the function polyval, for example fity=polyval(coef,x). This works for
any order of polynomial fit ("n"). You can plot the data and the fitted equation together
using the plot function: plot(x,y,'ob',x,polyval(coef,x),'-r'), which
plots the data as blue circles and the fitted equation as a red line. You can plot the
residuals by writing plot(x,y-polyval(coef,x)). (When the number of data
points is small, you can get a smoother plot of the fitted equation, evaluated at more
finely-divided values of x, by defining xx=linspace(min(x),max(x)); and then
using xx rather than x to evaluate and plot the fit:
plot(x,y,'ob',xx,polyval(coef,xx),'-r')).
The graph on the left was generated by the user-defined
function plotfit(x,y,polyorder), which accepts the data in the
vectors "x" and "y", fits it to a polynomial of order
"polyorder", plots the data and the fit, and displays the fit
coefficients and the goodness-of-fit measure R2 in the upper
left corner of the graph. R2 is always between zero and one:
it is 1.0 if the fit is perfect and zero if there is no systematic
relation at all between x and y. (Ctrl-click to view this
function).
and so on for all wavelengths. This set of linear equations is written compactly in matrix
form:
A = eC
where A is the w-length vector of measured signals (i.e. the signal spectrum) of the
mixture, e is the n x w rectangular matrix of the known e-values for each of the n species
at each of the w wavelengths, and C is the n-length vector of concentrations of all the
species.
If you have a sample solution containing unknown amounts of those species, then
you measure its spectrum A and seek to calculate the concentration vector C. In order to
solve the above matrix equation for C, the number of wavelengths w must be equal to or
greater than the number of species n. If w = n, then we have a system of n equations in n
unknowns which can be solved by pre-multiplying both sides of the equation by e-1, the
matrix inverse of e, and using the property that any matrix times its inverse is unity:
C=e A
-1
Because real experimental spectra are subject to random noise (e.g. photon noise and
detector noise), the solution will be more precise if signals at a larger number of
wavelengths are used, i.e. if w > n. But then the equation can not be solved by matrix
inversion, because the e matrix is a w x n matrix and a matrix inverse exists only for
square matrices. A solution can be obtained in this case by pre-multiplying both sides of
the equation by the expression (eTe)-1eT:
(e e) e A = (e e) e eC = (e e) (e e)C
T -1 T T -1 T T -1 T
T -1 T
But the quantity (e e) (e e) is a matrix times its inverse and is therefore unity. Thus:
C = (e e ) e A
T -1 T
practical applications, n is typically only 2 to 5, this is not a very big matrix to invert, no
matter how many wavelengths are used. In general, the more wavelengths are used the
more effectively the random noise will be averaged out (although it won’t help to use
wavelengths in spectral regions where none of the components produce analytical
signals). The determination of the optimum wavelength region must usually be
determined empirically.
Two extensions of the CLS method are commonly made. First, in order to account
for baseline shift caused by drift, background, and light scattering, a column of 1s is
added to the e matrix. This has the effect of introducing into the solution an additional
component with a flat spectrum; this is referred to as “background correction”. Second,
in order to account for the fact that the precision of measurement may vary with
wavelength, it is common to perform a weighted least squares solution that de-
emphasizes wavelength regions where precision is poor:
C = (e V e ) e V A
T -1 -1 T -1
The most general way of fitting any model to a set of data is the iterative method, a kind
of "trial and error" procedure in which the parameters of the model are adjusted in a
systematic fashion until the equation fits the data as close as required. This sounds like a
brute-force approach, and it's true that, in the days before computers, this method was
only grudgingly applied. But its great generality, coupled with advances in computer
speed and algorithm efficiency, means that iterative methods are more widely used now
than ever before.
Iterative methods proceed in the following general way: (1) the operator selects a model
for the data; (2) first guesses of all the non-linear parameters are made; (3) a computer
program computes the model and compares it to the data set, calculating a fitting error;
(4) if the fitting error is greater that the required fitting accuracy, the program
systematically changes one or more of the parameters and loops back around to step 3.
This continues until the fitting error is less than the specified error. One popular
technique for doing this is called the Nelder-Mead Modified Simplex. This is essentially a
way of organizing and optimizing the changes in parameters (step 4, above) to shorten the
time required to fit the function to the required degree of accuracy. With contemporary
personal computers, the entire process typically takes only a fraction of a second.
The main difficulty of the interactive methods is that they sometime fail to converge at an
optimum solution in difficult cases. The standard approach to handle this is to restart the
algorithm with another set of first guesses. Iterative curve fitting also takes longer than
linear regression - with typical modern personal computers, an iterative fit might take
fractions of a second where a regression would take fractions of a millisecond. Still, this
is fast enough for many purposes.
Note: the term "spectral deconvolution" or "band deconvolution" is often used to refer to
this technique.
Matlab has a convenient and efficient function called FMINSEARCH that uses the
Nelder-Mead method. It works in conjunction with a user-defined "fitting function" that
computes the model, compares it to the data, and returns the fitting error. For example,
writing options = optimset('TolX',0.1);
parameter=FMINSEARCH('fitfunction',start,options,x,y) performs
an interative fit of the data in the vectors x,y to a model described in a previously-created
function called fitfunction, using the first guesses in the vector start and stopping
at the tolerance defined by the optimset function. The parameters of the fit are returned in
the vector "parameters", in the same order that they appear in "start".
A simple example is fitting the blackbody equation to the spectrum of an incandescent
body for the purpose of estimating its color temperature. In this case there is only one
nonlinear parameter, temperature. The script BlackbodyDataFit.m demonstrates the
technique, placing the experimentally measured spectrum in the vectors "wavelength" and
"radiance" and then calling FMINSEARCH with the fitting function fitblackbody.m.
Another application is demonstrated by Matlab's built-in demo fitdemo.m and its fitting
function fitfun.m, which models the sum of two exponential decays. (To see this, just
type "fitdemo" in the Matlab command window).
The custom demonstration script Demofitgauss.m demonstrates fitting a Gaussian
function to a set of data, using the fitting function fitgauss2.m. In this case there are two
non-linear parameters, the peak position and the peak width (the peak height is a linear
parameter and is determined by regression in line 9 of the fitting function fitgauss2.m and
is returned in the global variable "c"). This is easily extended to fitting two overlapping
Gaussians in Demofitgauss2.m (shown on the left) using the same fitting function (which
easily adapts to any number of peaks, depending on the length of the first-guess "start"
vector). All these functions call the user-defined peak shape function gaussian.m. Similar
procedures can be defined for other peak shapes simply by calling the corresponding peak
shape function, such as lorentzian.m. (Note: in order for scripts like Demofitgauss.m or
Demofitgauss2.m to work on your version
of Matlab, all the functions that they call
must be loaded into Matlab beforehand, in
this case fitgauss2.m and gaussian.m).
You can create your own fitting functions
for any purpose; they are not limited to
single algebraic expressions, but can be
arbitrary complex multi-step algorithms.
For example, in this application in
absorption spectroscopy, a model of the
instrumentally-broadened transmission
spectrum is fit to the observed
transmission data, in order to extend the dynamic range and calibration linearity beyond
the normal limits, using a fitting function that performs Fourier convolution of the
transmission spectrum with the slit function of the spectrometer. Note: you can right-
click on any of the m-file links above and select Save Link As... to download them to
your computer for use within Matlab.
(The fit results are, from left to right, peak number, peak position, peak height, peak
width, and peak area).
But this same peak, when fit with a Logistic model, gives a fitting error of 1.4% and
height and width errors or 3% and 6%, respectively:
>> [FitResults,MeanFitError]=peakfit([x' y'],5,10,1,3)
FitResults =
1 5.0002
0.96652 1.762
1.7419
MeanFitError =
1.4095
When fit with a Lorentzian model (shown on
the right), this peak gives a 6% fitting error
and height and width errors of 8% and 20%,
respectively.
>>
[FitResults,MeanFitError]=peakfit([x' y'],5,10,1,2)
FitResults =
1 5 1.0876 1.3139 2.0579
MeanFitError =
5.7893
So clearly the larger the fitting errors, the larger are the parameter errors, but the
parameter errors are not equal to the fitting error (that would just be too easy). Also,
clearly the peak width and area are the parameters most susceptible to errors. The
peak positions, as you can see here, are measured accurately, even if the model is way
wrong, as long as the peak is symmetrical and not highly overlapping with other
peaks . (To make matters worse, the parameters errors depend not just on the fitting
error but also on the data density (number of data points in the width of each peak)
and on the extent of peak overlap. It's complicated.)
Another source of model error occurs if you have the wrong number of peaks in your
model. For example, if the data actually has two peaks but you try to fit it with only
one peak, the peak parameters of the peaks that are fit may not yield accurate
parameter measurements. In the example shown on the right, the signal looks like one
peak, but is actually two peaks at x=4 and x=5 with peaks heights of 1.000 and widths
of 1.665. If you fit this signal with a single-peak model, you get:
>> x=[0:.1:10];y=exp(-(x-4).^2)+exp(-(x-5).^2);
>> [FitResults,MeanFitError]=peakfit([x' y'],5,10,1,1)
FitResults =
1 4.5 1.5887 2.1182 3.5823
MeanFitError =
0.97913
But a fit with two peaks (shown on the right) is
much better and yields accurate parameters for
both peaks:
>>
[FitResults,MeanFitError]=peakfit([x' y'],5,10,2,1)
FitResults =
1 3.9995 0.99931 1.6645 1.7707
2 4.9996 1.0009 1.6651 1.7742
MeanFitError =
0.0010009
Model errors result in a "wavy" structure in the residual plot (lower panel of the
figure), rather than the random scatter of points that would ideally be observed if a
peak is accurately fit, save for the random noise. (This is one good reason for not
smoothing your data before fitting).
b. Background correction errors. The peaks that are measured in most
measurement instruments are often superimposed on a non-specific background.
Ordinarily the experiment protocol is designed to minimize the background or to
compensate for the background, for example by subtracting the signal from a "blank"
from the signal from an actual specimen. But even so there is often a residual
background that can not be eliminated completely experimentally. The origin and
shape of that background depends on the specific measurement method, but often this
background is a broad, tilted, or curved shape, and the peaks are comparatively
narrow features superimposed on that background. There are various sophisticated
methods described in the literature for estimating and subtracting the background in
such cases. The simplest assumption, which is used by the Interactive Peak Fitter, is
that the background is locally linear, that is, can be approximated as a straight line in
the local region of group of peaks being fit together. When the autozero mode of the
ipf.m function is turned on (T key), a straight-line baseline connecting the two ends of
the signal segment in the upper panel will be automatically subtracted as the pan and
zoom controls are used to isolate the group of overlapping peaks to be fit.
Example of an experimental chromatographic signal. From left to right, (1) Raw data
with peaks superimposed on baseline; (2) Baseline automatically subtracted by the
autozero mode in ipf.m; (3) Fit with a three-peak Gaussian model.
c. Random noise in the signal. Any experimental signal has a certain amount of
random noise, which means that the individual data points scatter randomly above
and below their mean values. The assumption is ordinarily made that the scatter is
equally above and below the true signal, so that the long-term average approaches the
true mean value; the noise "averages to zero" as it is often said. The practical
problem is that any given recording of the signal contains only one finite sample of
the noise. If another recording of the signal is made, it will contain another
independent sample of the noise. These noise sample are not infinitely long and
therefore do not represent the true long-term nature of the noise. This presents two
problems: (1) an individual sample of the noise will not "average to zero" and thus
the parameters of the best-fit model will not necessarily equal the true values, and (2)
the magnitude of the noise during one sample might not be typical; the noise might
have been randomly greater or smaller than average during that time. This means that
the mathematical "propagation of error" methods, which seek to estimate the likely
error in the model parameters based on the noise in the signal, will be subject to error
(underestimating the error if the noise happens to be lower than average and
overestimating the errors if the noise happens to be larger than average).
A better way to estimate the parameter errors is to record multiple samples of the
signal, fit each of those separately, compute the models parameters from each fit, and
calculate the standard error of each parameter. This is exactly what the script
DemoPeakfit.m (which requires the peakfit.m function) does for simulated noisy peak
signals such as those illustrated below. It's easy to demonstrate that, as expected, the
average fitting error precision and the relative standard deviation of the parameters
increases directly with the random noise level in the signal. But the precision and the
accuracy of the measured parameters also depend on which parameter it is (peak
positions are always measured more accurately than their heights, widths, and areas)
and on the peak height and extent of peak overlap (the two left-most peaks in this
example are not only weaker but also more overlapped that the right-most peak, and
therefore exhibit poorer parameter measurements). In this example, the fitting error is
1.6% and the percent relative standard deviation of the parameters ranges from 0.05%
for the peak position of the largest peak to 12% for the peak area of the smallest peak.
The parameter errors depend not only on the characteristics of the peaks in question,
but also upon other peaks that are overlapping it. From left to right: (1) a single
peak at x=100 with a peak height of 1.0 and width of 30 is fit with a Gaussian model,
yielding a relative fit error of 4.9% and relative standard deviation of peak position,
height, and width of 0.2%, 0.95%, and 1.5% , respectively. (2) The same peak, with
the same noise level but with another peak overlapping it, reduces the relative fit
error to 2.4% (because the addition if the second peak increases overall signal
amplitude), but increases the relative standard deviation of peak position, height, and
width to 0.84%, 5%, and 4% - a seemingly better fit, but with poorer precision for the
first peak. (3) The addition of a third peak further reduces the fit error to 1.6% , but
the relative standard deviation of peak position, height, and width of the first peak
are still 0.8%, 5.8%, and 3.64%, about the same as with two peaks, because the third
peak does not overlap the first one significantly.
One way to reduce the effect of noise is to take more data. If the experiment makes it
possible to reduce the x-axis interval between points, or to take multiple readings at
each x-axis values, then the resulting increase in the number of data points in each
peak should help reduce the effect of noise. As a demonstration, using the script
DemoPeakfit.m to create a simulated overlapping peak signal like that shown above
right, it's possible to change the interval between x values and thus the total number
of data points in the signal. With a noise level of 1% and 75 points in the signal, the
fitting error is 0.35 and the average parameter error is 0.8%. With 300 points in the
signal and the same noise level, the fitting error is essentially the same, but the
average parameter error drops to 0.4%, suggesting that the accuracy of the measured
parameters varies inversely with the square root of the number of data points in the
peaks.
d. Iterative fitting errors. Unlike
multiple linear regression curve
fitting, iterative methods may not
converge on the exact same model
parameters each time the fit is
repeated with slightly different
starting values (first guesses). The
Interactive Peak Fitter makes it easy to
test this, because it uses slightly
different starting values each time the
signal is fit (by pressing the F key in
ipf.m, for example). Even better, by
pressing the X key, the ipf.m function
silently computes 10 fits with different starting values and takes the one with the
lowest fitting error. A basic assumption of any curve fitting operation is that the
fitting error (the RMS difference between the model and the data) is minimized, the
parameter errors (the difference between the actual parameters and the parameters of
the best-fit model) will also be minimized. This is generally a good assumption, as
demonstrated by the graph to the right, which shows typical percent parameters errors
as a function of fitting error for the left-most peak in one sample of the simulated
signal generated by DemoPeakfit.m (shown in the previous section). The variability
of the fitting error here is caused by random small variations in the first guesses,
rather than by random noise in the signal. In many practical cases there is enough
random noise in the signals that the iterative fitting errors within one sample of the
signal are small compared to the random noise errors between samples.
Remember that the variability in measured peak parameters from fit to fit of a single
sample of the signal is not a good estimate of the precision or accuracy of those
parameters, for the simple reason that those results represent only one sample of the
signal, noise, and background. The sample-to-sample variations are likely to be much
greater than the within-sample variations due to the iterative curve fitting. (In this
case, a "sample" is a single recording of signal).
So, to sum up, we can make the following observations about the accuracy of model
parameters: (1) the parameter errors are directly proportional to the noise in the data and
to the fitting error (but is not equal to the fitting error); (2) the errors are typically least for
peak position and worse for peak width and area; (3) the errors depend on the data density
(number of independent data points in the width of each peak) and on the extent of peak
overlap (the parameters of isolated peaks are easier to measure than highly overlapped
peaks).
Features
• Reads one- or two- column (y-only or x-y) text data tables with either tab or space
separators
• Displays fast, labeled plots in standard resizable windows with full x- and y-axis
scale expansion and a mouse- controlled measurement cursor
• Addition, subtraction, multiplication, and division of two signals
• Two kinds of smoothing.
• Three kinds of differentiation
• Integration
• Resolution enhancement
• Interpolation
• Fused peak area measurement by perpendicular drop or tangent skim methods,
with mouse-controlled setting of start and stop points
• Fourier transformation
• Power spectra
• Fourier filtering
• Convolution and deconvolution
• Cross- and auto-correlation
• Built-in signal simulator with Gaussian and Lorentzian bands, sine wave and
normally-distributed random noise
• A number of other useful functions, including: inspect and edit individual data
points, normalize, histogram, interpolate, zero fill, group points by 2s, bridge
segment, superimpose, extract subset of points, concatenate, reverse X-axis,
rotate, set X axis values, reciprocal, log, ln, antilog, antiln, standard deviation,
absolute value, square root
SPECTRUM can be used both as a research tool and as an instructional aid in teaching
signal processing techniques. The program and its associated tutorial was originally
developed for students of analytical chemistry, but the program could be used in any field
in which instrumental measurements are used: e.g. chemistry, biochemistry, physics,
engineering, medical research, clinical psychology, biology, environmental and earth
sciences, agricultural sciences, or materials testing.
Machine Requirements: Any Macintosh model with minimum 1 MByte RAM, any
standard printer. Color screen desirable. SPECTRUM has been tested on most Macintosh
models and on all versions of the operating system through OS 8.1.
PC users can run SPECTRUM using a Macintosh emulator program running on a
Windows machine. Currently available Macintosh emulators include
SoftMac(http://www.emulators.com/download.htm), Basilisk II (http://basilisk2.cjb.net/),
Basilisk II JIT (http://gwenole.beauchesne.online.fr/basilisk2/), and vMac
(http://www.vmac.org/).
The full version of SPECTRUM 1.1 is now available as freeware, and can be
downloaded from http://terpconnect.umd.edu/~toh/spectrum/. There are two versions:
SPECTRUM 1.1e: Signals are stored internally as extended-precision real
variables and there is a limit of 1024 points per signal. This version performs all
its calculations in extended precision and thus has the best dynamic range and the
smallest numeric round-off errors. The download address of this version in HQX
format is http://terpconnect.umd.edu/~toh/spectrum/SPECTRUM11e.hqx.
SPECTRUM 1.1b: Signals are stored internally as single-precision real variables
and there is a limit of 4000 points per signal. This version is less precise in its
calculations (has more numerical round-off error) than the other version, but
allows signals with data more points. The download address of this version in
HQX format is http://terpconnect.umd.edu/~toh/spectrum/SPECTRUM11b.hqx.
The two versions are otherwise identical.
There is also a documentation package (located at
http://terpconnect.umd.edu/~toh/spectrum/SPECTRUMdemo.hqx) consisting of:
a. Reference manual. Macwrite format (Can be opened from within MacWrite,
Microsoft Word, ClarisWorks, WriteNow, and most other full-featured Macintosh
word processors). Explains each menu selection and describes the algorithms and
mathematical formulae for each operation. The SPECTRUM Reference Manual is
also available separately in PDF format at
http://terpconnect.umd.edu/~toh/spectrum/SPECTRUMReferenceManual.pdf.
b. Signal processing tutorial. Macwrite format (Can be opened from within
MacWrite, Microsoft Word, ClarisWorks, WriteNow, and most other full-featured
Macintosh word processors). Self-guided tutorial on the applications of signal
processing in analytical chemistry. This tutorial is also available on the Web at
(http://terpconnect.umd.edu/~toh/Chem498C/SignalProcessing.html)
c. Tutorial signals: A library of prerecorded data files for use with the signal
processing tutorial. These are plain decimal ascii (tab-delimited) data files.
These files are binhex encoded: use Stuffit Expander to decode and decompress as usual.
If you are downloading on a Macintosh, all this should happen completely automatically.
If you are downloading on a Windows PC, shift-click on the download links above to
begin the download. If you are using the ARDI Executor Mac simulator, download the
"HQX" files to your C drive, launch Executor, then open the downloaded HQX files with
Stuffit Expander, which is pre-loaded into the Executor Macintosh environment. Stuffit
Expander will automatically decode and decompress the downloaded files. Note: Because
it was developed for academic teaching application where the most modern and powerful
models of computers may not be available, SPECTRUM was designed to be "lean and
mean" - that is, it has a simple Macintosh-type user interface and very small memory and
disk space requirements. It will work quite well on Macintosh models as old as the
Macintosh II, and will even run on older monochrome models (with some cramping of
screen space). It does not require a math co-processor.
(c) 1989 T. C. O'Haver. This program is free and may be freely distributed. It may be
included on CD-ROM collections or other archives.
2. Matlab
Matlab is a high-performance commercial numerical computing environment and
programming language that is widely used in research and education. See
http://en.wikipedia.org/wiki/MATLAB for a general description. There are several basic
on-line tutorials and collection of sample code. For example:
a. MATLAB Tutorial for New Users (http://www.youtube.com/watch?
v=MdrShPzHeYg). This is a narrated 4-minute video introduction for new users.
b. An Introductory Guide to MATLAB.
(http://www.cs.ubc.ca/spider/cavers/MatlabGuide/guide.html)
c. Matlab Summary and Tutorial. (http://www.math.ufl.edu/help/matlab-tutorial/)
d. A Practical Introduction to Matlab
(http://www.math.mtu.edu/~msgocken/intro/intro.html)
e. Matlab Chemometrics Index
http://www.mathworks.com/matlabcentral/link_exchange/MATLAB/Chemometrics/in
dex.html
f. Multivariate Curve Resolution. http://www.ub.edu/mcr/welcome.html
References
1. Douglas A. Skoog, Principles of Instrumental Analysis, Third Edition, Saunders,
Philadelphia, 1984. Pages 73-76.
2. Gary D. Christian and James E. O'Reilly, Instrumental Analysis, Second Edition, Allyn
and Bacon, Boston, 1986. Pages 846-851.
4. Stephen C. Gates and Jordan Becker, Laboratory Automation using the IBM PC,
Prentice Hall, Englewood Cliffs, NJ, 1989.
5. Muhammad A. Sharaf, Deborah L Illman, and Bruce R. Kowalski, Chemometrics, John
Wiley and Sons, New York, 1986.
6. Peter D. Wentzell and Christopher D. Brown, Signal Processing in Analytical
Chemistry, in Encyclopedia of Analytical Chemistry, R.A. Meyers (Ed.), p. 9764–9800,
John Wiley & Sons Ltd, Chichester, 2000 (http://myweb.dal.ca/pdwentze/papers/c2.pdf)
7. Constantinos E. Efstathiou, Educational Applets in Analytical Chemistry, Signal
Processing, and Chemometrics. (http://www.chem.uoa.gr/Applets/Applet_Index2.htm)
8. A. Felinger, Data Analysis and Signal Processing in Chromatography, Elsevier Scice
(19 May 1998).
9. Matthias Otto, Chemometrics: Statistics and Computer Application in Analytical
Chemistry, Wiley-VCH (March 19, 1999). Some parts viewable in Google Books.
10. Steven W. Smith, The Scientist and Engineer's Guide to Digital Signal Processing.
(Downloadable chapter by chapter in PDF format from
http://www.dspguide.com/pdfbook.htm). This is a much more general treatment of the
topic.
11. Robert de Levie, How to use Excel in Analytical Chemistry and in General Scientific
Data Analysis, Cambridge University Press; 1 edition (February 15, 2001), ISBN-10:
0521644844. PDF excerpt .
12. Scott Van Bramer, Statistics for Analytical Chemistry, http://science.widener.edu/svb/
stats/stats.html.
13. Numerical Analysis for Chemical Engineers, Taechul Lee
(http://www.cheric.org/ippage/e/ipdata/2001/13/lecture.html)
14. Educational Matlab GUIs, Center for Signal and Image Processing (CSIP), Georgia
Institute of Technology. (http://users.ece.gatech.edu/mcclella/matlabGUIs/)
15. Digital Signal Processing Demonstrations in Matlab, Jan Allebach, Charles Bouman,
and Michael Zoltowski, Purdue University
(http://www.ecn.purdue.edu/VISE/ee438/demos/Demos.html)