fortsa_stats
ctsa/fortsa
provides us some useful stats functions.
module fortsa_stats_m
use, intrinsic :: iso_c_binding, only: c_int, c_double
implicit none
private
public :: acvf, acvf_opt, acvf2acf
public :: pacf, pacf_opt
interface
!> Auto Covariance Function
subroutine acvf(vec, N, par, M) bind(c, name='acvf')
import c_int, c_double
real(kind=c_double), intent(in) :: vec(*)
real(kind=c_double), intent(out) :: par(*)
integer(kind=c_int), value, intent(in) :: N, M
end subroutine acvf
!> Method 0 : Regular Method. Slow for large input length.
!> Method 1 : FFT based Method. Use it if data length is large
subroutine acvf_opt(vec, N, method, par, M) bind(c, name='acvf_opt')
import c_int, c_double
real(kind=c_double), intent(in) :: vec(*)
real(kind=c_double), intent(out) :: par(*)
integer(kind=c_int), value, intent(in) :: N, method, M
end subroutine acvf_opt
!> Converts Autocovariance to autocorrelation function
pure subroutine acvf2acf(acf, M) bind(c, name='acvf2acf')
import c_int, c_double
real(kind=c_double), intent(inout) :: acf(*)
integer(kind=c_int), value, intent(in) :: M
end subroutine acvf2acf
!> Partial Auto Covariance Function
pure subroutine pacf(vec, N, par, M) bind(c, name='pacf')
import c_int, c_double
real(kind=c_double), intent(in) :: vec(*)
real(kind=c_double), intent(out) :: par(*)
integer(kind=c_int), value, intent(in) :: N, M
end subroutine pacf
!> Method 0 : Yule-Walker
!> Method 1 : Burg
!> Method 2 : Box-Jenkins Conditional MLE
subroutine pacf_opt(vec, N, method, par, M) bind(c, name='pacf_opt')
import c_int, c_double
real(kind=c_double), intent(in) :: vec(*)
real(kind=c_double), intent(out) :: par(*)
integer(kind=c_int), value, intent(in) :: N, method, M
end subroutine pacf_opt
end interface
end module fortsa_stats_m