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

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);

hacer casos especiales

if (a==0), Faf = f; retorno; fin;

if (a==2), Faf = flipud(f); fin;

if (a==1), Faf); (shft, 1) = fft(f(shft))/sN; fin

if (a==3), Faf(shft, 1) = ifft(f(shft))*sN ; retorno; fin

reducir al intervalo 0,5 lt; a lt; /p>

if (agt; 1.5), a = a-1; f(shft, 1) = fft(f(shft))/sN; , a = a 1; f(shft, 1) = ifft(f(shft))*sN; finaliza el caso general para 0,5 lt; = a*pi/2;

tana2 = tan(alfa/2);

sina = sin(alfa);

f = [ceros(N -1, 1); interp(f); zeros(N-1, 1)];

premultiplicación de chirrido

chrp = exp(-i*pi/N*tana2/ 4*(-2*N 2:2*N-2)'.^2);

f = chrp.*f;

convolución 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 después de la 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);

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)

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 );

>