0% found this document useful (0 votes)
3 views

Fast Exponential Fitting Algorithm For Real-Time Instrumental Use

Uploaded by

m_hanine
Copyright
© © All Rights Reserved
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
3 views

Fast Exponential Fitting Algorithm For Real-Time Instrumental Use

Uploaded by

m_hanine
Copyright
© © All Rights Reserved
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 6

Fast exponential fitting algorithm for real-time instrumental use

Daniel Halmer, Golo von Basum, Peter Hering, and Manfred Mürtz

Citation: Review of Scientific Instruments 75, 2187 (2004); doi: 10.1063/1.1711189


View online: http://dx.doi.org/10.1063/1.1711189
View Table of Contents: http://scitation.aip.org/content/aip/journal/rsi/75/6?ver=pdfcov
Published by the AIP Publishing

Articles you may be interested in


Real-time digital compensation to reduce acceleration's sensitivity in quartz resonator
Rev. Sci. Instrum. 83, 064706 (2012); 10.1063/1.4729257

Efficient Exponential Fitting Algorithm with Two Fitting Parameters for Oscillation Problems
AIP Conf. Proc. 1389, 1594 (2011); 10.1063/1.3637936

An algorithm for computing linear four-point probe thickness correction factors


Rev. Sci. Instrum. 72, 3580 (2001); 10.1063/1.1394186

Counting errors in a real-time multichannel scaler


Rev. Sci. Instrum. 69, 299 (1998); 10.1063/1.1148513

The Correction in Viscometry When Using Capillary Tubes Which Have TrumpetShaped Openings
J. Rheol. 1, 418 (1930); 10.1122/1.2116332

This article is copyrighted as indicated in the article. Reuse of AIP content is subject to the terms at: http://scitationnew.aip.org/termsconditions. Downloaded to IP:
130.216.129.208 On: Sat, 06 Dec 2014 21:39:07
REVIEW OF SCIENTIFIC INSTRUMENTS VOLUME 75, NUMBER 6 JUNE 2004

Fast exponential fitting algorithm for real-time instrumental use


Daniel Halmer, Golo von Basum, Peter Hering, and Manfred Mürtza)
Institut für Lasermedizin, Universität Düsseldorf, 40225 Düsseldorf, Germany
共Received 10 December 2003; accepted 16 February 2004; published online 24 May 2004兲
We report on a very fast fitting algorithm for single exponential functions which is based on the
method of successive integration. The algorithm corrects the systematic error of trapezoidal
integration. The new algorithm needs only 150 ␮s for a dataset of 1536 points and is around 700
times faster than the nonlinear Levenberg–Marquardt fit provided by LABVIEW. This makes it
suitable for real-time instrumental use. Beside the better time resolution, the acceleration allows
more averaging, which leads to higher precision. In our experiment instrumental sensitivity was
improved by a factor of 3.7. © 2004 American Institute of Physics. 关DOI: 10.1063/1.1711189兴

I. INTRODUCTION decay time. In this article it will be shown that this deviation
can be easily corrected. The method described in this article
Many processes in chemistry, biology, and physics can introduces a very fast algorithm for exact fitting of exponen-
be described by exponential functions. Determining the time tial decay.
constants and the amplitudes from experimental data is a
common task in many sciences. Several methods for the de-
termination of these values are described and compared in a
review article by Istratov and Vyvenko.1 In the majority of A. Method of successive integration
applications there is enough time to use standard least- The basic principle of this method lies in the fact that
squares fitting procedures such as a nonlinear Levenberg– integration of an exponential function is again an exponential
Marquardt algorithm.2– 4 However, sometimes the signal pro- function and additionally that the original function can be
cessing has to be faster and another fitting routine is needed. found again in integral form. Therefore it is possible to ex-
One example of these measurements is cavity-leak-out spec- press Y (t) with its own integral:
troscopy 共CALOS兲, a continuous wave 共cw兲 variation of cav-
ity ring-down spectroscopy,5 which is used in our laboratory.
CALOS is a very sensitive method for the detection of
trace gases in concentrations at the sub-ppb level 共parts per
billion兲, i.e., absorption coefficients in the range of
10⫺9 cm⫺1 . We made measurements of ethane in human
breath with a sensitivity better than 1 ppb using sample bags
earlier.6 – 8 But for online breath analysis a time resolution
better than 1 s is needed. To ensure this we need a signal This leads to a linear two-dimensional equation,
generation rate of about 1– 4 kHz. For each signal a single
exponential fit of the form Y 共 X,t 兲 ⫽A⫹BX⫹Ct, 共1兲

Y 共 t 兲 ⫽Y 0 e ⫺kt ⫹b with the coefficients A, B, and C and the variables X and t.


This linear equation in t and X describes a plane when
has to be evaluated. To achieve sufficient time resolution we Y (X,t) is plotted versus t and X. In this graph A is the inter-
need a fitting routine that performs complete fitting in less section between the plane and the Y axis, B the partial de-
than 1 ms. Moreover, it has to work with LABVIEW9 since it rivative in the direction of X, and C the partial derivative in
has to be incorporated into the LABVIEW program that con- the direction of t.
trols the experiment. We recently noticed that the nonlinear The best fit coefficients A, B, and C for Eq. 共1兲 with an
Levenberg–Marquardt fit, provided by LABVIEW, is far too experimental data set can be calculated analytically by the
slow 共approximately 85 ms for a set of 1536 data points兲 and method of least squares which means
hence cannot be used for our application.
Another attempt is integrating the exponential function ⳵␹ 2 ⳵␹ 2 ⳵␹ 2
⫽0, ⫽0, and ⫽0,
and using some typical properties of the integral.10,11 The ⳵A ⳵B ⳵C
method of successive integration which was introduced by
with
Matheson reduces the exponential fitting problem to linear
regression.11 The trapezoidal integration that Matheson used N
leads to systematic error, which causes overestimation of the ␹ 2⫽ 兺
j⫽1
关 Y 共 t j 兲 ⫺A⫺BX j ⫺Ct j 兴 2 .

a兲
Corresponding author; electronic mail: muertz@uni-duesseldorf.de This leads to the following equation system:12

0034-6748/2004/75(6)/2187/5/$22.00 2187 © 2004 American Institute of Physics


This article is copyrighted as indicated in the article. Reuse of AIP content is subject to the terms at: http://scitationnew.aip.org/termsconditions. Downloaded to IP:
130.216.129.208 On: Sat, 06 Dec 2014 21:39:07
2188 Rev. Sci. Instrum., Vol. 75, No. 6, June 2004 Halmer et al.

FIG. 1. Illustration of the systematic error using trapezoidal integration. FIG. 2. Correction term CT vs ␶.

冉 SY
N

t
SY
SY .SY
t.SY
t
t.SY
t.t
冊冉冊冉 冊 A Y
⫻ B ⫽ Y .SY .
C Y .t
共2兲
there is a way to compensate for this systematic integration
error. This is achieved by

Each entry is a sum over all data points:

兺 冕t
N
ti
SY ⫽ Y 共 t 兲 dt,
i⫽0 0

Y⫽ 兺 Y 共 ti兲,
i⫽0
共3兲

兺 t i 冕t
N
ti
t.SY ⫽ Y 共 t 兲 dt,
i⫽0 0 This means trapezoidal integration can be corrected if k and
b are known. Often the reciprocal value of k is more inter-
and likewise for all entries.
esting than the value of k itself. ␶ ⫽1/k is called the decay
In the case of an equidistant time scale 共with distance 1兲
time and in the following this notation is used. In Fig. 2 we
the sums t and t.t can be evaluated by
can see the correction term 共CT兲 vs ␶ which represents the
N 共 N⫹1 兲 N 共 N⫹1 兲共 2N⫹1 兲 number of data points recorded until the signal decays to 1/e.
t⫽ and t.t⫽ . As expected it approximates to 1 as the time resolution ap-
2 6
proaches infinity. For example, a decay signal with a 1/e
So the calculation of the equation system, Eq. 共2兲, consists of time of 3 ␮s which is sampled with 10 MHz has a decay rate
six sums of N addends that can be programmed by a simple of 30.
summation loop.
A. Fitting routine
Originally the method of successive integration was an
II. IMPROVEMENT OF THE INTEGRATION METHOD analytical fitting procedure and it only needed one step with-
out an initial guess for the coefficients. As soon as correction
The fitting procedure mentioned above can only be as 共3兲 is applied for the values of the integral, an initial guess
good as the calculation of integral SY . Matheson pointed out for the coefficients is needed. An iterative approach could be
that the trapezoidal numerical integration, used. This process converges very fast and requires only a

冕 n⫹1 Y 共 n 兲 ⫹Y 共 n⫹1 兲 few iterations.


Y 共 t 兲 dt⫽ , However, due to reduction of the problem to a linear one
n 2
there is another possibility which exhibits many advantages.
has been found to be totally satisfactory in his study.11 But Correction 共3兲 changes the values for X so the partial deriva-
the difference between the analytical and the trapezoidal in- tive in the X direction will change. Due to linearity, the fit
tegration 共Fig. 1兲 leads to a systematic error which vanishes coefficients can be directly corrected without calculating
as the time step approaches zero. However, in every real matrix 共2兲.
measurement there exists a lower time step limit due to Let ␶* and b * be the guessed coefficients which are used
analysis software and hardware and therefore the systematic for the correction, let X j , Y 0 , ␶, and b be the results for the
error cannot be ignored. uncorrected integral, and let X̃ j , Ỹ 0 , ˜␶ , and b̃ be the values
Given an approximate value of two coefficients k and b with the integral correction. Then
This article is copyrighted as indicated in the article. Reuse of AIP content is subject to the terms at: http://scitationnew.aip.org/termsconditions. Downloaded to IP:
130.216.129.208 On: Sat, 06 Dec 2014 21:39:07
Rev. Sci. Instrum., Vol. 75, No. 6, June 2004 Fast exponential fitting algorithm 2189

rithm. As a criterion for successful fit the residuals Y RES(i)


can be observed, i.e., the difference between the Y data and Y
fitted each time. A good fit should show residuals that fluc-
tuate around zero without any obvious structure and repre-
共4兲 sent signal noise. For Gaussian noise there are three param-
eters for the residuals that give an idea of the quality of the
fit: the mean value ␮, the standard deviation ␴, and the
Durbin–Watson factor DW.
with the trapezoidal integration 共TI兲 共k兲. Equation 共3兲 implies
The standard deviation is defined by the sum of the
j⫺1
squared residuals divided by the degrees of freedom which
X̃ j ⫽ 兺
k⫽0
关共 TI共 j 兲 ⫺b * 兲 CT共 ␶ * 兲 ⫹b * 兴 is the number of data points minus the number of fitting
coefficients,
⫽CT共 ␶ * 兲 X j ⫹b * j⫺CT共 ␶ * 兲 b * j. 共5兲
Moreover, Eq. 共1兲 leads to ␴⫽ 冑 ⌺ i⫽1
N
关 Y RES共 i 兲兴 2
N⫺3
.
A⫹BX j ⫹Ct j ⫽Y 共 t j 兲 ⫽Ã⫹B̃X̃ j ⫹C̃t j ⫽Ã⫹CT 共 ␶ * 兲 B̃X j
The Durbin–Watson factor is an indicator for a given struc-
⫹ 关 C̃⫹B̃b * ⫺CT共 ␶ * 兲 B̃b * 兴 t j . ture in a residual function. It was developed by Durbin and
Comparison of the coefficients gives Watson to analyze econometric data.13 It is defined by
B
Ã⫽A∧B̃⫽ ∧C̃⫽C⫺B̃b * ⫹CT 共 ␶ * 兲 B̃b * ⌺ i⫽1
N⫺1
关 Y RES共 i⫹1 兲 ⫺Y RES共 i 兲兴 2
CT共 ␶ * 兲 DW⫽ .
⌺ i⫽1
N
关 Y RES共 i 兲兴 2
and with the definitions of A, B, and C,
˜␶ ⫽CT共 ␶ * 兲 ␶ , This factor gives an estimate for the suitability of the fit. A
low value of DW indicates nonrandomly distributed residu-
b̃⫽CT共 ␶ * 兲 b⫹b * ⫺CT共 ␶ * 兲 b * , als, and consequently systematic error in the fit or a wrong fit
equation. A high value indicates randomly distributed residu-
Ỹ 0 ⫽Y 0 ⫹b 关 1⫺CT共 ␶ * 兲兴 ⫺b * 关 1⫺CT共 ␶ * 兲兴 . als.
This shows that it is possible to obtain the correct fitting These three values can give an idea of the quality of a fit.
coefficients with regard to integral correction from the un- A good fit has a mean value around zero, low standard de-
corrected fitting coefficients and the initial guessed coeffi- viation, and a high Durbin–Watson factor. It is not possible
cients without doing calculations for Eq. 共2兲 again. to give an exact value for DW as a criterion for a good fit.
Now we consider that the best initial guess coefficients But with statistical analysis, two bounds, d L and d U , can be
lead to the same values after correction, which is ˜␶ ⫽ ␶ * and found which depend on the number of parameters and the
b̃⫽b * . This leads to number of data points.14 Lampert et al.15 discussed other cri-
teria which can be used, but they finally came to the conclu-
˜␶ ⫽CT共˜␶ 兲 ␶ ,
sion that the Durbin–Watson factor is the most useful. In
1⫺exp共 ⫺˜␶ ⫺1 兲 addition, Lampert et al. pointed out that the standard devia-
⇔˜␶ ⫽2˜␶ ␶, tion of the parameters for different time scales is a good
1⫹exp共 ⫺˜␶ ⫺1 兲 indicator of the quality of the fit.
1
⇔˜␶ ⫽ , 共6兲
ln关共 2 ␶ ⫹1兲/共2␶ ⫺1 兲兴
and, furthermore,
Ỹ 0 ⫽Y 0 and b̃⫽b. 共7兲
Equation 共7兲 means that trapezoidal integration leads to the
correct values of Y 0 and b. Only the value of ␶ has to be
corrected by Eq. 共6兲.
A complete fit of a data set with N points needs 6N
⫹10 additions, 6N⫹49 multiplications, and one calculation
of a natural logarithm.

III. RESULTS AND DISCUSSION


A. Test criteria
FIG. 3. Synthetic exponential signal and the best fit functions 共SI fit, CSI fit,
Now we want to compare the corrected successive inte- and LM fit兲. Inset: Deviation between Levenberg–Marquardt algorithm and
gration algorithm to the Levenberg–Marquardt 共LM兲 algo- successive integration algorithms.
This article is copyrighted as indicated in the article. Reuse of AIP content is subject to the terms at: http://scitationnew.aip.org/termsconditions. Downloaded to IP:
130.216.129.208 On: Sat, 06 Dec 2014 21:39:07
2190 Rev. Sci. Instrum., Vol. 75, No. 6, June 2004 Halmer et al.

TABLE II. Comparison of successive integration 共SI and CSI兲 and


Levenberg–Marquardt 共LM兲 fitting algorithms.

Parameter SI CSI关LV/共C⫹⫹兲兴 LM

Amplitude ⫺1200.0⫾2.3 ⫺1200.0⫾2.3 ⫺1200.0⫾2.3


Decay time 50.0⫾1.2 50.0⫾1.2 50.0⫾1.2
Offset 13.03⫾0.98 13.03⫾0.98 13.03⫾0.98
␮ ⫺1.8E⫺3 ⫺1.6E⫺3 8.7E⫺10
␴ 19.9882 19.9872 19.9869

DW 2.002 76 2.002 80 2.002 82


Fitting time 共ms兲 1.116 1.125/0.150 102.237

cies of the deviations. There is no visible difference between


the different fits. The values of ␮, ␴, and DW are given in
FIG. 4. Residuals of SI fit, CSI fit, and LM fit. Table I.
For this case the critical bounds for DW are14
Other criteria are the errors of fitted coefficients ⌬Y 0 , d U ⫽2.001 31, d L ⫽1.996 08.
⌬k, and ⌬b. These can be calculated by the method of
Hence the fits match very well but the Levenberg–Marquardt
Bevington.16 Thus it is necessary to calculate the partial de-
algorithm seems to achieve slightly better results. Even the
rivatives at all times i,
values for the different types of successive integration appar-
⳵Y ently do not change. For smaller values of decay rate there
DERIVJ 共 i 兲 ª 共 i 兲,
⳵J should be more changes.
To check this we have simulated 10 000 exponential de-
where J stands for the different parameters, Y 0 , k, and b. A cays with a decay rate of 50 and fitted them with the fit
square matrix ALPHA has to be calculated by routines. In Table II the mean values of the results are shown.
N The errors are calculated by the method of Bevington. The
ALPHA共 J,K 兲 ª 兺 关 DERIVJ共 i 兲 ⫻DERIVK共 i 兲兴 .
i⫽1
results coincide but the values of ␮, ␴, and DW of the
Levenberg–Marquardt fit are slightly better than the cor-
The error in parameter J can be obtained by rected successive integration. And the corrected successive
integration is better than successive integration. However,
⌬J⫽ ␴ ⫻ 冑共 AL PHA 兲 ⫺1 共 J,J 兲 . programmed in LABVIEW the corrected successive integration
algorithm is about 90 times faster than Levenberg–
B. Numerical tests Marquardt fit and programmed in C⫹⫹ 共integrated in a
For our tests we have programmed the corrected succes- LABVIEW program兲 there is another increase of speed by a
sive integration fit 共CSI fit兲 in LABVIEW and C⫹⫹. We used factor of 7.5. This gives an acceleration by a factor of about
extended precision variables for all calculations. 700.
The fitting routine was tested with simulated exponential Now we want to check the relative standard deviation of
decay signals. We used amplitude Y 0 of ⫺1200, decay time ␶ our decay time for different time scales. In our case this
of 300, offset b of 13, Gaussian noise with a standard de- relative standard deviation is a measure of the sensitivity of
viation of 20, and sample length of 1536 data points. These the experimental system. Furthermore, the variation of the
values correspond to our expectations for our experimental time scale gives an idea of the ideal number of recorded data
data sets. In Fig. 3 an example of a synthetic exponential
decay signal and the best fit curves 关LM, successive integra-
tion 共SI兲, and CSI兴 is given. Also, the deviation between
the Levenberg–Marquardt fit and successive integration fits
is plotted. The systematic error caused by trapezoidal inte-
gration for the SI fit is clearly visible as is the functionality
of the correction. Figure 4 contains the residual function for
the fitting routines and a histogram of the relative frequen-

TABLE I. Values of the mean value of the residuals ␮, the standard devia-
tion ␴, and Durbin–Watson factor DW for successive integration 共SI and
CSI兲 and Levenberg–Marquardt 共LM兲 fitting algorithms.

Parameter SI fit CSI fit LM fit


⫺2 ⫺2
␮ 6.297⫻10 6.276⫻10 3.048⫻10⫺11
␴ 20.661 140 20.661 139 20.660 847
DW 2.042 1613 2.042 1614 2.042 2189 FIG. 5. Relative standard deviation vs ␶ of the LM fit and CSI fit. ␶ repre-
sents the number of data points recorded until the signal decays to 1/e.
This article is copyrighted as indicated in the article. Reuse of AIP content is subject to the terms at: http://scitationnew.aip.org/termsconditions. Downloaded to IP:
130.216.129.208 On: Sat, 06 Dec 2014 21:39:07
Rev. Sci. Instrum., Vol. 75, No. 6, June 2004 Fast exponential fitting algorithm 2191

nals before fitting. Statistical noise of single shot signals can


be reduced and the fit routine achieves better results. In the
past we averaged 100 decay signals and fitted the average
with the Levenberg–Marquardt algorithm. This achieved two
points per second. With the CSI fit it is possible to fit every
single decay signal 共Fig. 6兲. The squares are measurements
fitted by nonlinear Levenberg–Marquardt algorithm. The
small dots are the fit results with the CSI fit for every single
decay signal. As expected, the deviation is much larger than
that with average decay signals. The gray curve is a running
average 共500 ms兲 of these results. These measurements lead
to uncertainty of ␶ of 12.4 ns for Levenberg–Marquardt al-
gorithm and 6.0 ns for corrected successive integration for
decay time of 11.42 ␮s. This enhanced our sensitivity by a
FIG. 6. Measured decay time vs time with the CSI fit 共single shot and
factor of 3.7 from 2.236⫻10⫺9 to 6⫻10⫺10 1/(cm冑Hz). 7,17
averaged for 500 ms兲 and with the LM fit 共with average decay signals of 500
ms兲. ACKNOWLEDGMENTS
Financial support from the Deutsche Forschungsgemein-
schaft is gratefully acknowledged. This work was part of the
points. Therefore we have generated decay signals with the PhD thesis of one of the authors 共D.H.兲 at the faculty math-
same amplitude 共⫺1200兲, offset 共13兲, Gaussian noise 共5兲, ematics and science at the Heinrich-Heine-University of
and sample length 共1536 points兲 and varied the decay time Düsseldorf.
from 1 to 500. For each decay time we have generated 1000
signals and calculated the relative standard deviation of the 1
A. A. Istratov and O. Vyvenko, Rev. Sci. Instrum. 70, 1233 共1999兲.
decay times achieved by the CSI fit and the LM fit 共Fig. 5兲. 2
K. Levenberg, Q. Appl. Math. 2, 164 共1944兲.
For a decay time of more than 250 the relative standard 3
D. W. Marquardt, J. Soc. Appl. Math. 共SIAM J.兲 11, 431 共1963兲.
4
deviation of the fits coincides. The minimum of the relative H. Naus, I. H. M. van Stokkum, W. Hogervorst, and W. Ubachs, Appl.
Opt. 40, 4416 共2001兲.
standard deviation lies between 200 and 350. 5
K. W. Busch and M. A. Busch, Cavity-Ring-Down Spectroscopy—An
Ultratrace-Absorption Measurement Technique 共American Chemical So-
C. Experimental results
ciety, Washington, DC, 1999兲.
6
The experimental measurements were obtained by CA- H. Dahnke, D. Kleine, W. Urban, P. Hering, and M. Mürtz, Appl. Phys. B:
Lasers Opt. B72, 121 共2001兲.
LOS in our lab. CALOS is based on the principle of absorp- 7
H. Dahnke, D. Kleine, P. Hering, and M. Mürtz, Appl. Phys. B: Lasers
tion spectroscopy. A midinfrared cw laser excites a high fi- Opt. B72, 971 共2001兲.
8
nesse ring-down cavity filled with sample gas. After turning S. Stry, P. Hering, and M. Mürtz, Appl. Phys. B: Lasers Opt. B75, 297
off the laser decay of the cavity field is measured. This decay 共2002兲.
9
National Instruments, LABVIEW Lehrhandbuch 共1996兲.
is single exponential decay and the absorption coefficient of 10
K. Tittelbach-Helmrich, Meas. Sci. Technol. 4, 1323 共1987兲.
the gas sample can easily be calculated with decay time ␶.7 11
I. B. C. Matheson, Anal. Instrum. 共NY兲 16共3兲, 345 共1987兲.
12
Therefore, the error in calculated decay time is a direct indi- I. N. Bronstein, K. A. Semendjajew, G. Musiol, and H. Mühlig, Taschen-
cation of the precision of our measurement. buch der Mathematik 共Deutsch, Frankfurt, 1993兲.
13
J. Durbin and G. S. Watson, Biometrika 37, 409 共1950兲.
Apart from achieving better time resolution, the CSI fit 14
J. Durbin and G. S. Watson, Biometrika 38, 159 共1951兲.
allows one to perform more averages within the same 15
R. A. Lampert, D. V. O’Connor, A. J. Roberts, and S. R. Meech, Anal.
amount of time. The error in mean value depends on the Chem. 55, 68 共1983兲.
16
P. R. Bevington, Data Reduction and Error Analysis for the Physical
reciprocal square root of the number of averages taken and
Sciences 共McGraw–Hill, New York, 1969兲.
this can lead to better sensitivity. Another way to compensate 17
G. von Basum, H. Dahnke, D. Halmer, P. Hering, and M. Mürtz, J. Appl.
for a slow fit algorithm is to average the original decay sig- Physiol. 95, 2583 共2003兲.

This article is copyrighted as indicated in the article. Reuse of AIP content is subject to the terms at: http://scitationnew.aip.org/termsconditions. Downloaded to IP:
130.216.129.208 On: Sat, 06 Dec 2014 21:39:07

You might also like