[Subtraction] [Division] [Interpolation] [SPECTRUM for Mac OS8] [Spreadsheets] [Matlab] [Octave]
[Getting data into Matlab/Octave]

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 optical absorption spectrum of an extract of a sample of oil shale, a kind of rock that is is a source of petroleum.

*Figure 1. A simple point-by-point subtraction of two signals
allows the background (bottom curve on the left) to be
subtracted from a complex sample (top curve on the left),
resulting in a clearer picture of what is really in the sample
(right). (X-axis = wavelength in nm; Y-axis = absorbance).*

This optical spectrum exhibits two
absorption bands, at about 515 nm and 550 nm, that are due to a
class of molecular fossils of chlorophyll called *porphyrins.*
(Porphyrins are used as geomarkers in oil exploration). These
bands are superimposed on a background absorption caused by the
extracting solvents and by non-porphyrin compounds extracted from
the shale. The bottom curve is the spectrum of an extract of a
non-porphyrin-bearing shale, showing only the background
absorption. To obtain the spectrum of the shale extract without
the background, the background (bottom curve) is simply subtracted
from the sample spectrum (top curve). The difference is shown in
the right in Window 2 (note the change in Y-axis scale). In this
case the removal of the background is not perfect, because the
background spectrum is measured on a separate shale sample.
However, it works well enough that the two bands are now seen more
clearly and it is easier to measure precisely their absorbances
and wavelengths. (Thanks to Prof. David Freeman for the spectra of
oil shale extracts).

In this example and the one below, I
am making the assumption that the two signals in Window 1 have the
* same x-axis values* - in other words, that both spectra are
digitized at the same set of wavelengths. Subtracting or dividing
two spectra would not be valid if two spectra were digitized over
different wavelength ranges or with different intervals between
adjacent points. The x-axis values must match up point for point.
In practice, this is very often the case with data sets acquired
within one experiment on one instrument, but the experimenter must
take care if the instruments settings are changed or if data from
two experiments or two instrument are combined. (Note: It is
possible to use the mathematical technique of interpolation
to change the number of points or the x-axis intervals of signals;
the results are only approximate but often close enough in
practice. Interpolation is one of the functions of the iSignal
function described later).

Sometimes one needs to know whether two signals have the same shape, for example in comparing the signal of an unknown to a stored reference signal. Most likely the amplitudes of the two signals, will be different. Therefore a direct overlay or subtraction of the two signals will not be useful. One possibility is to compute the point-by-point ratio of the two signals; if they have the same shape, the ratio will be a constant. For example, examine Figure 2.

*Figure 2. Do the two **signals on the left have the
same shape? They certainly do not look the same, but that may
simply be due to the fact that one is much weaker than the
other. The ratio of the two **signals, 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 x-axis range.*

The left part (Window 1) shows two superimposed signals, one of
which is much weaker than the other. But do they have the same
shape? The ratio of the two signals, shown in the right part
(Window 2), is relatively constant from x=300 to 440, with a value
of 10 +/- 0.2. This means that the shape of these two signals is
the same, within about +/-2 %, over this x-axis range, and that
top curve is very nearly 10 times more intense than the bottom
one. Above x=440 the ratio is not even approximately constant;
this is caused by *noise*, which is the subject of the next section.

Popular spreadsheets, such as Excel or Open Office Calc, have built-in functions for all common math operations, named variables, x,y plotting, text formatting, matrix math, etc. Cells can contain numerical values, text, mathematical expression, or references to other cells. A vector of values such as a spectrum can be represented as a row or column of cells; a rectangular array of values such as a set of spectra can be represented as a rectangular block of cells. User-created names can be assigned to individual cells or to ranges of cells, then referred to in mathematical expression by name. Mathematical expressions can be easily copied across a range of cells, with the cell references changing or not as desired. Plots of various types (including the all-important

If you are working on a tablet or smartphone, you could use the

A Matlab variable can also be a

The subtraction of two signals

creates a matrix A in which each column is x multiplied by the the numbers 1, 2,...10. It is equivalent to (but more compact and faster than) the loop

Typing "b\a" will compute the "matrix right divide", in effect the weighted average ratio of the amplitudes of the two vectors (a type of least-squares best-fit solution), which in the example in Figure 2 will be a number close to 10. The point here is that

Getting data into Matlab/Octave.

Octave 3.8.2 has a

Installation of Octave is somewhat more laborious than installing a commercial package like Matlab. Here is what I did to install Octave 3.8 and its GUI onto Windows 8:

1. Run the install script at http://mxeoctave.osuv.de/octave-3.8.2-4-installer.exe. This installs Octave 3.8 into C:\Octave\Octave-3.8.2

2. Download the bat file "octave-gui.bat" from http://wiki.octave.org/Octave_for_Microsoft_Windows onto C:\Octave\Octave-3.8.2

@echo off set PATH=%CD%\bin\ start octave --force-gui -i --line-editing exit3. Launch Octave 3.8 by double-clicking that bat file.

4. Install the packages like so:

(This last step takes 10-15 minutes to complete).

More seriously, Octave is also slower than Matlab computationally - about 2 to 20 times slower, depending on the task (for some specific example, see TimeTrial.txt). Also, the error handling is less graceful and it's less stable and tends to crash more often (in my experience). I am working to make all my Matlab scripts and functions compatible with Octave; make sure you have the latest versions of my functions (a number of functions were made more Octave-compatible in March 2015). Bottom line: Matlab is better, but if you can't afford Matlab, Octave provides most of the functionality for 0% of the cost.

Both spreadsheets and Matlab/Octave programs have a huge advantage over commercial end-user programs and compiled freeware programs such as SPECTRUM; they can be

This page is part of "

Unique visits since May 17, 2008: