function [omegas, modePower, Phi, b] = AugmentedDMD(signal, dt, s, r) %bemenetek % - signal - a jel, sorvektor % - dt, az időlépés % - s, az eltolások száma, nem lehet nagyobb mint a jel hossza-r % - r a meghatározni kívánt módusok száma %kimenet % - omegas komplex körfrekvenciák, képzetes rész az ossszciláció valós rész a %növekedés, csökkenés % - modePower az egyes módusok teljesítmény tartalma % - Phi saját vektorjai a rendszernek, mivel ez eltolt rendszer ez tulajdonképpen a deriváltakat jelöli [x, x_pont, x_pontpont ...] % - b saját vektorok amplitudói, "a kezdeti értékek" if s>length(signal)-r error('Az eltolások száma túl nagy! Nem lehet nagyobb mint %g-%g=%g',length(signal),r,length(signal)-r ); end X=zeros(s, length(signal)-s+1); % X=[]; % err for k = 1:s X(k,:) = signal(k:end-s+k); end [U,S,V] = svd(X(:,1:end-1),'econ'); % keep r modes and compute DMD spectrum Lambda Atilde = U(:,1:r)'*X(:,2:end)*V(:,1:r)*inv(S(1:r,1:r)); [W,Lambda] = eig(Atilde); % convert eigenvalues to continuous time omegas = log(diag(Lambda))/dt; Phi = X(:,2:end)*V(:,1:r)*inv(S(1:r,1:r))*W; % mode amplitude (based on first snapshot) b = Phi\X(:,1); % need to scale power by 2/sqrt(s) modePower = abs(b)*2/sqrt(s); end