Transformada fraccionaria de Fourier
función Faf = frft(f, a)
% La Transformada Fraccionada de Fourier rápida
% entrada: f = muestras de la señal
% a = potencia fraccionaria
% de salida: Faf = transformada fraccional de Fourier rápida
error(nargchk(2, 2, nargin));
f = f(:);
N = longitud(f);
shft = rem((0:N-1)+fix(N/2),N)+1 ;
sN = sqrt(N);
a = mod(a,4);
% hacen casos especiales
if (a==0), Faf = f; fin;
if (a==2), Faf = flipud(f); a==1), Faf(shft,1) = fft(f(shft))/sN; fin
if (a==3), Faf(shft,1) = ifft( f(shft))*sN; return; end
% reducir al intervalo 0.5 < a < 1.5
if (a>2.0), a = a-2; (f); fin
if (a>1.5), a = a-1; f(shft,1) = fft(f(shft))/sN; if (a<0.5), a = a+1; f(shft,1) = ifft(f(shft))*sN; end
% el caso general para 0.5 < a < 1.5 p>
alfa = a*pi/2;
tana2 = tan(alfa/2);
sina = sin(alfa);
f = [ceros(N-1,1) ; interp(f) ; ceros(N-1,1)];
% premultiplicación de chirrido
chrp = exp(-i) *pi/N*tana2/4*(-2*N+2:2*N-2)'.^2);
f = chrp.*f;
% de convolución de chirrido
c = pi/N/sina/4;
Faf = fconv(exp(i*c*(-(4*N-4):4*N -4)'.^2),f);
Faf = Faf(4*N-3:8*N-7)*sqrt(c/pi);
% chirrido post multiplicación
Faf = chrp.*Faf;
% constante de normalización
Faf = exp(-i*(1-a)*pi/ 4)*Faf(N:2:end-N+1);
función xint=interp(x)
% interpolación sinc
N = longitud (x);
y = ceros(2*N-1,1);
<p>y(1:2:2*N-1) = x;
xint = fconv(y(1:2*N-1), sinc([-(2*N-3) :(2*N-3)]'/2));
xint = xint(2*N-2:end-2*N+3);
función z = fconv(x,y)
% de convolución por fft
N = longitud([x(:);y(:)])-1;
P = 2^nextpow2(N);
z = ifft( fft(x,P).* fft(y,P));
z = z(1: N);