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

📄 tffilter.m

📁 小波变换工具包
💻 M
字号:
function y = tffilter(tfr,x,t,trace);
%TFFILTER Time frequency filtering of a signal.
%       Y=TFFILTER(TFR,X,T,TRACE) filters the signal X
%	with a non stationary filter. 
%	
% 
%	X     : input signal (must be analytic).
%	T     : time instant(s)          (default : 1:length(X)).
%	TRACE : if nonzero, the progression of the algorithm is shown
%	                                 (default : 0).
%	TFR   : Wigner-Ville distribution of the filter
%	        frequency axis is graduated from 0.0 to 0.5.
%
%	Example 1:
%        Nt=128; t=1:Nt; sig=fmlin(Nt,0.05,0.3)+fmlin(Nt,0.2,0.45); 
%        sig(Nt/2)=sig(Nt/2)+8; figure(1);tfrwv(sig,t);
%        Nf=128;freqs=0.5*(0:Nf-1).'/Nf; 
%        for tloop=1:Nt, 
%        rate=0.2*(tloop-1)/(Nt-1);
%        H(:,tloop)=(0+rate<freqs).*(freqs<0.1+rate); 
%        end;
%        y=tffilter(H,sig,t,1);figure(2); tfrwv(y,t);
%
%       Example 2:
%
%        Nt=128; t=1:Nt; sig=atoms(128,[64 0.25 sqrt(128) 1]);
%        figure(1);tfrwv(sig,t);
%        Nf=64;
%        H=zeros(Nf,Nt);H(Nf/4+(-15:15),Nt/2+(-15:15))=ones(31);
%        y=tffilter(H,sig,t,1);figure(2); tfrwv(y,t);
%
% 
%	See also: tfristft

%	F. Auger, Jan 1997.
%
%	------------------- 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 
%       auger@ge44.univ-nantes.fr 

% this function is based on the following reference :
% W. Kozek, F. Hlawatsch, A comparative study of linear and non-linear
% time-frequency filters, proc IEEE int symp on time-frequency and 
% time-scale analysis, pp 163-166, victoria, canada, 1992.

if (nargin<3),
 error('At least 3 parameters required');
elseif (nargin==3),
 trace=0;
end;

[N,NbPoints]=size(tfr);
[trow,tcol] =size(t);
[xrow,xcol] =size(x);

if (trow~=1),
 error('T must only have one row'); 
elseif (xcol~=1),
 error('X must only have one column'); 
elseif (2^nextpow2(N)~=N),
 fprintf('For a faster computation, N should be a power of two\n');
elseif (xrow~=NbPoints)
 error('tfr should have as many columns as X has rows.');
elseif (min(t)<1)|(max(t)>NbPoints),
 error('the values of T must be between 1 and xrow.');
end; 

if trace, disp('non stationary signal filtering'); end;

tfr=ifft(tfr);
y=zeros(tcol,1);

for icol=1:tcol,
 if trace, disprog(icol,tcol,10); end;
 ti=t(icol); 
 valuestj=max([1 2-ti ti-N/2+1]):min([NbPoints 2*NbPoints-ti ti+N/2]);
 %fprintf('%f %f %f\n',ti, min(valuestj),max(valuestj));

 for tj=valuestj,
  tmid = fix(0.5*(ti+tj)); 
  tdiff= fix(ti-tj); indice= rem(N+tdiff,N)+1;
  %fprintf('%g %g %g\n',tj,tmid,indice);
  y(icol,1)=y(icol,1)+tfr(indice,tmid)*x(tj);
 end;
end;

if trace, fprintf('\n'); end;

⌨️ 快捷键说明

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