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

Popular posts from this blog

php - Wordpress website dashboard page or post editor content is not showing but front end data is showing properly -

How to get the ip address of VM and use it to configure SSH connection dynamically in Ansible -

javascript - Get parameter of GET request -