#
# R VERSION
#
arfima.whittle<-function(series)           
{    
 #    
 #   Computes Whittle MLE for ARFIMA(0,d,0) models    
 #    
 optim(par = 0.25, whittle.loglik,gr=NULL,method = "L-BFGS-B", lo = 0., up = 0.499, series = series)$par
}    
#
# AUXILIARY FUNCTIONS
# 
whittle.loglik<-function(x, series)  
{  
#
#   Whittle Loglikelihood
#
 series <- series - mean(series)  
 a <- fft(series)  
 a <- Mod(a)^2  
 n <- length(series)  
 a <- a/(2 * pi * n)  
 m <- n/2  
 #  
 #Fourier frequencies  
 #  
 w <- (2 * pi * (1:m))/n  
 #  
 #Spectral Density:  
 #  
 b <- fn.density(w, x)  
 #  
 #  Calculate sigma^2  
 #  
 sigma2 <- (2 * sum(a[1:m]/b))/n  
 #  
 #  Whittle Log-likelihood  
 #  
 loglik <- 2 * pi * (sum(log(b)) + sum(a[1:m]/b)/sigma2)  
 return(loglik/n + pi * log(sigma2))  
}  
fn.density<-function(x, d)
{
#
#  Spectral density of an ARFIMA(0,d,0) process
#
a <- (2 * sin(x/2))^(-2 * d)
a <- a/(2 * pi)
return(a)
}