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

📄 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%	$Id: mvfilter.m 5090 2008-06-05 08:12:04Z schloegl $%	Copyright (C) 1996-2003 by Alois Schloegl <a.schloegl@ieee.org>	%%    This program is free software: you can redistribute it and/or modify%    it under the terms of the GNU General Public License as published by%    the Free Software Foundation, either version 3 of the License, or%    (at your option) any later version.%%    This program 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 General Public License for more details.%%    You should have received a copy of the GNU General Public License%    along with this program.  If not, see <http://www.gnu.org/licenses/>.[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 + -