ljy2009 发表于 2008-3-14 11:31

在时频分析工具箱中instfreq.m

在这个函数中用到了梯形积分和极大似然估计,但是我咋找不到啊,程序如下
if (nargin == 0),
error('At least one parameter required');
end;
= size(x);
if (xcol~=1),
error('X must have only one column');
end

if (nargin == 1),
t=2:xrow-1; L=1; trace=0.0;
elseif (nargin == 2),
L = 1; trace=0.0;
elseif (nargin == 3),
trace=0.0;
end;

if L<1,
error('L must be >=1');
end
= size(t);
if (trow~=1),
error('T must have only one row');
end;

if (L==1),
if any(t==1)|any(t==xrow),
error('T can not be equal to 1 neither to the last element of X');
else
fnormhat=0.5*(angle(-x(t+1).*conj(x(t-1)))+pi)/(2*pi);
end;
else
H=kaytth(L);
if any(t<=L)|any(t+L>xrow),
error('The relation L<T<=length(X)-L must be satisfied');
else
for icol=1:tcol,
   if trace, disprog(icol,tcol,10); end;
   ti = t(icol); tau = 0:L;
   R = x(ti+tau).*conj(x(ti-tau));
   M4 = R(2:L+1).*conj(R(1:L));
   
   diff=2e-6;
   tetapred = H * (unwrap(angle(-M4))+pi);
   while tetapred<0.0 , tetapred=tetapred+(2*pi); end;
   while tetapred>2*pi, tetapred=tetapred-(2*pi); end;
   iter = 1;
   while (diff > 1e-6)&(iter<50),
    M4bis=M4 .* exp(-j*2.0*tetapred);
    teta = H * (unwrap(angle(M4bis))+2.0*tetapred);
    while teta<0.0 , teta=(2*pi)+teta; end;
    while teta>2*pi, teta=teta-(2*pi); end;
    diff=abs(teta-tetapred);
    tetapred=teta; iter=iter+1;
   end;
   fnormhat(icol,1)=teta/(2*pi);
end;
end;
end;

[ 本帖最后由 eight 于 2008-3-14 11:35 编辑 ]

eight 发表于 2008-3-14 11:34

原帖由 ljy2009 于 2008-3-14 11:31 发表 http://www.chinavib.com/forum/images/common/back.gif
在这个函数中用到了梯形积分和极大似然估计,但是我咋找不到啊,程序如下
if (nargin == 0),
error('At least one parameter required');
end;
= size(x);
if (xcol~=1),
error('X must have on ... 你到底想说什么?建议描述清楚

棒棒糖662 发表于 2008-3-14 14:08

估计是找不到instfreq.m 这个函数,我也出现这个情况,运行起来就提示这个函数出错了。麻烦指点一下

eight 发表于 2008-3-14 15:21

到信号处理板块,看我写的那篇精华帖

ljy2009 发表于 2008-3-14 16:05

我想搞清楚这个函数的算法,书中对它的描述是,用梯形积分法计算解析信号x的瞬时频率估计,
但它的程序中没有体现用了梯形积分啊,
页: [1]
查看完整版本: 在时频分析工具箱中instfreq.m