%	Derivada Fracionaria de Ordem 1/2 Real
%
%	Dx = half(s,x,d)
%
%	s : 1 para causal, -1 para anti-causal
%	x : Amostra 
%	d : Intervalo da amostra
%
function df = half(s,x,d);
%
[m,k] = size(x); %m=nr.linhas de x; k=nr.colunas de x
if rem(k,2) > 0; %resto da divisao k/2 => testa se k eh par
  n = k + 1;
  x(:,n) = x(:,k); %faz x ter nr.par de colunas (repete a ultima)  
else;
  n = k;
end;
n2 = n / 2;
tm = (n-1) * d; %comprimento do sinal x
%
dw = 2 * pi / tm;
w = -(n2-1) * dw : dw : n2 * dw;
a = exp(sign(s)*i*pi/4);
for i = 1 : m;
  xx = fft(x(i,:));
  xc = [xx(n2+2:n)/a,xx(1:n2+1)*a];
  xt = xc .* sqrt(abs(w));
  df(i,:) = real(ifft(xt([n2:n,1:n2-1])));
end;
%
df = df(:,1:k);
%

