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

📄 tfristft.m

📁 逆短时傅立叶变换源代码.适合于非稳态的时频联合分析,可直接用于MATLAB编程,无解压密码.
💻 M
字号:
function [x,t] = tfristft(tfr,t,h,trace);%TFRISTFT Inverse Short time Fourier transform.%	[X,T]=TFRSTFT(tfr,T,H,TRACE) computes the inverse short-time %	Fourier transform of a discrete-time signal X. This function%	may be used for time-frequency synthesis of signals.% %	X     : signal.%	T     : time instant(s)          (default : 1:length(X)).%	H     : frequency smoothing window, H being normalized so as to%	        be  of unit energy.      (default : Hamming(N/4)). %	TRACE : if nonzero, the progression of the algorithm is shown%	                                 (default : 0).%	TFR   : time-frequency decomposition (complex values). The%	        frequency axis is graduated from -0.5 to 0.5.%%	Example :%	 t=200+(-128:127); sig=[fmconst(200,0.2);fmconst(200,0.4)]; %        h=hamming(57); tfr=tfrstft(sig,t,256,h,1);%        sigsyn=tfristft(tfr,t,h,1);%        plot(t,abs(sigsyn-sig(t)))% %	See also all the time-frequency representations listed in%	the file CONTENTS (TFR*)%	F. Auger, November 1996.%%	------------------- CONFIDENTIAL PROGRAM -------------------- %	This program can not be used without the authorization of its%	author(s). For any comment or bug report, please send e-mail to % 	f.auger@ieee.orgif (nargin<3), error('At least 3 parameters required');elseif (nargin==3), trace=0;end;[N,NbPoints]=size(tfr);[trow,tcol] =size(t);[hrow,hcol] =size(h); Lh=(hrow-1)/2; if (trow~=1), error('T must only have one row'); elseif (hcol~=1)|(rem(hrow,2)==0), error('H must be a smoothing window with odd length');elseif (2^nextpow2(N)~=N), fprintf('For a faster computation, N should be a power of two\n');elseif (tcol~=NbPoints) error('tfr should have as many columns as t has rows.');end; Deltat=t(2:tcol)-t(1:tcol-1); Mini=min(Deltat); Maxi=max(Deltat);if (Mini~=1) & (Maxi~=1), error('The tfr must be computed at each time sample.');end;h=h/norm(h);if trace, disp('Inverse Short-time Fourier transform'); end;tfr=ifft(tfr);x=zeros(tcol,1);for icol=1:tcol, if trace, disprog(icol,tcol,10); end; valuestj=max([1,icol-N/2,icol-Lh]):min([tcol,icol+N/2,icol+Lh]); for tj=valuestj,  tau=icol-tj; indices= rem(N+tau,N)+1;   % fprintf('%g %g %g\n',tj,tau,indices);  x(icol,1)=x(icol,1)+tfr(indices,tj)*h(Lh+1+tau); end; x(icol,1)=x(icol,1)/sum(abs(h(Lh+1+icol-valuestj)).^2);end;if trace, fprintf('\n'); end;

⌨️ 快捷键说明

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