File: Discrete-Hankel-Transform-Definition.html

package info (click to toggle)
gsl-ref-html 2.3-1
  • links: PTS
  • area: non-free
  • in suites: bullseye, buster, sid
  • size: 6,876 kB
  • ctags: 4,574
  • sloc: makefile: 35
file content (156 lines) | stat: -rw-r--r-- 7,818 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<!-- Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016 The GSL Team.

Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License, Version 1.3 or
any later version published by the Free Software Foundation; with the
Invariant Sections being "GNU General Public License" and "Free Software
Needs Free Documentation", the Front-Cover text being "A GNU Manual",
and with the Back-Cover Text being (a) (see below). A copy of the
license is included in the section entitled "GNU Free Documentation
License".

(a) The Back-Cover Text is: "You have the freedom to copy and modify this
GNU Manual." -->
<!-- Created by GNU Texinfo 5.1, http://www.gnu.org/software/texinfo/ -->
<head>
<title>GNU Scientific Library &ndash; Reference Manual: Discrete Hankel Transform Definition</title>

<meta name="description" content="GNU Scientific Library &ndash; Reference Manual: Discrete Hankel Transform Definition">
<meta name="keywords" content="GNU Scientific Library &ndash; Reference Manual: Discrete Hankel Transform Definition">
<meta name="resource-type" content="document">
<meta name="distribution" content="global">
<meta name="Generator" content="makeinfo">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<link href="index.html#Top" rel="start" title="Top">
<link href="Function-Index.html#Function-Index" rel="index" title="Function Index">
<link href="Discrete-Hankel-Transforms.html#Discrete-Hankel-Transforms" rel="up" title="Discrete Hankel Transforms">
<link href="Discrete-Hankel-Transform-Functions.html#Discrete-Hankel-Transform-Functions" rel="next" title="Discrete Hankel Transform Functions">
<link href="Discrete-Hankel-Transforms.html#Discrete-Hankel-Transforms" rel="previous" title="Discrete Hankel Transforms">
<style type="text/css">
<!--
a.summary-letter {text-decoration: none}
blockquote.smallquotation {font-size: smaller}
div.display {margin-left: 3.2em}
div.example {margin-left: 3.2em}
div.indentedblock {margin-left: 3.2em}
div.lisp {margin-left: 3.2em}
div.smalldisplay {margin-left: 3.2em}
div.smallexample {margin-left: 3.2em}
div.smallindentedblock {margin-left: 3.2em; font-size: smaller}
div.smalllisp {margin-left: 3.2em}
kbd {font-style:oblique}
pre.display {font-family: inherit}
pre.format {font-family: inherit}
pre.menu-comment {font-family: serif}
pre.menu-preformatted {font-family: serif}
pre.smalldisplay {font-family: inherit; font-size: smaller}
pre.smallexample {font-size: smaller}
pre.smallformat {font-family: inherit; font-size: smaller}
pre.smalllisp {font-size: smaller}
span.nocodebreak {white-space:nowrap}
span.nolinebreak {white-space:nowrap}
span.roman {font-family:serif; font-weight:normal}
span.sansserif {font-family:sans-serif; font-weight:normal}
ul.no-bullet {list-style: none}
-->
</style>


</head>

<body lang="en" bgcolor="#FFFFFF" text="#000000" link="#0000FF" vlink="#800080" alink="#FF0000">
<a name="Discrete-Hankel-Transform-Definition"></a>
<div class="header">
<p>
Next: <a href="Discrete-Hankel-Transform-Functions.html#Discrete-Hankel-Transform-Functions" accesskey="n" rel="next">Discrete Hankel Transform Functions</a>, Up: <a href="Discrete-Hankel-Transforms.html#Discrete-Hankel-Transforms" accesskey="u" rel="up">Discrete Hankel Transforms</a> &nbsp; [<a href="Function-Index.html#Function-Index" title="Index" rel="index">Index</a>]</p>
</div>
<hr>
<a name="Definitions-2"></a>
<h3 class="section">33.1 Definitions</h3>

<p>The discrete Hankel transform acts on a vector of sampled data, where
the samples are assumed to have been taken at points related to the
zeros of a Bessel function of fixed order; compare this to the case of
the discrete Fourier transform, where samples are taken at points
related to the zeroes of the sine or cosine function.
</p>
<p>Starting with its definition, the Hankel transform (or Bessel transform) of
order <em>\nu</em> of a function <em>f</em> with <em>\nu &gt; -1/2</em> is defined as
(see Johnson, 1987 and Lemoine, 1994)
</p><div class="example">
<pre class="example">F_\nu(u) = \int_0^\infty f(t) J_\nu(u t) t dt
</pre></div>

<p>If the integral exists, <em>F_\nu</em> is called the Hankel transformation
of <em>f</em>. The reverse transform is given by
</p><div class="example">
<pre class="example">f(t) = \int_0^\infty F_\nu(u) J_\nu(u t) u du ,
</pre></div>

<p>where <em>\int_0^\infty f(t) t^{1/2} dt</em> must exist and be
absolutely convergent, and where <em>f(t)</em> satisfies Dirichlet&rsquo;s
conditions (of limited total fluctuations) in the interval
<em>[0,\infty]</em>.
</p>
<p>Now the discrete Hankel transform works on a discrete function
<em>f</em>, which is sampled on points <em>n=1...M</em> located at
positions <em>t_n=(j_{\nu,n}/j_{\nu,M}) X</em> in real space and
at <em>u_n=j_{\nu,n}/X</em> in reciprocal space. Here,
<em>j_{\nu,m}</em> are the m-th zeros of the Bessel function
<em>J_\nu(x)</em> arranged in ascending order. Moreover, the
discrete functions are assumed to be band limited, so
<em>f(t_n)=0</em> and <em>F(u_n)=0</em> for <em>n&gt;M</em>. Accordingly,
the function <em>f</em> is defined on the interval <em>[0,X]</em>.
</p>
<p>Following the work of Johnson, 1987 and
Lemoine, 1994, the discrete Hankel transform is given by
</p><div class="example">
<pre class="example">F_\nu(u_m) = (2 X^2 / j_(\nu,M)^2)
      \sum_{k=1}^{M-1} f(j_(\nu,k) X/j_(\nu,M))
          (J_\nu(j_(\nu,m) j_(\nu,k) / j_(\nu,M)) / J_(\nu+1)(j_(\nu,k))^2).
</pre></div>

<p>It is this discrete expression which defines the discrete Hankel
transform calculated by GSL. In GSL, forward and backward transforms
are defined equally and calculate <em>F_\nu(u_m)</em>.
Following Johnson, the backward transform reads
</p><div class="example">
<pre class="example">f(t_k) = (2 / X^2)
      \sum_{m=1}^{M-1} F(j_(\nu,m)/X)
          (J_\nu(j_(\nu,m) j_(\nu,k) / j_(\nu,M)) / J_(\nu+1)(j_(\nu,m))^2).
</pre></div>

<p>Obviously, using the forward transform instead of the backward transform gives an
additional factor <em>X^4/j_{\nu,M}^2=t_m^2/u_m^2</em>.
</p>
<p>The kernel in the summation above defines the matrix of the
<em>\nu</em>-Hankel transform of size <em>M-1</em>. The coefficients of
this matrix, being dependent on <em>\nu</em> and <em>M</em>, must be
precomputed and stored; the <code>gsl_dht</code> object encapsulates this
data. The allocation function <code>gsl_dht_alloc</code> returns a
<code>gsl_dht</code> object which must be properly initialized with
<code>gsl_dht_init</code> before it can be used to perform transforms on data
sample vectors, for fixed <em>\nu</em> and <em>M</em>, using the
<code>gsl_dht_apply</code> function. The implementation allows to define the
length <em>X</em> of the fundamental interval, for convenience, while
discrete Hankel transforms are often defined on the unit interval
instead of <em>[0,X]</em>.
</p>
<p>Notice that by assumption <em>f(t)</em> vanishes at the endpoints
of the interval, consistent with the inversion formula
and the sampling formula given above. Therefore, this transform
corresponds to an orthogonal expansion in eigenfunctions
of the Dirichlet problem for the Bessel differential equation.
</p>
<hr>
<div class="header">
<p>
Next: <a href="Discrete-Hankel-Transform-Functions.html#Discrete-Hankel-Transform-Functions" accesskey="n" rel="next">Discrete Hankel Transform Functions</a>, Up: <a href="Discrete-Hankel-Transforms.html#Discrete-Hankel-Transforms" accesskey="u" rel="up">Discrete Hankel Transforms</a> &nbsp; [<a href="Function-Index.html#Function-Index" title="Index" rel="index">Index</a>]</p>
</div>



</body>
</html>