⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 cdpei.mht

📁 离散分数阶傅立叶变换
💻 MHT
字号:
From: <óé Microsoft Internet Explorer 5 ±£′?>
Subject: 
Date: Fri, 10 Sep 2004 12:03:16 +0800
MIME-Version: 1.0
Content-Type: text/html;
	charset="iso-8859-1"
Content-Transfer-Encoding: quoted-printable
Content-Location: http://www.cs.kuleuven.ac.be/cwis/research/nalag/research/software/FRFT/cdpei.m
X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2900.2180

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML><HEAD>
<META http-equiv=3DContent-Type content=3D"text/html; =
charset=3Diso-8859-1">
<META content=3D"MSHTML 6.00.2900.2180" name=3DGENERATOR></HEAD>
<BODY><PRE>function Fa=3DDFPei(f,a)

% Compute discrete fractional Fourier transform
% of order a of vector f according to Pei/Yeh/Tseng

N=3Dlength(f); f=3Df(:);
shft =3D rem((0:N-1)+fix(N/2),N)+1;

global hn_saved p_saved
if (nargin=3D=3D2), p =3D 2; end;
p =3D min(max(2,p),N-1);

if (length(hn_saved) ~=3D N | p_saved ~=3D p),
    hn =3D make_hn(N,p);
    hn_saved =3D hn; p_saved =3D p;
else
    hn =3D hn_saved;
end;
Fa(shft,1)=3Dhn*(exp(-j*pi/2*a*[0:N-1]).'.*(hn'*f(shft)));

function hn =3D make_hn(N,p)
even =3D rem(N,2)=3D=3D0;
shft =3D rem((0:N-1)+fix(N/2),N)+1;
% Gauss-Hermite samples
u =3D (-N/2:(N/2)-1)'/sqrt(N/2/pi);
ex =3D exp(-u.^2/2);=20
hn(:,1) =3D ex; r =3D norm(hn(:,1)); hn(:,1) =3D hn(:,1)/r;
hn(:,2)=3D2*u.*ex; s =3D norm(hn(:,2)); hn(:,2) =3D hn(:,2)/s;
r =3D s/r;
for k =3D 3:N+1
     hn(:,k)=3D2*r*u.*hn(:,k-1)-2*(k-2)*hn(:,k-2);
     s =3D norm(hn(:,k)); hn(:,k) =3D hn(:,k)/s;
     r=3Ds/r;
end
if (even), hn(:,N)=3D[]; else, hn(:,N+1)=3D[]; end
hn(shft,:) =3D hn;

% eigenvectors of DFT matrix
E =3D make_E(N,N/2);

for k =3D 1:4
 if even % N even
  switch k
   case {1,3}
    indx =3D k:4:N+1;
    if (rem(N,4) ~=3D 0 &amp;&amp; k=3D=3D3) || (rem(N,4) =3D=3D 0 =
&amp;&amp; k=3D=3D1),
        indx(end) =3D indx(end)-1;
    end
   case {2,4}
    indx =3D k:4:N-1;
   end
 else % N odd
   indx =3D k:4:N;
 end
 hn(:,k:4:N) =3D orth(E(:,indx)*E(:,indx)'*hn(:,indx));
end

function E =3D make_E(N,p)
%Returns sorted eigenvectors and eigenvalues of corresponding vectors

%Construct matrix H, use approx order ord

d2 =3D [1 -2 1]; d_p =3D 1; s =3D 0; st =3D zeros(1,N);
for k =3D 1:p/2,
    d_p =3D conv(d2,d_p);
    st([N-k+1:N,1:k+1]) =3D d_p; st(1) =3D 0;
    s =3D s + (-1)^(k-1)*prod(1:(k-1))^2/prod(1:2*k)*2*st;       =20
end;
% H =3D circulant + diagonal
col =3D (0:N-1)'; row =3D (N:-1:1);
idx =3D col(:,ones(N,1)) + row(ones(N,1),:);
st =3D [s(N:-1:2).';s(:)];
H =3D st(idx)+diag(real(fft(s)));

%Construct transformation matrix V

r =3D floor(N/2);
even =3D ~rem(N,2);
V1 =3D (eye(N-1)+flipud(eye(N-1)))/sqrt(2);
V1(N-r:end,N-r:end) =3D -V1(N-r:end,N-r:end);
if (even), V1(r,r)=3D1; end
V =3D eye(N); V(2:N,2:N) =3D V1;

% Compute eigenvectors

VHV =3D V*H*V';
E =3D zeros(N);
Ev =3D VHV(1:r+1,1:r+1);           Od =3D VHV(r+2:N,r+2:N);
[ve,ee]=3Deig(Ev);                 [vo,eo]=3Deig(Od);=20
%malab eig returns sorted eigenvalues
%if different routine gives unsorted eigvals, then sort first
%[d,inde] =3D sort(diag(ee));      [d,indo] =3D sort(diag(eo));
%ve =3D ve(:,inde');               vo =3D vo(:,indo');
E(1:r+1,1:r+1) =3D fliplr(ve);     E(r+2:N,r+2:N) =3D fliplr(vo);
E =3D V*E;
%shuffle eigenvectors
ind =3D [1:r+1;r+2:2*r+2]; ind =3D ind(:);
if (even), ind([N,N+2])=3D[]; else ind(N+1)=3D[]; end
E =3D E(:,ind');
</PRE></BODY></HTML>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -