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

📄 mvfilter.m

📁 时间序列分析的matlab程序
💻 M
字号:
function [x,z]=mvfilter(B,A,x,z)% Multi-variate filter function%% Y = MVFILTER(B,A,X)% [Y,Z] = MVFILTER(B,A,X,Z)%%  Y = MVFILTER(B,A,X) filters the data in matrix X with the%    filter described by cell arrays A and B to create the filtered%    data Y.  The filter is a "Direct Form II Transposed"%    implementation of the standard difference equation:% %    a0*Y(n) = b0*X(:,n) + b1*X(:,n-1) + ... + bq*X(:,n-q)%                        - a1*Y(:,n-1) - ... - ap*Y(:,n-p)%%  A=[a0,a1,a2,...,ap] and B=[b0,b1,b2,...,bq] must be matrices of%  size  Mx((p+1)*M) and Mx((q+1)*M), respectively. %  a0,a1,...,ap, b0,b1,...,bq are matrices of size MxM%  a0 is usually the identity matrix I or must be invertible %  X should be of size MxN, if X has size NxM a warning %  is raised, and the output Y is also transposed. %% A simulated MV-AR process can be generiated with %	Y = mvfilter(eye(M), [eye(M),-AR],randn(M,N));%% A multivariate inverse filter can be realized with %       [AR,RC,PE] = mvar(Y,P);%	E = mvfilter([eye(M),-AR],eye(M),Y);%% see also: MVAR, FILTER%	$Revision: 1.10 $%	$Id: mvfilter.m,v 1.10 2005/05/25 02:52:49 pkienzle Exp $%	Copyright (C) 1996-2003 by Alois Schloegl <a.schloegl@ieee.org>	% This library is free software; you can redistribute it and/or% modify it under the terms of the GNU Library General Public% License as published by the Free Software Foundation; either% Version 2 of the License, or (at your option) any later version.%% This library is distributed in the hope that it will be useful,% but WITHOUT ANY WARRANTY; without even the implied warranty of% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU% Library General Public License for more details.%% You should have received a copy of the GNU Library General Public% License along with this library; if not, write to the% Free Software Foundation, Inc., 59 Temple Place - Suite 330,% Boston, MA  02111-1307, USA.[ra, ca] = size(A);[rb, cb] = size(B);[M,  N ] = size(x);if (ra~=rb),        fprintf(2,'ERROR MVFILTER: number of rows of A and B do not fit\n');	return;end;if nargin<4,        z = []; %zeros(M,oo);end;if (M~=ra),	if (N==ra),	        fprintf(2,'Warning MVFILTER: dimensions fit only to transposed data. X has been transposed.\n');		x = x.';		%[x,z] = mvfilter(B,A,x,z); x = x.'; return;	else	        fprintf(2,'ERROR MVFILTER: dimensions do not fit\n');		return;	end;end;        p  = ca/M-1;q  = cb/M-1;oo = max(p,q);if isempty(z)        z = zeros(M,oo);else        if  any(size(z)~=[M,oo])                fprintf('Error MVFILTER: size of z does not fit\n');                [size(z),oo,M]                return;	end;	end;%%%%% normalization to A{1}=I;if p<=q,         for k=1:p,                %A{k}=A{k}/A{1};                A(:,k*M+(1:M)) = A(:,k*M+(1:M)) / A(:,1:M);        end;	A(:,1:M) = eye(M);else        for k=0:q,                %B{k}=B{k}/A{1};                B(:,k*M+(1:M)) = B(:,k*M+(1:M)) / A(:,1:M);        end;end; for k = 1:N,        acc = B(:,1:M) * (x(:,k) + z(:,1));  % / A{1};	z   = [z(:,2:oo), zeros(M,1)];        for l = 1:q,        	z(:,l) = z(:,l) + B(:,l*M+(1:M)) * x(:,k);        end;        for l = 1:p,        	z(:,l) = z(:,l) - A(:,l*M+(1:M)) * acc;        end;        x(:,k) = acc;end;

⌨️ 快捷键说明

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