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

📄 dfrt.m

📁 分数阶fourior变换的源码
💻 M
字号:
%DISCRETE FRACTIONAL FOURIER TRANSFORM MATRIX GENERATOR%by Cagatay Candan <candan@ieee.org>, July 1998, Ankara%Copyright 1998 Cagatay Candan%This code may be used for scientific and educational purposes %provided credit is given to the publications below:%%This Matlab function generates the discrete fractional%Fourier transform matrix originally described in:%Cagatay Candan, M. Alper Kutay, and Haldun M. Ozaktas,%The discrete fractional Fourier Transform,%IEEE Transactions on Signal Processing, 48:1329-1337, May 2000,%(also in Proc ICASSP'99, pages 1713-1716, IEEE, 1999);%and further described in:%Haldun M. Ozaktas, Zeev Zalevsky, and M. Alper Kutay,%The Fractional Fourier Transform with Applications in Optics and%Signal Processing, Wiley, 2000, chapter 6.function F=dFRT(N,a,ord)%function F=dFRT(N,a,ord) returns the NxN discrete fractional %Fourier transform matrix with fractional order 'a'. %The optional argument 'ord' is the order of approximation %of the S matrix (default 2). %Note: This Matlab file has some subfunctions for generating S_{2k}%      matrices, eigenvector ordering etc. These functions are not%      visible from the Matlab workspace.global Evec Eval ordpif nargin==2, ord=2;end;if (length(Evec)~=N | ordp~=ord),	[Evec,Eval]=dis_s(N,ord);	ordp=ord;end;even=~rem(N,2);F=Evec*diag(exp(-j*pi/2*a*([0:N-2 N-1+even])))*Evec';%%%%%%function M=cconvm(v);%Generates circular Convm matrixv=v(:);N=length(v);M=zeros(N,N);dum=v;for k=1:N,	M(:,k)=dum;	dum=[dum(N); dum(1:N-1)];end;%%%%%%function S=creates(N,ord)%Creates S matrix of approximation order ord%When ord=1, elementary S matrix is returnedord=ord/2;dum=[1 -2 1];s=0;for k=1:ord,	s=(-1)^(k-1)*prod(1:(k-1))^2/prod(1:2*k)*2*[0 dum(k+2:2*k+1) zeros(1,N-1-2*k) dum(1:k)]+s;	dum=conv(dum,[1 -2 1]);end;S=cconvm(s)+diag(real(fft(s)));%%%%%%function [Evec,Eval]=dis_s(N,ord)%function [Evec,Eval]=dis_s(N)%Returns sorted eigenvectors and eigenvalues of corresponding vectorsif nargin==1, ord=2;end;%%Construct S Matrix%S=diag(2*cos(2*pi/N*([0:N-1])))+diag(ones(1,N-1),1)+diag(ones(1,N-1),-1);%S(1,N)=1;S(N,1)=1;%%S=creates(N,ord);%%%%%%%Construct P matrixp=N;r=floor(p/2);P=zeros(p,p);P(1,1)=1;even=~rem(p,2);for k=1:r-even,	P(k+1,k+1)=1/sqrt(2);	P(k+1,p-(k+1)+2)=1/sqrt(2);end;if (even), P(r+1,r+1)=1; end;for k=r+1:p-1,	P(k+1,k+1)=-1/sqrt(2);	P(k+1,p-(k+1)+2)=1/sqrt(2);end;%%%%%%CS=P*S*P';C2=CS(floor(1:N/2+1),floor(1:N/2+1));S2=CS(floor(N/2+2):N,floor(N/2+2):N);[vc,ec]=eig(C2);[vs,es]=eig(S2);qvc=[vc ;zeros(ceil(N/2-1),floor(N/2+1))];SC2=P*qvc;	%Even Eigenvector of Sqvs=[zeros(floor(N/2+1),ceil(N/2-1));vs];SS2=P*qvs;	%Odd Eigenvector of Ses=diag(es);ec=diag(ec);[d,in]=sort(-ec);SC2=SC2(:,in);ec=ec(in);[d,in]=sort(-es);SS2=SS2(:,in);es=es(in);if rem(N,2)==0,	S2C2=zeros(N,N+1);	SS2(:,size(SS2,2)+1)=zeros(N,1);	S2C2(:,[0:2:N]+1)=SC2;	S2C2(:,[1:2:N]+1)=SS2;	S2C2(:,N)=[];else 	S2C2=zeros(N,N);	S2C2(:,[0:2:N]+1)=SC2;	S2C2(:,[1:2:N-1]+1)=SS2;end;Evec=S2C2;Eval=(-j).^[ 0:N-2 (N-1)+even];%END

⌨️ 快捷键说明

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