spectrumcorrect.m

来自「在FFT后信号的频率往往与谱线不相重合」· M 代码 · 共 42 行

M
42
字号
%离散频谱比值校正法  
%
%xf为FFT后的复数谱
%CorrectNum为校正的谱线条数,即校正最大的CorrectNum条
%WindowType为加窗类型,1为矩形窗,2为Hanning窗
%
%SpectrumCorrect.m
function XfCorrect=SpectrumCorrect(xf,CorrectNum,WindowType)
XfCorrect=zeros(CorrectNum,3);
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;
        XfCorrect(i,2)=Amax/sinc(df);
        XfCorrect(i,3)=(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;
        XfCorrect(i,2)=(1-df^2)*Amax/sinc(df);
        XfCorrect(i,3)=(phmax+pi*df)*180/pi;
        
        xf(index-4:index+4)=zeros(1,9);
    end
    XfCorrect(i,3)=mod(XfCorrect(i,3),360);
    XfCorrect(i,3)=XfCorrect(i,3)-(XfCorrect(i,3)>180)*360;
end

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?