From: <Windows Internet Explorer 7 で保存されています>
Subject: Math::FFT - Perl module to calculate Fast Fourier Transforms - search.cpan.org
Date: Wed, 27 Jun 2007 16:21:40 +0900
MIME-Version: 1.0
Content-Type: multipart/related;
	type="text/html";
	boundary="----=_NextPart_000_0000_01C7B8D7.3E0E1C20"
X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2900.3028

This is a multi-part message in MIME format.

------=_NextPart_000_0000_01C7B8D7.3E0E1C20
Content-Type: text/html;
	charset="iso-8859-1"
Content-Transfer-Encoding: quoted-printable
Content-Location: http://search.cpan.org/~rkobes/Math-FFT-1.28/FFT.pm

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML><HEAD><TITLE>Math::FFT - Perl module to calculate Fast Fourier =
Transforms - search.cpan.org</TITLE>
<META http-equiv=3DContent-Type content=3D"text/html; =
charset=3Diso-8859-1"><LINK=20
href=3D"http://search.cpan.org/s/style.css" type=3Dtext/css =
rel=3Dstylesheet><LINK=20
title=3D"RSS 1.0" href=3D"http://search.cpan.org/uploads.rdf"=20
type=3Dapplication/rss+xml rel=3Dalternate>
<META content=3D"MSHTML 6.00.6000.16414" name=3DGENERATOR></HEAD>
<BODY id=3Dcpansearch>
<CENTER>
<DIV class=3Dlogo><A href=3D"http://search.cpan.org/"><IMG alt=3DCPAN=20
src=3D"http://search.cpan.org/s/img/cpan_banner.png"></A></DIV></CENTER>
<DIV class=3Dmenubar><A href=3D"http://search.cpan.org/">Home</A> =B7 <A =

href=3D"http://search.cpan.org/author/">Authors</A> =B7 <A=20
href=3D"http://search.cpan.org/recent">Recent</A> =B7 <A=20
href=3D"http://log.perl.org/cpansearch/">News</A> =B7 <A=20
href=3D"http://search.cpan.org/mirror">Mirrors</A> =B7 <A=20
href=3D"http://search.cpan.org/faq.html">FAQ</A> =B7 <A=20
href=3D"http://search.cpan.org/feedback">Feedback</A> </DIV>
<FORM class=3Dsearchbox name=3Df action=3D/search method=3Dget><INPUT =
size=3D35=20
name=3Dquery> <BR>in <SELECT name=3Dmode> <OPTION value=3Dall =
selected>All</OPTION>=20
  <OPTION value=3Dmodule>Modules</OPTION> <OPTION=20
  value=3Ddist>Distributions</OPTION> <OPTION=20
value=3Dauthor>Authors</OPTION></SELECT>&nbsp;<INPUT type=3Dsubmit =
value=3D"CPAN Search">=20
</FORM><A name=3D_top></A>
<DIV class=3Dpath><A href=3D"http://search.cpan.org/~rkobes/">Randy =
Kobes</A> &gt;=20
<A =
href=3D"http://search.cpan.org/~rkobes/Math-FFT-1.28/">Math-FFT-1.28</A> =
&gt;=20
Math::FFT </DIV>
<DIV style=3D"FLOAT: right">Download: <A=20
href=3D"http://search.cpan.org/CPAN/authors/id/R/RK/RKOBES/Math-FFT-1.28.=
tar.gz">Math-FFT-1.28.tar.gz</A>=20

<P><A =
href=3D"http://www.annocpan.org/~RKOBES/Math-FFT-1.28/FFT.pm">Annotate =
this=20
POD </A></P></DIV>Module Version: 1.28 &nbsp; <A=20
href=3D"http://search.cpan.org/src/RKOBES/Math-FFT-1.28/FFT.pm">Source</A=
> &nbsp;=20
<DIV class=3Dpod><A name=3D___top></A>
<DIV class=3Dpod>
<DIV class=3Dtoc>
<DIV class=3Dindexgroup>
<UL class=3D"indexList indexList1">
  <LI class=3D"indexItem indexItem1"><A=20
  =
href=3D"http://search.cpan.org/~rkobes/Math-FFT-1.28/FFT.pm#NAME">NAME</A=
>=20
  <LI class=3D"indexItem indexItem1"><A=20
  =
href=3D"http://search.cpan.org/~rkobes/Math-FFT-1.28/FFT.pm#SYNOPSIS">SYN=
OPSIS</A>=20

  <LI class=3D"indexItem indexItem1"><A=20
  =
href=3D"http://search.cpan.org/~rkobes/Math-FFT-1.28/FFT.pm#DESCRIPTION">=
DESCRIPTION</A>=20

  <UL class=3D"indexList indexList2">
    <LI class=3D"indexItem indexItem2"><A=20
    =
href=3D"http://search.cpan.org/~rkobes/Math-FFT-1.28/FFT.pm#FFT_METHODS">=
FFT=20
    METHODS</A>=20
    <LI class=3D"indexItem indexItem2"><A=20
    =
href=3D"http://search.cpan.org/~rkobes/Math-FFT-1.28/FFT.pm#CLONING">CLON=
ING</A>=20

    <LI class=3D"indexItem indexItem2"><A=20
    =
href=3D"http://search.cpan.org/~rkobes/Math-FFT-1.28/FFT.pm#APPLICATIONS"=
>APPLICATIONS</A>=20

    <LI class=3D"indexItem indexItem2"><A=20
    =
href=3D"http://search.cpan.org/~rkobes/Math-FFT-1.28/FFT.pm#STATISTICAL_F=
UNCTIONS">STATISTICAL=20
    FUNCTIONS</A> </LI></UL>
  <LI class=3D"indexItem indexItem1"><A=20
  =
href=3D"http://search.cpan.org/~rkobes/Math-FFT-1.28/FFT.pm#BUGS">BUGS</A=
>=20
  <LI class=3D"indexItem indexItem1"><A=20
  =
href=3D"http://search.cpan.org/~rkobes/Math-FFT-1.28/FFT.pm#SEE_ALSO">SEE=
=20
  ALSO</A>=20
  <LI class=3D"indexItem indexItem1"><A=20
  =
href=3D"http://search.cpan.org/~rkobes/Math-FFT-1.28/FFT.pm#COPYRIGHT">CO=
PYRIGHT</A>=20
  </LI></UL></DIV></DIV>
<H1><A class=3Du title=3D"click to go to top of document"=20
href=3D"http://search.cpan.org/~rkobes/Math-FFT-1.28/FFT.pm#___top" =
name=3DNAME>NAME=20
<IMG alt=3D^ src=3D"http://search.cpan.org/s/img/up.gif"></A></H1>
<P>Math::FFT - Perl module to calculate Fast Fourier Transforms</P>
<H1><A class=3Du title=3D"click to go to top of document"=20
href=3D"http://search.cpan.org/~rkobes/Math-FFT-1.28/FFT.pm#___top"=20
name=3DSYNOPSIS>SYNOPSIS <IMG alt=3D^=20
src=3D"http://search.cpan.org/s/img/up.gif"></A></H1><PRE>  use =
Math::FFT;
  my $PI =3D 3.1415926539;
  my $N =3D 64;
  my ($series, $other_series);
  for (my $k=3D0; $k&lt;$N; $k++) {
      $series-&gt;[$k] =3D sin(4*$k*$PI/$N) + cos(6*$k*$PI/$N);
  }
  my $fft =3D new Math::FFT($series);
  my $coeff =3D $fft-&gt;rdft();
  my $spectrum =3D $fft-&gt;spctrm;
  my $original_data =3D $fft-&gt;invrdft($coeff);

  for (my $k=3D0; $k&lt;$N; $k++) {
      $other_series-&gt;[$k] =3D sin(16*$k*$PI/$N) + cos(8*$k*$PI/$N);
  }
  my $other_fft =3D $fft-&gt;clone($other_series);
  my $other_coeff =3D $other_fft-&gt;rdft();
  my $correlation =3D $fft-&gt;correl($other_fft);</PRE>
<H1><A class=3Du title=3D"click to go to top of document"=20
href=3D"http://search.cpan.org/~rkobes/Math-FFT-1.28/FFT.pm#___top"=20
name=3DDESCRIPTION>DESCRIPTION <IMG alt=3D^=20
src=3D"http://search.cpan.org/s/img/up.gif"></A></H1>
<P>This module implements some algorithms for calculating Fast Fourier=20
Transforms for one-dimensional data sets of size 2^n. The data, assumed =
to arise=20
from a constant sampling rate, is represented by an array reference=20
<CODE>$data</CODE> (as described in the methods below), which is then =
used to=20
create a <CODE>Math::FFT</CODE> object as</P><PRE>  my $fft =3D new =
Math::FFT($data);</PRE>
<P>The methods available include the following.</P>
<H2><A class=3Du title=3D"click to go to top of document"=20
href=3D"http://search.cpan.org/~rkobes/Math-FFT-1.28/FFT.pm#___top"=20
name=3DFFT_METHODS>FFT METHODS</A></H2>
<DL>
  <DT><A name=3Dcoeff></A><A =
name=3D"$coeff_=3D_$fft->cdft();"><CODE>$coeff =3D=20
  $fft-&gt;cdft();</CODE></A>=20
  <DD>
  <P>This calculates the complex discrete Fourier transform for a data =
set=20
  <CODE>x[j]</CODE>. Here, <CODE>$data</CODE> is a reference to an array =

  <CODE>data[0...2*n-1]</CODE> holding the data</P><PRE>  data[2*j] =3D =
Re(x[j]),
  data[2*j+1] =3D Im(x[j]), 0&lt;=3Dj&lt;n</PRE>
  <P>An array reference <CODE>$coeff</CODE> is returned consisting =
of</P><PRE>  coeff[2*k] =3D Re(X[k]),
  coeff[2*k+1] =3D Im(X[k]), 0&lt;=3Dk&lt;n</PRE>
  <P>where</P><PRE>   X[k] =3D sum_j=3D0^n-1 x[j]*exp(2*pi*i*j*k/n), =
0&lt;=3Dk&lt;n</PRE>
  <DT><A name=3Dorig_data></A><A=20
  name=3D"$orig_data_=3D_$fft->invcdft([$coeff]);"><CODE>$orig_data =3D=20
  $fft-&gt;invcdft([$coeff]);</CODE></A>=20
  <DD>
  <P>Calculates the inverse complex discrete Fourier transform on a data =
set=20
  <CODE>x[j]</CODE>. If <CODE>$coeff</CODE> is not given, it will be set =
equal=20
  to an earlier call to <CODE>$fft-&gt;cdft()</CODE>. =
<CODE>$coeff</CODE> is a=20
  reference to an array <CODE>coeff[0...2*n-1]</CODE> holding the =
data</P><PRE>  coeff[2*j] =3D Re(x[j]),
  coeff[2*j+1] =3D Im(x[j]), 0&lt;=3Dj&lt;n</PRE>
  <P>An array reference <CODE>$orig_data</CODE> is returned consisting =
of</P><PRE>  orig_data[2*k] =3D Re(X[k]),
  orig_data[2*k+1] =3D Im(X[k]), 0&lt;=3Dk&lt;n</PRE>
  <P>where, excluding the scale,</P><PRE>   X[k] =3D sum_j=3D0^n-1 =
x[j]*exp(-2*pi*i*j*k/n), 0&lt;=3Dk&lt;n</PRE>
  <P>A scaling <CODE>$orig_data-&gt;[$i] *=3D 2.0/$n</CODE> is then done =
so that=20
  <CODE>$orig_data</CODE> coincides with the original =
<CODE>$data</CODE>.</P>
  <DT><A name=3Dcoeff></A><A =
name=3D"$coeff_=3D_$fft->rdft();"><CODE>$coeff =3D=20
  $fft-&gt;rdft();</CODE></A>=20
  <DD>
  <P>This calculates the real discrete Fourier transform for a data set=20
  <CODE>x[j]</CODE>. On input, $data is a reference to an array=20
  <CODE>data[0...n-1]</CODE> holding the data. An array reference=20
  <CODE>$coeff</CODE> is returned consisting of</P><PRE>  coeff[2*k] =3D =
R[k], 0&lt;=3Dk&lt;n/2
  coeff[2*k+1] =3D I[k], 0&lt;k&lt;n/2
  coeff[1] =3D R[n/2]</PRE>
  <P>where</P><PRE>  R[k] =3D sum_j=3D0^n-1 data[j]*cos(2*pi*j*k/n), =
0&lt;=3Dk&lt;=3Dn/2
  I[k] =3D sum_j=3D0^n-1 data[j]*sin(2*pi*j*k/n), 0&lt;k&lt;n/2</PRE>
  <DT><A name=3Dorig_data></A><A=20
  name=3D"$orig_data_=3D_$fft->invrdft([$coeff]);"><CODE>$orig_data =3D=20
  $fft-&gt;invrdft([$coeff]);</CODE></A>=20
  <DD>
  <P>Calculates the inverse real discrete Fourier transform on a data =
set=20
  <CODE>coeff[j]</CODE>. If <CODE>$coeff</CODE> is not given, it will be =
set=20
  equal to an earlier call to <CODE>$fft-&gt;rdft()</CODE>. =
<CODE>$coeff</CODE>=20
  is a reference to an array <CODE>coeff[0...n-1]</CODE> holding the =
data</P><PRE>  coeff[2*j] =3D R[j], 0&lt;=3Dj&lt;n/2
  coeff[2*j+1] =3D I[j], 0&lt;j&lt;n/2
  coeff[1] =3D R[n/2]</PRE>
  <P>An array reference <CODE>$orig_data</CODE> is returned where, =
excluding the=20
  scale,</P><PRE>  orig_data[k] =3D (R[0] + R[n/2]*cos(pi*k))/2 +=20
    sum_j=3D1^n/2-1 R[j]*cos(2*pi*j*k/n) +=20
      sum_j=3D1^n/2-1 I[j]*sin(2*pi*j*k/n), 0&lt;=3Dk&lt;n</PRE>
  <P>A scaling <CODE>$orig_data-&gt;[$i] *=3D 2.0/$n</CODE> is then done =
so that=20
  <CODE>$orig_data</CODE> coincides with the original =
<CODE>$data</CODE>.</P>
  <DT><A name=3Dcoeff></A><A =
name=3D"$coeff_=3D_$fft->ddct();"><CODE>$coeff =3D=20
  $fft-&gt;ddct();</CODE></A>=20
  <DD>
  <P>Computes the discrete cosine tranform on a data set=20
  <CODE>data[0...n-1]</CODE> contained in an array reference =
<CODE>$data</CODE>.=20
  An array reference <CODE>$coeff</CODE> is returned consisting =
of</P><PRE>  coeff[k] =3D C[k], 0&lt;=3Dk&lt;n</PRE>
  <P>where</P><PRE>  C[k] =3D sum_j=3D0^n-1 data[j]*cos(pi*(j+1/2)*k/n), =
0&lt;=3Dk&lt;n </PRE>
  <DT><A name=3Dorig_data></A><A=20
  name=3D"$orig_data_=3D_$fft->invddct([$coeff]);"><CODE>$orig_data =3D=20
  $fft-&gt;invddct([$coeff]);</CODE></A>=20
  <DD>
  <P>Computes the inverse discrete cosine tranform on a data set=20
  <CODE>coeff[0...n-1]</CODE> contained in an array reference=20
  <CODE>$coeff</CODE>. If <CODE>$coeff</CODE> is not given, it will be =
set equal=20
  to an earlier call to <CODE>$fft-&gt;ddct()</CODE>. An array reference =

  <CODE>$orig_data</CODE> is returned consisting of</P><PRE>  =
orig_data[k] =3D C[k], 0&lt;=3Dk&lt;n</PRE>
  <P>where, excluding the scale,</P><PRE>  C[k] =3D sum_j=3D0^n-1 =
coeff[j]*cos(pi*j*(k+1/2)/n), 0&lt;=3Dk&lt;n</PRE>
  <P>A scaling <CODE>$orig_data-&gt;[$i] *=3D 2.0/$n</CODE> is then done =
so that=20
  <CODE>$orig_data</CODE> coincides with the original =
<CODE>$data</CODE>.</P>
  <DT><A name=3Dcoeff></A><A =
name=3D"$coeff_=3D_$fft->ddst();"><CODE>$coeff =3D=20
  $fft-&gt;ddst();</CODE></A>=20
  <DD>
  <P>Computes the discrete sine transform of a data set=20
  <CODE>data[0...n-1]</CODE> contained in an array reference =
<CODE>$data</CODE>.=20
  An array reference <CODE>$coeff</CODE> is returned consisting =
of</P><PRE> coeff[k] =3D S[k], 0&lt;k&lt;n
 coeff[0] =3D S[n]</PRE>
  <P>where</P><PRE> S[k] =3D sum_j=3D0^n-1 data[j]*sin(pi*(j+1/2)*k/n), =
0&lt;k&lt;=3Dn</PRE>
  <DT><A name=3Dorig_data></A><A=20
  name=3D"$orig_data_=3D_$fft->invddst($coeff);"><CODE>$orig_data =3D=20
  $fft-&gt;invddst($coeff);</CODE></A>=20
  <DD>
  <P>Computes the inverse discrete sine transform of a data set=20
  <CODE>coeff[0...n-1]</CODE> contained in an array reference=20
  <CODE>$coeff</CODE>, arranged as</P><PRE> coeff[j] =3D A[j], =
0&lt;j&lt;n
 coeff[0] =3D A[n]</PRE>
  <P>If <CODE>$coeff</CODE> is not given, it will be set equal to an =
earlier=20
  call to <CODE>$fft-&gt;ddst()</CODE>. An array reference=20
  <CODE>$orig_data</CODE> is returned consisting of</P><PRE> =
orig_data[k] =3D S[k], 0&lt;=3Dk&lt;n</PRE>
  <P>where, excluding a scale,</P><PRE> S[k] =3D  sum_j=3D1^n =
A[j]*sin(pi*j*(k+1/2)/n), 0&lt;=3Dk&lt;n</PRE>
  <P>The scaling <CODE>$a-&gt;[$i] *=3D 2.0/$n</CODE> is then done so =
that=20
  <CODE>$orig_data</CODE> coincides with the original =
<CODE>$data</CODE>.</P>
  <DT><A name=3Dcoeff></A><A =
name=3D"$coeff_=3D_$fft->dfct();"><CODE>$coeff =3D=20
  $fft-&gt;dfct();</CODE></A>=20
  <DD>
  <P>Computes the real symmetric discrete Fourier transform of a data =
set=20
  <CODE>data[0...n]</CODE> contained in the array reference =
<CODE>$data</CODE>.=20
  An array reference <CODE>$coeff</CODE> is returned consisting =
of</P><PRE>  coeff[k] =3D C[k], 0&lt;=3Dk&lt;=3Dn</PRE>
  <P>where</P><PRE>  C[k] =3D sum_j=3D0^n data[j]*cos(pi*j*k/n), =
0&lt;=3Dk&lt;=3Dn</PRE>
  <DT><A name=3Dorig_data></A><A=20
  name=3D"$orig_data_=3D_$fft->invdfct($coeff);"><CODE>$orig_data =3D=20
  $fft-&gt;invdfct($coeff);</CODE></A>=20
  <DD>
  <P>Computes the inverse real symmetric discrete Fourier transform of a =
data=20
  set <CODE>coeff[0...n]</CODE> contained in the array reference=20
  <CODE>$coeff</CODE>. If <CODE>$coeff</CODE> is not given, it will be =
set equal=20
  to an earlier call to <CODE>$fft-&gt;dfct()</CODE>. An array reference =

  <CODE>$orig_data</CODE> is returned consisting of</P><PRE>  =
orig_data[k] =3D C[k], 0&lt;=3Dk&lt;=3Dn</PRE>
  <P>where, excluding the scale,</P><PRE>  C[k] =3D sum_j=3D0^n =
coeff[j]*cos(pi*j*k/n), 0&lt;=3Dk&lt;=3Dn</PRE>
  <P>A scaling <CODE>$coeff-&gt;[0] *=3D 0.5</CODE>, =
<CODE>$coeff-&gt;[$n] *=3D=20
  0.5</CODE>, and <CODE>$orig_data-&gt;[$i] *=3D 2.0/$n</CODE> is then =
done so=20
  that <CODE>$orig_data</CODE> coincides with the original=20
  <CODE>$data</CODE>.</P>
  <DT><A name=3Dcoeff></A><A =
name=3D"$coeff_=3D_$fft->dfst();"><CODE>$coeff =3D=20
  $fft-&gt;dfst();</CODE></A>=20
  <DD>
  <P>Computes the real anti-symmetric discrete Fourier transform of a =
data set=20
  <CODE>data[0...n-1]</CODE> contained in the array reference=20
  <CODE>$data</CODE>. An array reference <CODE>$coeff</CODE> is returned =

  consisting of</P><PRE>  coeff[k] =3D C[k], 0&lt;k&lt;n</PRE>
  <P>where</P><PRE>  C[k] =3D sum_j=3D0^n data[j]*sin(pi*j*k/n), =
0&lt;k&lt;n</PRE>
  <P>(<CODE>coeff[0]</CODE> is used for a work area)</P>
  <DT><A name=3Dorig_data></A><A=20
  name=3D"$orig_data_=3D_$fft->invdfst($coeff);"><CODE>$orig_data =3D=20
  $fft-&gt;invdfst($coeff);</CODE></A>=20
  <DD>
  <P>Computes the inverse real anti-symmetric discrete Fourier transform =
of a=20
  data set <CODE>coeff[0...n-1]</CODE> contained in the array reference=20
  <CODE>$coeff</CODE>. If <CODE>$coeff</CODE> is not given, it will be =
set equal=20
  to an earlier call to <CODE>$fft-&gt;dfst()</CODE>. An array reference =

  <CODE>$orig_data</CODE> is returned consisting of</P><PRE>  =
orig_data[k] =3D C[k], 0&lt;k&lt;n</PRE>
  <P>where, excluding the scale,</P><PRE>  C[k] =3D sum_j=3D0^n =
coeff[j]*sin(pi*j*k/n), 0&lt;k&lt;n</PRE>
  <P>A scaling <CODE>$orig_data-&gt;[$i] *=3D 2.0/$n</CODE> is then done =
so that=20
  <CODE>$orig_data</CODE> coincides with the original=20
  <CODE>$data</CODE>.</P></DD></DL>
<H2><A class=3Du title=3D"click to go to top of document"=20
href=3D"http://search.cpan.org/~rkobes/Math-FFT-1.28/FFT.pm#___top"=20
name=3DCLONING>CLONING</A></H2>
<P>The algorithm used in the transforms makes use of arrays for a work =
area and=20
for a cos/sin lookup table dependent only on the size of the data set. =
These=20
arrays are initialized when the <CODE>Math::FFT</CODE> object is created =
and=20
then are populated when a transform method is first invoked. After this, =
they=20
persist for the lifetime of the object.</P>
<P>This aspect is exploited in a <CODE>cloning</CODE> method; if a=20
<CODE>Math::FFT</CODE> object is created for a data set =
<CODE>$data1</CODE> of=20
size <CODE>N</CODE>:</P><PRE>  $fft1 =3D new Math::FFT($data1);</PRE>
<P>then a new <CODE>Math::FFT</CODE> object can be created for a second =
data set=20
<CODE>$data2</CODE> of the <I>same</I> size <CODE>N</CODE> by</P><PRE>   =
$fft2 =3D $fft1-&gt;clone($data2);</PRE>
<P>The <CODE>$fft2</CODE> object will copy the reuseable work area and =
lookup=20
table calculated from <CODE>$fft1</CODE>.</P>
<H2><A class=3Du title=3D"click to go to top of document"=20
href=3D"http://search.cpan.org/~rkobes/Math-FFT-1.28/FFT.pm#___top"=20
name=3DAPPLICATIONS>APPLICATIONS</A></H2>
<P>This module includes some common applications - correlation, =
convolution and=20
deconvolution, and power spectrum - that arise with real data sets. The=20
conventions used here follow that of <I>Numerical Recipes in C</I>, by =
Press,=20
Teukolsky, Vetterling, and Flannery, in which further details of the =
algorithms=20
are given. Note in particular the treatment of end effects by zero =
padding,=20
which is assumed to be done by the user, if required.</P>
<DL>
  <DT><A name=3DCorrelation>Correlation</A>=20
  <DD>
  <P>The correlation between two functions is defined as</P><PRE>        =
     /
   Corr(t) =3D | ds g(s+t) h(s)=20
             /</PRE>
  <P>This may be calculated, for two array references =
<CODE>$data1</CODE> and=20
  <CODE>$data2</CODE> of the same size <CODE>$n</CODE>, as =
either</P><PRE>   $fft1 =3D new Math::FFT($data1);
   $fft2 =3D new Math::FFT($data2);
   $corr =3D $fft1-&gt;correl($fft2);</PRE>
  <P>or as</P><PRE>   $fft1 =3D new Math::FFT($data1);
   $corr =3D $fft1-&gt;correl($data2);</PRE>
  <P>The array reference <CODE>$corr</CODE> is returned in wrap-around =
order -=20
  correlations at increasingly positive lags are in =
<CODE>$corr-&gt;[0]</CODE>=20
  (zero lag) on up to <CODE>$corr-&gt;[$n/2-1]</CODE>, while =
correlations at=20
  increasingly negative lags are in <CODE>$corr-&gt;[$n-1]</CODE> on =
down to=20
  <CODE>$corr-&gt;[$n/2]</CODE>. The sign convention used is such that =
if=20
  <CODE>$data1</CODE> lags <CODE>$data2</CODE> (that is, is shifted to =
the=20
  right), then <CODE>$corr</CODE> will show a peak at positive lags.</P>
  <DT><A name=3DConvolution>Convolution</A>=20
  <DD>
  <P>The convolution of two functions is defined as</P><PRE>             =
  /
   Convlv(t) =3D | ds g(s) h(t-s)=20
               /</PRE>
  <P>This is similar to calculating the correlation between the two =
functions,=20
  but typically the functions here have a quite different physical=20
  interpretation - one is a signal which persists indefinitely in time, =
and the=20
  other is a response function of limited duration. The convolution may =
be=20
  calculated, for two array references <CODE>$data</CODE> and=20
  <CODE>$respn</CODE>, as</P><PRE>   $fft =3D new Math::FFT($data);
   $convlv =3D $fft-&gt;convlv($respn);</PRE>
  <P>with the returned <CODE>$convlv</CODE> being an array reference. =
The method=20
  assumes that the response function <CODE>$respn</CODE> has an =
<I>odd</I>=20
  number of elements <CODE>$m</CODE> less than or equal to the number of =

  elements <CODE>$n</CODE> of <CODE>$data</CODE>. <CODE>$respn</CODE> is =
assumed=20
  to be stored in wrap-around order - the first half contains the =
response at=20
  positive times, while the second half, counting down from=20
  <CODE>$respn-&gt;[$m-1]</CODE>, contains the response at negative =
times.</P>
  <DT><A name=3DDeconvolution>Deconvolution</A>=20
  <DD>
  <P>Deconvolution undoes the effects of convoluting a signal with a =
known=20
  response function. In other words, in the relation</P><PRE>            =
   /
   Convlv(t) =3D | ds g(s) h(t-s)=20
               /</PRE>
  <P>deconvolution reconstructs the original signal, given the =
convolution and=20
  the response function. The method is implemented, for two array =
references=20
  <CODE>$data</CODE> and <CODE>$respn</CODE>, as</P><PRE>   $fft =3D new =
Math::FFT($data);
   $deconvlv =3D $fft-&gt;deconvlv($respn);</PRE>
  <P>As a result, if the convolution of a data set <CODE>$data</CODE> =
with a=20
  response function <CODE>$respn</CODE> is calculated as</P><PRE>   =
$fft1 =3D new Math::FFT($data);
   $convlv =3D $fft1-&gt;convlv($respn);</PRE>
  <P>then the deconvolution</P><PRE>   $fft2 =3D new Math::FFT($convlv);
   $deconvlv =3D $fft2-&gt;deconvlv($respn);</PRE>
  <P>will give an array reference <CODE>$deconvlv</CODE> containing the =
same=20
  elements as the original data <CODE>$data</CODE>.</P>
  <DT><A name=3DPower></A><A name=3DPower_Spectrum>Power Spectrum</A>=20
  <DD>
  <P>If the FFT of a real function of <CODE>N</CODE> elements is =
calculated, the=20
  <CODE>N/2+1</CODE> elements of the power spectrum are defined, in =
terms of the=20
  (complex) Fourier coefficients <CODE>C[k]</CODE>, as</P><PRE>   P[0] =
=3D |C[0]|^2 / N^2
   P[k] =3D 2 |C[k]|^2 / N^2   (k =3D 1, 2 ,..., N/2-1)
   P[N/2] =3D |C[N/2]|^2 / N^2</PRE>
  <P>Often for these purposes the data is partitioned into =
<CODE>K</CODE>=20
  segments, each containing <CODE>2M</CODE> elements. The power spectrum =
for=20
  each segment is calculated, and the net power spectrum is the average =
of all=20
  of these segmented spectra.</P>
  <P>Partitioning may be done in one of two ways: <I>non-overlapping</I> =
and=20
  <I>overlapping</I>. Non-overlapping is useful when the data set is =
gathered in=20
  real time, where the number of data points can be varied at will. =
Overlapping=20
  is useful where there is a fixed number of data points. In =
non-overlapping,=20
  the first &lt;2M&gt; elements constitute segment 1, the next =
<CODE>2M</CODE>=20
  elements are segment 2, and so on up to segment <CODE>K</CODE>, for a =
total of=20
  <CODE>2KM</CODE> sampled points. In overlapping, the first and second=20
  <CODE>M</CODE> elements are segment 1, the second and third =
<CODE>M</CODE>=20
  elements are segment 2, and so on, for a total of <CODE>(K+1)M</CODE> =
sampled=20
  points.</P>
  <P>A problem that may arise in this procedure is <I>leakage</I>: the =
power=20
  spectrum calculated for one bin contains contributions from nearby =
bins. To=20
  lessen this effect <I>data windowing</I> is often used: multiply the =
original=20
  data <CODE>d[j]</CODE> by a window function <CODE>w[j]</CODE>, where j =
=3D 0, 1,=20
  ..., N-1. Some popular choices of such functions are</P><PRE>          =
    | j - N/2 |
  w[j] =3D 1 -  | ------- |     ... Bartlett  =20
              |   N/2   |


              / j - N/2 \ 2
  w[j] =3D 1 -  | ------- |     ... Welch =20
              \   N/2   /


           1   /                    \
  w[j] =3D  ---  |1 - cos(2 pi j / N) |     ... Hann =20
           2   \                    /</PRE>
  <P>The <CODE>spctrm</CODE> method, used as</P><PRE>    $fft =3D =
Math::FFT-&gt;new($data);
    $spectrum =3D $fft-&gt;spctrm(%options);</PRE>
  <P>returns an array reference <CODE>$spectrum</CODE> representing the =
power=20
  spectrum for a data set represented by an array reference =
<CODE>$data</CODE>.=20
  The options available are</P>
  <DL>
    <DT><A name=3Dwindow></A><A =
name=3D"window_=3D>_window_name"><CODE>window =3D&gt;=20
    window_name</CODE></A>=20
    <DD>
    <P>This specifies the window function; if not given, no such =
function is=20
    used. Accepted values (see above) are <CODE>"bartlett"</CODE>,=20
    <CODE>"welch"</CODE>, <CODE>"hann"</CODE>, and =
<CODE>\&amp;my_window</CODE>,=20
    where <CODE>my_window</CODE> is a user specified subroutine which =
must be of=20
    the form, for example,</P><PRE>   sub my_window {
      my ($j, $n) =3D @_;
      return 1 - abs(2*($j-$n/2)/$n);
   }</PRE>
    <P>which implements the Bartlett window.</P>
    <DT><A name=3Doverlap></A><A name=3D"overlap_=3D>_1"><CODE>overlap =
=3D&gt;=20
    1</CODE></A>=20
    <DD>
    <P>This specifies whether overlapping should be done; if true (1),=20
    overlapping will be used, whereas if false (0), or not specified, no =

    overlapping is used.</P>
    <DT><A name=3Dsegments></A><A =
name=3D"segments_=3D>_n"><CODE>segments =3D&gt;=20
    n</CODE></A>=20
    <DD>
    <P>This specifies that the data will be partitioned into =
<CODE>n</CODE>=20
    segments. If not specified, no segmentation will be done.</P>
    <DT><A name=3Dnumber></A><A name=3D"number_=3D>_m"><CODE>number =
=3D&gt; m</CODE></A>=20

    <DD>
    <P>This specifies that <CODE>2m</CODE> data points will be used for =
each=20
    segment, and must be a power of 2. The power spectrum returned will =
consist=20
    of <CODE>m+1</CODE> elements.</P></DD></DL></DD></DL>
<H2><A class=3Du title=3D"click to go to top of document"=20
href=3D"http://search.cpan.org/~rkobes/Math-FFT-1.28/FFT.pm#___top"=20
name=3DSTATISTICAL_FUNCTIONS>STATISTICAL FUNCTIONS</A></H2>
<P>For convenience, a number of common statistical functions are =
included for=20
analyzing real data. After creating the object as</P><PRE>  my $fft =3D =
new Math::FFT($data);</PRE>
<P>for a data set represented by the array reference <CODE>$data</CODE> =
of size=20
<CODE>N</CODE>, these methods may be called as follows.</P>
<DL>
  <DT><A name=3Dmean></A><A =
name=3D"$mean_=3D_$fft->mean([$data]);"><CODE>$mean =3D=20
  $fft-&gt;mean([$data]);</CODE></A>=20
  <DD>
  <P>This returns the mean</P><PRE>  1/N * sum_j=3D0^N-1 data[j]</PRE>
  <P>If an array reference <CODE>$data</CODE> is not given, the data set =
used in=20
  creating <CODE>$fft</CODE> will be used.</P>
  <DT><A name=3Dstdev></A><A =
name=3D"$stdev_=3D_$fft->stdev([$data]);"><CODE>$stdev =3D=20
  $fft-&gt;stdev([$data]);</CODE></A>=20
  <DD>
  <P>This returns the standard deviation</P><PRE>  sqrt{ 1/(N-1) * =
sum_j=3D0^N-1 (data[j] - mean)**2 }</PRE>
  <P>If an array reference <CODE>$data</CODE> is not given, the data set =
used in=20
  creating <CODE>$fft</CODE> will be used.</P>
  <DT><A name=3Drms></A><A =
name=3D"$rms_=3D_$fft->rms([$data]);"><CODE>$rms =3D=20
  $fft-&gt;rms([$data]);</CODE></A>=20
  <DD>
  <P>This returns the root mean square</P><PRE>  sqrt{ 1/N * =
sum_j=3D0^N-1 (data[j])**2 }</PRE>
  <P>If an array reference <CODE>$data</CODE> is not given, the data set =
used in=20
  creating <CODE>$fft</CODE> will be used.</P>
  <DT><A name=3Dmin></A><A=20
  name=3D"($min,_$max)_=3D_$fft->range([$data]);"><CODE>($min, $max) =3D =

  $fft-&gt;range([$data]);</CODE></A>=20
  <DD>
  <P>This returns the minimum and maximum values of the data set. If an =
array=20
  reference <CODE>$data</CODE> is not given, the data set used in =
creating=20
  <CODE>$fft</CODE> will be used.</P>
  <DT><A name=3Dmedian></A><A=20
  name=3D"$median_=3D_$fft->median([$data]);"><CODE>$median =3D=20
  $fft-&gt;median([$data]);</CODE></A>=20
  <DD>
  <P>This returns the median of a data set. The median is defined, for =
the=20
  <I>sorted</I> data set, as either the middle element, if the number of =

  elements is odd, or as the interpolated value of the the two values on =
either=20
  side of the middle, if the number of elements is even. If an array =
reference=20
  <CODE>$data</CODE> is not given, the data set used in creating=20
  <CODE>$fft</CODE> will be used.</P></DD></DL>
<H1><A class=3Du title=3D"click to go to top of document"=20
href=3D"http://search.cpan.org/~rkobes/Math-FFT-1.28/FFT.pm#___top" =
name=3DBUGS>BUGS=20
<IMG alt=3D^ src=3D"http://search.cpan.org/s/img/up.gif"></A></H1>
<P>Please report any to Randy Kobes =
&lt;randy@theoryx5.uwinnipeg.ca&gt;</P>
<H1><A class=3Du title=3D"click to go to top of document"=20
href=3D"http://search.cpan.org/~rkobes/Math-FFT-1.28/FFT.pm#___top"=20
name=3DSEE_ALSO>SEE ALSO <IMG alt=3D^=20
src=3D"http://search.cpan.org/s/img/up.gif"></A></H1>
<P><A class=3Dpodlinkpod=20
href=3D"http://search.cpan.org/perldoc?Math%3A%3APari">Math::Pari</A> =
and <A=20
class=3Dpodlinkpod =
href=3D"http://search.cpan.org/perldoc?PDL">PDL</A></P>
<H1><A class=3Du title=3D"click to go to top of document"=20
href=3D"http://search.cpan.org/~rkobes/Math-FFT-1.28/FFT.pm#___top"=20
name=3DCOPYRIGHT>COPYRIGHT <IMG alt=3D^=20
src=3D"http://search.cpan.org/s/img/up.gif"></A></H1>
<P>The algorithm used in this module to calculate the Fourier transforms =
is=20
based on the C routine of fft4g.c available at <A class=3Dpodlinkurl=20
href=3D"http://momonga.t.u-tokyo.ac.jp/~ooura/fft.html">http://momonga.t.=
u-tokyo.ac.jp/~ooura/fft.html</A>,=20
which is copyrighted 1996-99 by Takuya OOURA. The file arrays.c included =
here to=20
handle passing arrays to and from C comes from the PGPLOT module of Karl =

Glazebrook &lt;kgb@aaoepp.aao.gov.au&gt;. The perl code of Math::FFT is=20
copyright 2000,2005 by Randy Kobes &lt;r.kobes@uwinnipeg.ca&gt;, and is=20
distributed under the same terms as Perl itself.</P></DIV></DIV>
<DIV class=3Dfooter>Hosted by <A=20
href=3D"http://www.digitalcraftsmen.net/">craftsmen</A><BR><A=20
href=3D"http://www.digitalcraftsmen.net/"><IMG=20
src=3D"http://search.cpan.org/s/img/DC-LOGO-S.gif"></A> </DIV><!-- Wed =
Jun 27 07:18:57 2007 GMT (0.135208129882812) @eu1 --></BODY></HTML>

------=_NextPart_000_0000_01C7B8D7.3E0E1C20
Content-Type: image/png
Content-Transfer-Encoding: base64
Content-Location: http://search.cpan.org/s/img/cpan_banner.png

iVBORw0KGgoAAAANSUhEUgAAAQgAAABNCAMAAABtygqmAAADAFBMVEW//88CAgIGBgYKCgoODg4S
EhIWFhYaGhoeHh4iIiImJiYqKiouLi4yMjI2NjY6Ojo+Pj5CQkJGRkZKSkpOTk5SUlJWVlZaWlpe
Xl5iYmJmZmZqampubm5ycnJ2dnZ6enp+fn6CgoKGhoaKioqOjo6SkpKWlpaampqenp6ioqKmpqaq
qqqurq6ysrK2tra6urq+vr7CwsLGxsbKysrOzs7S0tLW1tba2tre3t7i4uLm5ubq6uru7u7y8vL2
9vb6+vr+/v4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAACqShimAAAAAXRSTlMAQObYZgAAAAlwSFlzAAALEwAACxMBAJqcGAAAEMFJREFU
eNrtXId2IruyRVLn3NBkkw2YDB3Iwf//Va9KMDO26QDvjO+7b+ZoLQ8Yq7ulXWlXlZhc7r92vJ+L
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

------=_NextPart_000_0000_01C7B8D7.3E0E1C20
Content-Type: image/gif
Content-Transfer-Encoding: base64
Content-Location: http://search.cpan.org/s/img/up.gif

R0lGODlhDwAPAIAAAABmmf///yH5BAEAAAEALAAAAAAPAA8AAAIjhI8Jwe1tXlgvulMpS1crT33W
uGBkpm3pZEEr1qGZHEuSKBYAOw==

------=_NextPart_000_0000_01C7B8D7.3E0E1C20
Content-Type: image/gif
Content-Transfer-Encoding: base64
Content-Location: http://search.cpan.org/s/img/DC-LOGO-S.gif

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
CAA7

------=_NextPart_000_0000_01C7B8D7.3E0E1C20
Content-Type: text/css;
	charset="iso-2022-jp"
Content-Transfer-Encoding: quoted-printable
Content-Location: http://search.cpan.org/s/style.css

BODY {
	BACKGROUND: white
}
.logo {
	BACKGROUND: white
}
BODY {
	PADDING-RIGHT: 1ex; PADDING-LEFT: 1ex; PADDING-BOTTOM: 1ex; MARGIN: =
0px; COLOR: black; PADDING-TOP: 1ex; FONT-FAMILY: arial,sans-serif
}
TABLE {
	BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: =
0px; BORDER-COLLAPSE: collapse; BORDER-RIGHT-WIDTH: 0px; border-spacing: =
0
}
IMG {
	BORDER-RIGHT: 0px; BORDER-TOP: 0px; BORDER-LEFT: 0px; BORDER-BOTTOM: =
0px
}
FORM {
	MARGIN: 0px
}
INPUT {
	MARGIN: 2px
}
.logo {
	FLOAT: left; WIDTH: 264px; HEIGHT: 77px
}
.front .logo {
	DISPLAY: block; FLOAT: none
}
.front .searchbox {
	MARGIN: 2ex auto; TEXT-ALIGN: center
}
.front .menubar {
	TEXT-ALIGN: center
}
.menubar {
	PADDING-RIGHT: 1px; PADDING-LEFT: 1px; BACKGROUND: #006699; =
PADDING-BOTTOM: 1px; MARGIN: 1ex 0px; PADDING-TOP: 1px
}
.menubar A {
	PADDING-RIGHT: 0.8ex; PADDING-LEFT: 0.8ex; PADDING-BOTTOM: 0.8ex; FONT: =
bold 10pt Arial,Helvetica,sans-serif; PADDING-TOP: 0.8ex
}
.menubar A:link {
	COLOR: white; TEXT-DECORATION: none
}
.menubar A:visited {
	COLOR: white; TEXT-DECORATION: none
}
.menubar A:hover {
	COLOR: #ff6600; TEXT-DECORATION: underline
}
A:link {
	BACKGROUND: none transparent scroll repeat 0% 0%; COLOR: #006699
}
A:visited {
	BACKGROUND: none transparent scroll repeat 0% 0%; COLOR: #006699
}
A[href=3D'#POD_ERRORS'] {
	BACKGROUND: none transparent scroll repeat 0% 0%; COLOR: #ff0000
}
TD {
	PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: =
0px; PADDING-TOP: 0px
}
DIV {
	BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: =
0px; BORDER-RIGHT-WIDTH: 0px
}
DT {
	MARGIN-TOP: 1em
}
.credits TD {
	PADDING-RIGHT: 2ex; PADDING-LEFT: 2ex; PADDING-BOTTOM: 0.5ex; =
PADDING-TOP: 0.5ex
}
.huge {
	FONT-SIZE: 32pt
}
.s {
	BACKGROUND: #dddddd
}
.s TD {
	PADDING-RIGHT: 1ex; PADDING-LEFT: 1ex; PADDING-BOTTOM: 0.2ex; =
VERTICAL-ALIGN: baseline; PADDING-TOP: 0.2ex
}
.r TD {
	PADDING-RIGHT: 1ex; PADDING-LEFT: 1ex; PADDING-BOTTOM: 0.2ex; =
VERTICAL-ALIGN: baseline; PADDING-TOP: 0.2ex
}
TH {
	PADDING-RIGHT: 1ex; PADDING-LEFT: 1ex; BACKGROUND: #bbbbbb; =
PADDING-BOTTOM: 0.4ex; PADDING-TOP: 0.4ex; TEXT-ALIGN: left
}
TH A:link {
	BACKGROUND: none transparent scroll repeat 0% 0%; COLOR: black
}
TH A:visited {
	BACKGROUND: none transparent scroll repeat 0% 0%; COLOR: black
}
.box {
	BORDER-RIGHT: #006699 1px solid; PADDING-RIGHT: 0px; BORDER-TOP: =
#006699 1px solid; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 1ex =
0px; BORDER-LEFT: #006699 1px solid; PADDING-TOP: 0px; BORDER-BOTTOM: =
#006699 1px solid
}
.distfiles TD {
	PADDING-RIGHT: 2ex; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; =
VERTICAL-ALIGN: baseline; PADDING-TOP: 0px
}
.manifest TD {
	PADDING-RIGHT: 1ex; PADDING-LEFT: 1ex; PADDING-BOTTOM: 0px; =
VERTICAL-ALIGN: top; PADDING-TOP: 0px
}
.l1 {
	FONT-WEIGHT: bold
}
.l2 {
	FONT-WEIGHT: normal
}
.t1 {
	BACKGROUND: #006699; COLOR: white
}
.t2 {
	BACKGROUND: #006699; COLOR: white
}
.t3 {
	BACKGROUND: #006699; COLOR: white
}
.t4 {
	BACKGROUND: #006699; COLOR: white
}
.t4 {
	PADDING-RIGHT: 0.4ex; PADDING-LEFT: 0.4ex; PADDING-BOTTOM: 0.2ex; =
PADDING-TOP: 0.2ex
}
.t1 {
	PADDING-RIGHT: 1ex; PADDING-LEFT: 1ex; PADDING-BOTTOM: 0.5ex; =
PADDING-TOP: 0.5ex
}
.t2 {
	PADDING-RIGHT: 1ex; PADDING-LEFT: 1ex; PADDING-BOTTOM: 0.5ex; =
PADDING-TOP: 0.5ex
}
.t3 {
	PADDING-RIGHT: 1ex; PADDING-LEFT: 1ex; PADDING-BOTTOM: 0.5ex; =
PADDING-TOP: 0.5ex
}
.box .t1 {
	MARGIN: 0px
}
.box .t2 {
	MARGIN: 0px
}
.box .t3 {
	MARGIN: 0px
}
.t1 {
	FONT-WEIGHT: bold; FONT-SIZE: 1.4em; TEXT-ALIGN: center
}
.t2 {
	FONT-WEIGHT: bold; FONT-SIZE: 1em; TEXT-ALIGN: left
}
.t3 {
	FONT-WEIGHT: normal; FONT-SIZE: 1em; TEXT-ALIGN: left
}
.datecell {
	WIDTH: 17em; TEXT-ALIGN: center
}
.cell {
	PADDING-RIGHT: 1ex; PADDING-LEFT: 1ex; PADDING-BOTTOM: 0.2ex; =
PADDING-TOP: 0.2ex; TEXT-ALIGN: left
}
.label {
	PADDING-RIGHT: 1ex; PADDING-LEFT: 1ex; FONT-WEIGHT: bold; BACKGROUND: =
#aaaaaa; PADDING-BOTTOM: 0.2ex; VERTICAL-ALIGN: baseline; COLOR: black; =
PADDING-TOP: 0.2ex; WHITE-SPACE: nowrap; TEXT-ALIGN: right
}
.categories {
	MARGIN-BOTTOM: 1ex; PADDING-BOTTOM: 1ex; BORDER-BOTTOM: #006699 3px =
double
}
.categories TABLE {
	MARGIN: auto
}
.categories TD {
	PADDING-RIGHT: 1ex; PADDING-LEFT: 1ex; PADDING-BOTTOM: 0.5ex; =
VERTICAL-ALIGN: baseline; PADDING-TOP: 0.5ex
}
.path A {
	FONT-WEIGHT: bold; BACKGROUND: none transparent scroll repeat 0% 0%; =
COLOR: #006699
}
.pages {
	PADDING-RIGHT: 0.4ex; PADDING-LEFT: 0.4ex; BACKGROUND: #dddddd; =
PADDING-BOTTOM: 0.2ex; COLOR: #006699; PADDING-TOP: 0.2ex
}
.path {
	PADDING-RIGHT: 1ex; PADDING-LEFT: 1ex; BACKGROUND: #dddddd; =
PADDING-BOTTOM: 0.5ex; MARGIN: 1ex 0px; COLOR: #006699; PADDING-TOP: =
0.5ex; BORDER-BOTTOM: #006699 1px solid
}
.menubar TD {
	BACKGROUND: #006699; COLOR: white
}
.menubar {
	PADDING-RIGHT: 1px; PADDING-LEFT: 1px; BACKGROUND: #006699; =
PADDING-BOTTOM: 1px; MARGIN: 1ex 0px; COLOR: white; PADDING-TOP: 1px
}
.menubar .links {
	PADDING-RIGHT: 0.2ex; PADDING-LEFT: 0.2ex; BACKGROUND: none transparent =
scroll repeat 0% 0%; PADDING-BOTTOM: 0.2ex; COLOR: white; PADDING-TOP: =
0.2ex; TEXT-ALIGN: left
}
.menubar .searchbar {
	PADDING-RIGHT: 2px; PADDING-LEFT: 2px; BACKGROUND: black; =
PADDING-BOTTOM: 2px; MARGIN: 0px; COLOR: black; PADDING-TOP: 2px; =
TEXT-ALIGN: right
}
A.m:link {
	BACKGROUND: #006699; FONT: bold 10pt Arial,Helvetica,sans-serif; COLOR: =
white; TEXT-DECORATION: none
}
A.m:visited {
	BACKGROUND: #006699; FONT: bold 10pt Arial,Helvetica,sans-serif; COLOR: =
white; TEXT-DECORATION: none
}
A.o:link {
	BACKGROUND: #006699; FONT: bold 10pt Arial,Helvetica,sans-serif; COLOR: =
#ccffcc; TEXT-DECORATION: none
}
A.o:visited {
	BACKGROUND: #006699; FONT: bold 10pt Arial,Helvetica,sans-serif; COLOR: =
#ccffcc; TEXT-DECORATION: none
}
A.o:hover {
	BACKGROUND: none transparent scroll repeat 0% 0%; COLOR: #ff6600; =
TEXT-DECORATION: underline
}
A.m:hover {
	BACKGROUND: none transparent scroll repeat 0% 0%; COLOR: #ff6600; =
TEXT-DECORATION: underline
}
TABLE.dlsip {
	BORDER-RIGHT: #dddddd 0.4ex solid; BORDER-TOP: #dddddd 0.4ex solid; =
BACKGROUND: #dddddd; BORDER-LEFT: #dddddd 0.4ex solid; BORDER-BOTTOM: =
#dddddd 0.4ex solid
}
.pod PRE {
	BORDER-RIGHT: #888888 1px solid; PADDING-RIGHT: 1em; BORDER-TOP: =
#888888 1px solid; PADDING-LEFT: 1em; BACKGROUND: #eeeeee; =
PADDING-BOTTOM: 1em; BORDER-LEFT: #888888 1px solid; COLOR: black; =
PADDING-TOP: 1em; BORDER-BOTTOM: #888888 1px solid; WHITE-SPACE: pre
}
.pod H1 {
	FONT-SIZE: large; BACKGROUND: none transparent scroll repeat 0% 0%; =
COLOR: #006699
}
.pod H1 A {
	TEXT-DECORATION: none
}
.pod H2 A {
	TEXT-DECORATION: none
}
.pod H2 {
	FONT-SIZE: medium; BACKGROUND: none transparent scroll repeat 0% 0%; =
COLOR: #006699
}
.pod IMG {
	VERTICAL-ALIGN: top
}
.pod .toc A {
	TEXT-DECORATION: none
}
.pod .toc LI {
	LINE-HEIGHT: 1.2em; LIST-STYLE-TYPE: none
}
.faq DT {
	FONT-WEIGHT: bold; FONT-SIZE: 1.4em
}
.chmenu {
	PADDING-RIGHT: 0.5ex; PADDING-LEFT: 0.5ex; BACKGROUND: black; =
PADDING-BOTTOM: 0.5ex; MARGIN: 1ex auto; FONT: bold 1.1em =
Arial,Helvetica,sans-serif; COLOR: red; PADDING-TOP: 0.5ex
}
.chmenu TD {
	PADDING-RIGHT: 1ex; PADDING-LEFT: 1ex; PADDING-BOTTOM: 0.2ex; =
PADDING-TOP: 0.2ex
}
.chmenu A:link {
	BACKGROUND: none transparent scroll repeat 0% 0%; COLOR: white; =
TEXT-DECORATION: none
}
.chmenu A:visited {
	BACKGROUND: none transparent scroll repeat 0% 0%; COLOR: white; =
TEXT-DECORATION: none
}
.chmenu A:hover {
	BACKGROUND: none transparent scroll repeat 0% 0%; COLOR: #ff6600; =
TEXT-DECORATION: underline
}
.column {
	PADDING-RIGHT: 1ex; PADDING-LEFT: 1ex; PADDING-BOTTOM: 0.5ex; =
VERTICAL-ALIGN: top; PADDING-TOP: 0.5ex
}
.datebar {
	MARGIN: auto; WIDTH: 14em
}
.date {
	BACKGROUND: none transparent scroll repeat 0% 0%; COLOR: #008000
}
.footer {
	BORDER-TOP: #006699 1px solid; MARGIN-TOP: 1ex; FONT-SIZE: x-small; =
COLOR: #006699; LINE-HEIGHT: 120%; TEXT-ALIGN: right
}
.front .footer {
	BORDER-TOP: medium none
}

------=_NextPart_000_0000_01C7B8D7.3E0E1C20--
