%离散频谱比值校正法 by yangzj 2007.4.28
%
%xf为FFT后的复数谱
%CorrectNum为校正的谱线条数,即校正最大的CorrectNum条
%WindowType为加窗类型,1为矩形窗,2为Hanning窗
%
%SpectrumCorrect.m
function XfCorrect=SpectrumCorrectBZ(xf,CorrectNum,WindowType)
XfCorrect=zeros(CorrectNum,1);
for i=1:CorrectNum
A=abs(xf);
[Amax,index]=max(A);
phmax=angle(xf(index));
%比值法
%加矩形窗
if (WindowType==1)
indsecL=A(index-1)>A(index+1);
df=indsecL.*A(index-1)./(Amax+A(index-1))-(1-indsecL).*A(index+1)./(Amax+A(index+1));
%XfCorrect(i,1)=(index-1-df)*fs/N;
%XfCorrect(i,2)=Amax/sinc(df);
XfCorrect(i,1)=(phmax+pi*df)*180/pi;
xf(index-2:index+2)=zeros(1,5);
end
%比值法
%加Hanning窗
if (WindowType==2)
indsecL=A(index-1)>A(index+1);
df=indsecL.*(2*A(index-1)-Amax)./(Amax+A(index-1))-(1-indsecL).*(2*A(index+1)-Amax)./(Amax+A(index+1));
%XfCorrect(i,1)=(index-1-df)*fs/N;
%XfCorrect(i,2)=(1-df^2)*Amax/sinc(df);
XfCorrect(i,1)=(phmax+pi*df)*180/pi;
xf(index-4:index+4)=zeros(1,9);
end
XfCorrect(i,1)=mod(XfCorrect(i,1),360);
%XfCorrect(i,1)=abs(XfCorrect(i,1));
XfCorrect(i,1)=XfCorrect(i,1)-(XfCorrect(i,1)>180)*360;
end
评论0