This is a function I wrote to aid in my study of FM signal modulation.
It computes the bessel function.
It expects n and x to be on the stack and it returns the result of the
bessel function.
Note it is recursive so it should be named J or change the one reference
to this name within the program.
To anyone who enjoys HP28 optimization please work on this. I know it can be
much faster but I just haven't had the time.
J
<< -> n x <<
<< IF n 0 < THEN
n NEG x J
n 2 MOD 2 * 1 - * NEG
ELSE IF x 0 == THEN
n 0 ==
ELSE
17.1032 .2639 n * + .6487 x ABS * + .0018 n * x ABS * -
.6457 n x ABS MAX * +
.5 + FLOOR 2 / CEIL 2 *
0
1.e-50
DUP
DUP 2 *
0
0
-> m bkp1 tiny bk t bn bkp2 <<
m 1 - 0 FOR k
bkp1 'bkp2' STO
bk 'bkp1' STO
2 k 1 + * bkp1 * x / bkp2 - 'bk' STO
IF k n == bk THEN
bk 'bn' STO
END
IF k 0 > k 2 MOD 0 == AND THEN
t 2 bk * + 't' STO
END
if k 0 == THEN
t bk + 't' STO
END
-1 STEP
bn t /
>>
END
END
>>
>>
Ported from MatLab librarys
_______________________________________________________________________________
Wayne Scott | INTERNET: wscott@en.ecn.purdue.edu
Electrical Engineering | BITNET: wscott%ea.ecn.purdue.edu@purccvm
Purdue University | UUCP: {purdue, pur-ee}!en.ecn.purdue.edu!wscott
-------------------------------------------------------------------------------
From: wscott@EN.ECN.PURDUE.EDU (Wayne H Scott)
Newsgroups: comp.sys.handhelds
Subject: new Bessel function
Date: 21 Feb 90 05:14:53 GMT
This is a new version of the bessel function program. It is faster by
using stack functions and it fixes one bug in the previous posting.
This is a function I wrote to aid in my study of FM signal modulation.
It computes the bessel function.
It expects n and x to be on the stack and it returns the result of the
bessel function.
Note it is recursive so it should be named J or change the one reference
to this name within the program.
J
<< -> n x <<
<< IF n 0 < THEN
n NEG x J
n 2 MOD 2 * 1 - * NEG
ELSE IF x 0 == THEN
n 0 ==
ELSE
17.1032 .2639 n * + .6487 x ABS * + .0018 n * x ABS * -
.6457 n x ABS MAX * +
.5 + FLOOR 2 / CEIL 2 *
1.e-50
0
-> m tiny bn <<
tiny 2 *
0
0
tiny
m 1 - 0 FOR k
ROT DROP
2 k 1 + * OVER * x / 3 PICK -
IF k n == THEN
DUP 'bn' STO
END
if k 0 == THEN
DUP 5 ROLL + 4 ROLLD
ELSE
IF k 2 MOD 0 == THEN
DUP 2 * 5 ROLL + 4 ROLLD
END
END
-1 STEP
3 DROPN
bn SWAP /
>>
END
END
>>
>>
Ported from MatLab librarys.
_______________________________________________________________________________
Wayne Scott | INTERNET: wscott@en.ecn.purdue.edu
Electrical Engineering | BITNET: wscott%ea.ecn.purdue.edu@purccvm
Purdue University | UUCP: {purdue, pur-ee}!en.ecn.purdue.edu!wscott