分数阶傅里叶变换
- 格式:doc
- 大小:301.00 KB
- 文档页数:14
分数阶傅里叶变换的MATLAB仿真计算以及几点讨论
在Haldun M. Ozaktas 和 Orhan Arikan等人的论文《Digital computation of the
fractional Fourier transform》中给出了一种快速计算分数阶傅里叶变换的算法,
其MATLAB计算程序可在.tr/~haldun/fracF.m 上查到。现在基于该程序,对一方波其它,01,1)(ttx进行计算仿真。
注:网上流传较为广泛的FRFT计算程序更为简洁,据称也是Haldun M. Ozaktas
和 Orhan Arikan等人的论文《Digital computation of the fractional Fourier
transform》使用的算法。但是根据Adhemar Bultheel和 Hector E. Martnez Sulbaran的论文《Computation of the Fractional Fourier Transform》中提到,Ozaktas等人的分数阶傅里叶变换的计算程序仅有上述网站这一处,而两个程序的计算结果基本相符。本文使用较为简洁的计算程序,Ozaktas等人的计算程序在附表中给出。
程序如下:
clear
clc
%构造方波其它,01,1)(ttx
dt=0.05;
T=20;
t=-T:dt:T;
n=length(t);
m=1;
for k=1:n;
% tt=-36+k;
tt=-T+k*dt;
if tt>=-m && tt<=m
x(k)=1;
else
x(k)=0;
end end
%确定α的值
alpha=0.01;
p=2*alpha/pi
%调用计算函数
Fx=frft(x,p);
Fx=Fx';
Fr=real(Fx);
Fi=imag(Fx);
A=abs(Fx);
figure,
subplot(2,2,1);
plot(t,Fr,'-',t,Fi,':');title(' α=0.01时的实部和虚部π');
axis([-4,4,-1.5,2]);
subplot(2,2,2);
plot(t,A,'-');title('α=0.01时的幅值');
axis([-4,4,0,2]);
分数阶傅里叶变换计算函数如下:
function Faf = frft(f, a)
% The fast Fractional Fourier Transform
% input: f = samples of the signal
% a = fractional power
% output: Faf = fast Fractional Fourier transform
error(nargchk(2, 2, nargin));
f = f(:);
N = length(f);
shft = rem((0:N-1)+fix(N/2),N)+1;
sN = sqrt(N);
a = mod(a,4);
% do special cases
if (a==0), Faf = f; return; end; if (a==2), Faf = flipud(f); return; end;
if (a==1), Faf(shft,1) = fft(f(shft))/sN; return; end
if (a==3), Faf(shft,1) = ifft(f(shft))*sN; return; end
% reduce to interval 0.5 < a < 1.5
if (a>2.0), a = a-2; f = flipud(f); end
if (a>1.5), a = a-1; f(shft,1) = fft(f(shft))/sN; end
if (a<0.5), a = a+1; f(shft,1) = ifft(f(shft))*sN; end
% the general case for 0.5 < a < 1.5
alpha = a*pi/2;
tana2 = tan(alpha/2);
sina = sin(alpha);
f = [zeros(N-1,1) ; interp(f) ; zeros(N-1,1)];
% chirp premultiplication
chrp = exp(-i*pi/N*tana2/4*(-2*N+2:2*N-2)'.^2);
f = chrp.*f;
% chirp convolution
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);
% chirp post multiplication
Faf = chrp.*Faf;
% normalizing constant
Faf = exp(-i*(1-a)*pi/4)*Faf(N:2:end-N+1);
function xint=interp(x)
% sinc interpolation
N = length(x);
y = zeros(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);
function z = fconv(x,y)
% convolution by fft
N = length([x(:);y(:)])-1;
P = 2^nextpow2(N);
z = ifft( fft(x,P) .* fft(y,P));
z = z(1:N);
从图中可见,当旋转角度0时,分数阶Fourier变换将收敛为方波信号)(tx;当2时,收敛为csin函数。
对于线性调频chirp信号Xk=exp(-j0.01141t2),k=-32,-31……32,变换后的信号波形图如下
几点讨论
一,目前的分数阶傅里叶变换主要有三种快速算法:
1,B. Santhanamand和 J. H. McClellan的论文《The discrete rotational Fourier
transform》中,先计算离散FRFT的核矩阵,再利用FFT来计算离散FRFT。
2,本文中采用的在Haldun M. Ozaktas 和 Orhan Arikan等人的论文《Digital
computation of the fractional Fourier transform》所述的算法,是将FRFT分解为信号的卷积形式,从而利于FFT计算FRFT。
3,Soo-Chang Pei和 Min-Hung Yeh等人在《Two dimensional discrete fractional
Fourier transform》和《Discrete frac-tional fourier transformbased on orthogonal
projections》中,采用矩阵的特征值和特征向量来计算FRFT。
二,Ozaktas 在《Digital computation of the fractional Fourier transform》所述的算法,其实不是“离散”分数阶傅里叶变换的算法,而是对连续分数阶傅里叶变换的数值计算。在C. Candan和 M.A. Kutay等人的论文《The discrete Fractional
Fourier Transform》中介绍了离散分数阶傅里叶变换的算法,并给出了计算仿真图形(错误!未找到引用源。)二者吻合得很好。
图 1 C. Candan和 M.A. Kutay等人离散分数阶傅里叶变换的算法与连续分数阶傅里叶变换的比较
三,在Luis B. Almeida 的论文《The Fractional Fourier Transform and Time
Frequency Representations》中给出了方波的分数阶傅立叶变换图形(图 2)
图 2 Almeida 的论文中给出的方波的分数阶傅立叶变换图形
该图形与讲义中的图形相符。本文中的仿真结果大致与该图形也相符合,但是令人困惑的是无论用那种算法程序,怎样调整输入信号,在2时,虚部都不为零,这与Almeida和讲义中的图形并不一致。而在Haldun M. Ozaktas 和 Orhan
Arikan等人的论文《Digital computation of the fractional Fourier transform》中只给出了幅值的绝对值的图形,并没有给出实部与虚部的结果,因此尚需进一步讨论
图 3 本文中计算的2时,实部与虚部分布 附:
Haldun M. Ozaktas 和 Orhan Arikan等人的论文《Digital computation of the
fractional Fourier transform》所述的算法程序
%FAST COMPUTATION OF THE FRACTIONAL FOURIER TRANSFORM
%by M. Alper Kutay, September 1996, Ankara
%Copyright 1996 M. Alper Kutay
%This code may be used for scientific and educational purposes
%provided credit is given to the publications below:
%
%Haldun M. Ozaktas, Orhan Arikan, M. Alper Kutay, and Gozde Bozdagi,
%Digital computation of the fractional Fourier transform,
%IEEE Transactions on Signal Processing, 44:2141--2150, 1996.
%Haldun M. Ozaktas, Zeev Zalevsky, and M. Alper Kutay,
%The Fractional Fourier Transform with Applications in Optics and
%Signal Processing, Wiley, 2000, chapter 6, page 298.
%
%The several functions given below should be separately saved
%under the same directory. fracF(fc,a) is the function the user
%should call, where fc is the sample vector of the function whose