algorithm - Finding parameters of exponentially decaying sinusoids (Matrix Pencil Method) -
the matrix pencil method algorithm can used find individual exponential decaying sinusoids' parameters (frequency, amplitude, decay factor , initial phase) in signal consisting of multiple such signals added. trying implement algorithm. algorithm can found in paper link:
http://ieeexplore.ieee.org/xpls/abs_all.jsp?arnumber=370583 or http://krein.unica.it/~cornelis/private/ieee/ieeeantennaspropagmag_37_48.pdf
in order test algorithm, created synthetic signal composed of 4 exponentially decaying sinusoids generated follows:
fs=2205; t=0:1/fs:249/fs; f(1)=80; f(2)=120; f(3)=250; f(4)=560; a(1)=.4; a(2)=1; a(3)=0.89; a(4)=.65; d(1)=70; d(2)=50; d(3)=90; d(4)=80; i=1:4 x(i,:)=a(i)*exp(-d(i)*t).*cos(2*pi*f(i)*t); end y=x(1,:)+x(2,:)+x(3,:)+x(4,:);
i feed signal algorithm described in paper follows:
function [f d] = mpencil(y) %construct hankel matrix n = size(y,2); l1 = ceil(1/3 * n); l2 = floor(2/3 * n); l = ceil((l1 + l2) / 2); fs=2205; i=1:1:(n-l) y(i,:)=y(i:(i+l)); end y1=y(:,1:l); y2=y(:,2:(l+1)); [u,s,v] = svd(y); d=diag(s); tol=1e-3; m=0; l=length(d); i=1:l if( abs(d(i)/d(1)) >= tol) m=m+1; end end ss=s(:,1:m); vnew=v(:,1:m); a=size(vnew,1); vs1=vnew(1:(a-1),:); vs2=vnew(2:end,:); y1=u*ss*(vs1'); y2=u*ss*(vs2'); d_fil=(pinv(y1))*y2; z = eig(d_fil); l=length(z); i=1:2:l f((i+1)/2)= (angle(z(i))*fs)/(2*pi); d((i+1)/2)=-real(z(i))*fs; end
in output above code, correctly getting 4 constituent frequency components not getting decaying factors. if has prior experience algorithm or has understanding why discrepancy might there, grateful help. have tried rewriting code scratch multiple times has been of no help, giving same results.
any highly appreciated.
Comments
Post a Comment