回复 #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 后就将其范围平移为.
再用中点差分公式(ϕ(n+1)-ϕ(n-1) )/(2*2pi)求出归一化频率了。显然,其范围是0-0.5
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也不懂 H=kaytth(L); 你用H=kaytth(2); 得到H=如果L=3,得到行向量的值之和也应该是0.5;下面的程序应该是相位差的一种估计方法,如果L=2,得到t点的瞬时频率会用到左右相邻两点的相位,通过计算相位差,得到最优的t点的瞬时频率估计。
我这么理解的。 你可以在matlab中help kaytth; 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;
{:{39}:}{:{39}:}{:{39}:}
页:
1
[2]