声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

12
返回列表 发新帖
楼主: tangaoming

[HHT] 关于instfreq函数

[复制链接]
发表于 2007-11-3 17:02 | 显示全部楼层

回复 #15 huangyong87 的帖子

本帖最后由 VibInfo 于 2016-11-8 15:24 编辑

这个问题在下面的帖子中已给出了解答:
请教HHT
原帖由 破凰 于 2007-9-9 14:30 发表
angle(-x(n+1).*conj(x(n-1)))+pi 就等于ϕ(n+1)-ϕ(n-1) 。
ϕ(n)——第n点的相位
%可以两边同时取正切来证明。加pi 的目的是由于angle后的范围为[-pi,pi],加pi 后就将其范围平移为[0,2pi].

再用中点差分公式(ϕ(n+1)-ϕ(n-1) )/(2*2pi)求出归一化频率了。显然,其范围是0-0.5

回复 支持 反对
分享到:

使用道具 举报

发表于 2007-11-5 14:24 | 显示全部楼层
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;
前面的差分公式我明白了,但紧接着的 H=kaytth(L); 是啥意思啊,不知道从哪里冒出来的,还有 for icol=1:tcol,
   if trace, disprog(icol,tcol,10); end;这个tcol也不懂
发表于 2008-4-15 20:35 | 显示全部楼层
H=kaytth(L); 你用H=kaytth(2); 得到H=[0.3,0.2]如果L=3,得到行向量的值之和也应该是0.5;下面的程序应该是相位差的一种估计方法,如果L=2,得到t点的瞬时频率会用到左右相邻两点的相位,通过计算相位差,得到最优的t点的瞬时频率估计。
我这么理解的。
发表于 2008-5-7 21:30 | 显示全部楼层
你可以在matlab中help kaytth;
发表于 2010-10-6 19:18 | 显示全部楼层
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;
发表于 2012-10-22 08:29 | 显示全部楼层
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

QQ|小黑屋|Archiver|手机版|联系我们|声振论坛

GMT+8, 2024-11-16 04:35 , Processed in 0.076495 second(s), 15 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表