Causal integration in the continuous world is defined as
![]() |
(1) |
![]() |
(2) |
![]() |
(3) |
![]() |
(4) |
![]() |
(5) |
![]() |
(6) |
![]() |
(7) |
real, private :: r = 1.
contains
subroutine leakint_init (rho)
real, intent (in) :: rho
r = rho
end subroutine leakint_init
function leakint_op (adj, add, x, y) result (stat)
integer :: stat
logical, intent (in) :: adj, add
real, dimension (:) :: x, y
call adjnull (adj, add, x, y)
if (adj) then
call integrate (y,size (y),1,x)
else
call integrate (x,1,size (x),y)
end if
stat = 0
contains
subroutine integrate (inp, nb, ne, out)
integer, intent (in) :: nb, ne
real, dimension (:), intent (in) :: inp
real, dimension (:), intent (out) :: out
integer :: i
real :: t
t = 0.
do i = nb, ne, sign (1, ne - nb)
t = r * t + inp (i)
out (i) = out (i) + t
end do
end subroutine integrate
end function leakint_op
end module leakint
module leakint
use adj_mod
The operator function leakint_op contains and
calls the helper subroutine integrate, which
implements recusions (5) and (6). Figure
2 illustrates the program for .
causint90
Figure 2 in1 is an input pulse. C in1 is its causal integral. C' in1 is the anticausal integral of the pulse. in2 is a separated doublet. Its causal integration is a box and its anticausal integration is the negative. CC in2 is the double causal integral of in2. | ![]() |